[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-bolna-ai--bolna":3,"tool-bolna-ai--bolna":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":67,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":79,"owner_email":80,"owner_twitter":79,"owner_website":81,"owner_url":82,"languages":83,"stars":96,"forks":97,"last_commit_at":98,"license":99,"difficulty_score":100,"env_os":101,"env_gpu":102,"env_ram":103,"env_deps":104,"category_tags":113,"github_topics":114,"view_count":23,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":134,"updated_at":135,"faqs":136,"releases":167},3912,"bolna-ai\u002Fbolna","bolna","Conversational voice AI agents","Bolna 是一个端到端的开源语音 AI 智能体平台，旨在帮助开发者快速构建基于大语言模型（LLM）的语音对话应用。它解决了传统语音助手开发中流程复杂、组件分散的痛点，让用户仅需通过简单的 JSON 配置，即可将自动语音识别（ASR）、大语言模型推理和语音合成（TTS）无缝整合，实现低延迟的自然语音交互。\n\n这款工具特别适合后端工程师、AI 应用开发者以及希望探索语音交互场景的技术团队使用。无论是搭建电话客服系统、语音助手，还是进行多模态对话实验，Bolna 都能提供坚实的技术底座。其核心亮点在于强大的编排能力：基于 WebSocket 技术实时协调各类主流服务商，支持 Twilio、Plivo 等电话系统接入，兼容 Deepgram、Azure 的转录服务，并能灵活调用 OpenAI、Llama、Mistral 等多种大模型及 ElevenLabs、AWS Polly 等语音合成引擎。\n\nBolna 采用“开源优先”的开发理念，作为其托管 API 和无代码平台的核心引擎，确保了技术的透明性与可扩展性。项目提供了完整的本地部署方案（基于 Docker），包含电话服务器、代理隧道及数据持","Bolna 是一个端到端的开源语音 AI 智能体平台，旨在帮助开发者快速构建基于大语言模型（LLM）的语音对话应用。它解决了传统语音助手开发中流程复杂、组件分散的痛点，让用户仅需通过简单的 JSON 配置，即可将自动语音识别（ASR）、大语言模型推理和语音合成（TTS）无缝整合，实现低延迟的自然语音交互。\n\n这款工具特别适合后端工程师、AI 应用开发者以及希望探索语音交互场景的技术团队使用。无论是搭建电话客服系统、语音助手，还是进行多模态对话实验，Bolna 都能提供坚实的技术底座。其核心亮点在于强大的编排能力：基于 WebSocket 技术实时协调各类主流服务商，支持 Twilio、Plivo 等电话系统接入，兼容 Deepgram、Azure 的转录服务，并能灵活调用 OpenAI、Llama、Mistral 等多种大模型及 ElevenLabs、AWS Polly 等语音合成引擎。\n\nBolna 采用“开源优先”的开发理念，作为其托管 API 和无代码平台的核心引擎，确保了技术的透明性与可扩展性。项目提供了完整的本地部署方案（基于 Docker），包含电话服务器、代理隧道及数据持久化组件，方便开发者在私有环境中快速启动并定制专属的语音智能体。","\u003Ch1 align=\"center\">\n\u003C\u002Fh1>\n\u003Cp align=\"center\">\n  \u003Cp align=\"center\">\u003Cb>End-to-end open-source voice agents platform\u003C\u002Fb>: Quickly build voice firsts conversational assistants through a json. \u003C\u002Fp>\n\u003C\u002Fp>\n\n\u003Ch4 align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002F59kQWGgnm8\">Discord\u003C\u002Fa> |\n  \u003Ca href=\"https:\u002F\u002Fdocs.bolna.ai\">Hosted Docs\u003C\u002Fa> |\n  \u003Ca href=\"https:\u002F\u002Fbolna.ai\">Website\u003C\u002Fa>\n\u003C\u002Fh4>\n\n\u003Ch4 align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002F59kQWGgnm8\">\n      \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?label=Chat%20on&message=Discord&color=blue&logo=Discord&style=flat-square\" alt=\"Discord\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmain\u002FLICENSE\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg\" alt=\"Bolna is released under the MIT license.\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmain\u002FCONTRIBUTING.md\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-Welcome-brightgreen\" alt=\"PRs welcome!\" \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fh4>\n\n> [!NOTE]\n> We are actively looking for maintainers.\n\n## Introduction\n\n**[Bolna](https:\u002F\u002Fbolna.ai)** is the end-to-end open source production ready framework for quickly building LLM based voice driven conversational applications.\n\n## Demo\nhttps:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fassets\u002F1313096\u002F2237f64f-1c5b-4723-b7e7-d11466e9b226\n\n\n## What is this repository?\nThis repository contains the entire orchestration platform to build voice AI applications. It technically orchestrates voice conversations using combination of different ASR+LLM+TTS providers and models over websockets.\n\n\n## Components\nBolna helps you create AI Voice Agents which can be instructed to do tasks beginning with:\n\n1. Orchestration platform (this open source repository)\n2. Hosted APIs (https:\u002F\u002Fdocs.bolna.ai\u002Fapi-reference\u002Fintroduction) built on top of this orchestration platform [currently closed source]\n3. No-code UI playground at https:\u002F\u002Fplatform.bolna.ai\u002F using the hosted APIs + tailwind CSS [currently closed source]\n\n\n## Development philosophy\n1. Any integration, enhancement or feature initially lands on this open source package since it forms the backbone of our Hosted APIs and dashboard\n2. Post that we expose APIs or make changes to existing APIs as required for the same\n3. Thirdly, we push it to the UI dashboard\n\n```mermaid\ngraph LR;\n    A[Bolna open source] -->B[Hosted APIs];\n    B[Hosted APIs] --> C[Hosted Playground]\n```\n\n## Supported providers and models\n1. Initiating a phone call using telephony providers like `Twilio`, `Plivo`, `Exotel` (coming soon), `Vonage` (coming soon) etc.\n2. Transcribing the conversations using `Deepgram`, `Azure` etc.\n3. Using LLMs like `OpenAI`, `DeepSeek`, `Llama`, `Cohere`, `Mistral`,  etc to handle conversations\n4. Synthesizing LLM responses back to telephony using `AWS Polly`, `ElevenLabs`, `Deepgram`, `OpenAI`, `Azure`, `Cartesia`, `Smallest` etc.\n\n\nRefer to the [docs](https:\u002F\u002Fdocs.bolna.ai\u002Fproviders) for a deepdive into all supported providers.\n\n\n## Local example setup [will be moved to a different repository]\nA basic local setup includes usage of [Twilio](local_setup\u002Ftelephony_server\u002Ftwilio_api_server.py) or [Plivo](local_setup\u002Ftelephony_server\u002Fplivo_api_server.py) for telephony. We have dockerized the setup in `local_setup\u002F`. One will need to populate an environment `.env` file from `.env.sample`.\n\nThe setup consists of four containers:\n\n1. Telephony web server:\n   * Choosing Twilio: for initiating the calls one will need to set up a [Twilio account](https:\u002F\u002Fwww.twilio.com\u002Fdocs\u002Fusage\u002Ftutorials\u002Fhow-to-use-your-free-trial-account)\n   * Choosing Plivo: for initiating the calls one will need to set up a [Plivo account](https:\u002F\u002Fwww.plivo.com\u002F)\n2. Bolna server: for creating and handling agents \n3. `ngrok`: for tunneling. One will need to add the `authtoken` to `ngrok-config.yml`\n4. `redis`: for persisting agents & prompt data\n\n### Quick Start\n\nThe easiest way to get started is to use the provided script:\n\n```bash\ncd local_setup\nchmod +x start.sh\n.\u002Fstart.sh\n```\n\nThis script will check for Docker dependencies, build all services with BuildKit enabled, and start them in detached mode.\n\n### Manual Setup\n\nAlternatively, you can manually build and run the services:\n\n1. Make sure you have Docker with Docker Compose V2 installed\n2. Enable BuildKit for faster builds:\n   ```bash\n   export DOCKER_BUILDKIT=1\n   export COMPOSE_DOCKER_CLI_BUILD=1\n   ```\n3. Build the images:\n   ```bash\n   docker compose build\n   ```\n4. Run the services:\n   ```bash\n   docker compose up -d\n   ```\n\nTo run specific services only:\n\n```bash\ndocker compose up -d bolna-app twilio-app\n# or\ndocker compose up -d bolna-app plivo-app\n```\n\nOnce the docker containers are up, you can now start to create your agents and instruct them to initiate calls.\n\n\n## Example agents to create, use and start making calls\nYou may try out different agents from [example.bolna.dev](https:\u002F\u002Fexamples.bolna.dev).\n\n## Programmatic usage (minimal example)\n\nYou can also build and run an agent directly in Python without the local telephony setup.\n\nExample script: `examples\u002Fsimple_assistant.py`\n\n```python\nimport asyncio\nfrom bolna.assistant import Assistant\nfrom bolna.models import (\n    Transcriber,\n    Synthesizer,\n    ElevenLabsConfig,\n    LlmAgent,\n    SimpleLlmAgent,\n)\n\n\nasync def main():\n    assistant = Assistant(name=\"demo_agent\")\n\n    # Configure audio input (ASR)\n    transcriber = Transcriber(provider=\"deepgram\", model=\"nova-2\", stream=True, language=\"en\")\n\n    # Configure LLM\n    llm_agent = LlmAgent(\n        agent_type=\"simple_llm_agent\",\n        agent_flow_type=\"streaming\",\n        llm_config=SimpleLlmAgent(\n            provider=\"openai\",\n            model=\"gpt-4o-mini\",\n            temperature=0.3,\n        ),\n    )\n\n    # Configure audio output (TTS)\n    synthesizer = Synthesizer(\n        provider=\"elevenlabs\",\n        provider_config=ElevenLabsConfig(\n            voice=\"George\", voice_id=\"JBFqnCBsd6RMkjVDRZzb\", model=\"eleven_turbo_v2_5\"\n        ),\n        stream=True,\n        audio_format=\"wav\",\n    )\n\n    # Build a single coherent pipeline: transcriber -> llm -> synthesizer\n    assistant.add_task(\n        task_type=\"conversation\",\n        llm_agent=llm_agent,\n        transcriber=transcriber,\n        synthesizer=synthesizer,\n        enable_textual_input=False,\n    )\n\n    # Stream results\n    async for chunk in assistant.execute():\n        print(chunk)\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\nHow to run:\n\n```bash\nexport OPENAI_API_KEY=...\nexport DEEPGRAM_AUTH_TOKEN=...\nexport ELEVENLABS_API_KEY=...\npython examples\u002Fsimple_assistant.py\n```\n\nThis demonstrates orchestration and streaming output. For telephony, use the services in `local_setup\u002F`.\n\nNote: For REST-based usage (Agent CRUD over HTTP), see `API.md` in the repo root.\n\nExpected output shape: `assistant.execute()` is an async generator yielding per-task result dicts (event-like chunks). The exact keys depend on configured tools\u002Fproviders; treat it as a stream and process incrementally.\n\n### Text-only pipeline example\n\nIf you want a text-only flow (no transcriber\u002Fsynthesizer), you can enable a text-only pipeline:\n\nExample script: `examples\u002Ftext_only_assistant.py`\n\n```python\nimport asyncio\nfrom bolna.assistant import Assistant\nfrom bolna.models import LlmAgent, SimpleLlmAgent\n\n\nasync def main():\n    assistant = Assistant(name=\"text_only_agent\")\n\n    llm_agent = LlmAgent(\n        agent_type=\"simple_llm_agent\",\n        agent_flow_type=\"streaming\",\n        llm_config=SimpleLlmAgent(\n            provider=\"openai\",\n            model=\"gpt-4o-mini\",\n            temperature=0.2,\n        ),\n    )\n\n    # No transcriber\u002Fsynthesizer; enable a text-only pipeline\n    assistant.add_task(\n        task_type=\"conversation\",\n        llm_agent=llm_agent,\n        enable_textual_input=True,\n    )\n\n    async for chunk in assistant.execute():\n        print(chunk)\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\nHow to run (text-only):\n\n```bash\nexport OPENAI_API_KEY=...\npython examples\u002Ftext_only_assistant.py\n```\n\nExpected output shape: `assistant.execute()` yields streaming dicts per task step; fields vary by configuration. Handle chunk-by-chunk.\n\n\n## Using your own providers\nYou can populate the `.env` file to use your own keys for providers.\n\n\u003Cdetails>\n\n\u003Csummary>ASR Providers\u003C\u002Fsummary>\u003Cbr>\nThese are the current supported ASRs Providers:\n\n| Provider     | Environment variable to be added in `.env` file |\n|--------------|-------------------------------------------------|\n| Deepgram     | `DEEPGRAM_AUTH_TOKEN`                           |\n\n\u003C\u002Fdetails>\n&nbsp;\u003Cbr>\n\n\u003Cdetails>\n\u003Csummary>LLM Providers\u003C\u002Fsummary>\u003Cbr>\nBolna uses LiteLLM package to support multiple LLM integrations.\n\nThese are the current supported LLM Provider Family:\nhttps:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002F10fa26e5985d342eedb5a8985642f12f1cf92a4b\u002Fbolna\u002Fproviders.py#L30-L47\n\nFor LiteLLM based LLMs, add either of the following to the `.env` file depending on your use-case:\u003Cbr>\u003Cbr>\n`LITELLM_MODEL_API_KEY`: API Key of the LLM\u003Cbr>\n`LITELLM_MODEL_API_BASE`: URL of the hosted LLM\u003Cbr>\n`LITELLM_MODEL_API_VERSION`: API VERSION for LLMs like Azure\n\nFor LLMs hosted via VLLM, add the following to the `.env` file:\u003Cbr>\n`VLLM_SERVER_BASE_URL`: URL of the hosted LLM using VLLM\n\n\u003C\u002Fdetails>\n&nbsp;\u003Cbr>\n\n\u003Cdetails>\n\n\u003Csummary>TTS Providers\u003C\u002Fsummary>\u003Cbr>\nThese are the current supported TTS Providers:\nhttps:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fc8a0d1428793d4df29133119e354bc2f85a7ca76\u002Fbolna\u002Fproviders.py#L7-L14\n\n| Provider   | Environment variable to be added in `.env` file  |\n|------------|--------------------------------------------------|\n| AWS Polly  | Accessed from system wide credentials via ~\u002F.aws |\n| Elevenlabs | `ELEVENLABS_API_KEY`                             |\n| OpenAI     | `OPENAI_API_KEY`                                 |\n| Deepgram   | `DEEPGRAM_AUTH_TOKEN`                            |\n| Cartesia   | `CARTESIA_API_KEY`                            |\n| Smallest   | `SMALLEST_API_KEY`                            |\n\n\u003C\u002Fdetails>\n&nbsp;\u003Cbr>\n\n\u003Cdetails>\n\n\u003Csummary>Telephony Providers\u003C\u002Fsummary>\u003Cbr>\nThese are the current supported Telephony Providers:\n\n| Provider | Environment variable to be added in `.env` file                                                                                                                    |\n|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Twilio   | `TWILIO_ACCOUNT_SID`, `TWILIO_AUTH_TOKEN`, `TWILIO_PHONE_NUMBER`|\n| Plivo    | `PLIVO_AUTH_ID`, `PLIVO_AUTH_TOKEN`, `PLIVO_PHONE_NUMBER`|\n\n\u003C\u002Fdetails>\n\n## Open-source v\u002Fs Hosted APIs\n**We have in the past tried to maintain both the open source and the hosted solution (via APIs and a UI dashboard)**.\n\nWe have fluctuated b\u002Fw maintaining this repository purely from a point of time crunch and not interest.\n\nCurrently, we are continuing to maintain it for the community and improving the adoption of Voice AI.\n\nThough the repository is completely open source, you can connect with us if interested in managed hosted offerings or more customized solutions.\n\u003Ca href=\"https:\u002F\u002Fcalendly.com\u002Fbolna\u002F30min\">\u003Cimg alt=\"Schedule a meeting\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fbolna-ai_bolna_readme_52f7c9e5342a.png\" \u002F>\u003C\u002Fa>\n\n## Extending with other Telephony Providers\nIn case you wish to extend and add some other Telephony like Vonage, Telnyx, etc. following the guidelines below:\n1. Make sure bi-directional streaming is supported by the Telephony provider\n2. Add the telephony-specific input handler file in [input_handlers\u002Ftelephony_providers](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Ftree\u002Fmaster\u002Fbolna\u002Finput_handlers\u002Ftelephony_providers) writing custom functions extending from the [telephony.py](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmaster\u002Fbolna\u002Finput_handlers\u002Ftelephony.py) class\n   1. This file will mainly contain how different types of event packets are being ingested from the telephony provider\n3. Add telephony-specific output handler file in [output_handlers\u002Ftelephony_providers](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Ftree\u002Fmaster\u002Fbolna\u002Foutput_handlers\u002Ftelephony_providers) writing custom functions extending from the [telephony.py](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmaster\u002Fbolna\u002Foutput_handlers\u002Ftelephony.py) class\n   1. This mainly concerns converting audio from the synthesizer class to a supported audio format and streaming it over the websocket provided by the telephony provider\n4. Lastly, you'll have to write a dedicated server like the example [twilio_api_server.py](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmaster\u002Flocal_setup\u002Ftelephony_server\u002Ftwilio_api_server.py) provided in [local_setup](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmaster\u002Flocal_setup\u002Ftelephony_server) to initiate calls over websockets.\n\n\n## Contributing\nWe love all types of contributions: whether big or small helping in improving this community resource.\n\n1. There are a number of [open issues present](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fissues) which can be good ones to start with\n2. If you have suggestions for enhancements, wish to contribute a simple fix such as correcting a typo, or want to address an apparent bug, please feel free to initiate a new issue or submit a pull request\n2. If you're contemplating a larger change or addition to this repository, be it in terms of its structure or the features, kindly begin by creating a new issue [open a new issue :octocat:](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fissues\u002Fnew) and outline your proposed changes. This will allow us to engage in a discussion before you dedicate a significant amount of time or effort. Your cooperation and understanding are appreciated\n","\u003Ch1 align=\"center\">\n\u003C\u002Fh1>\n\u003Cp align=\"center\">\n  \u003Cp align=\"center\">\u003Cb>端到端开源语音智能体平台\u003C\u002Fb>: 通过 JSON 快速构建以语音为核心的对话式助手。\u003C\u002Fp>\n\u003C\u002Fp>\n\n\u003Ch4 align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002F59kQWGgnm8\">Discord\u003C\u002Fa> |\n  \u003Ca href=\"https:\u002F\u002Fdocs.bolna.ai\">托管文档\u003C\u002Fa> |\n  \u003Ca href=\"https:\u002F\u002Fbolna.ai\">官网\u003C\u002Fa>\n\u003C\u002Fh4>\n\n\u003Ch4 align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002F59kQWGgnm8\">\n      \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?label=Chat%20on&message=Discord&color=blue&logo=Discord&style=flat-square\" alt=\"Discord\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmain\u002FLICENSE\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg\" alt=\"Bolna 采用 MIT 许可证发布。\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmain\u002FCONTRIBUTING.md\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-Welcome-brightgreen\" alt=\"欢迎提交 PR！\" \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fh4>\n\n> [!NOTE]\n> 我们正在积极寻找维护者。\n\n## 简介\n\n**[Bolna](https:\u002F\u002Fbolna.ai)** 是一个端到端的开源生产就绪框架，用于快速构建基于大语言模型的语音驱动对话应用。\n\n## 演示\nhttps:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fassets\u002F1313096\u002F2237f64f-1c5b-4723-b7e7-d11466e9b226\n\n\n## 这个仓库是什么？\n该仓库包含了构建语音 AI 应用的完整编排平台。它通过 WebSocket 结合不同的 ASR、LLM 和 TTS 提供商及模型来技术性地编排语音对话。\n\n## 组件\nBolna 帮助您创建 AI 语音智能体，这些智能体可以被指令执行以下任务：\n\n1. 编排平台（此开源仓库）\n2. 托管 API（https:\u002F\u002Fdocs.bolna.ai\u002Fapi-reference\u002Fintroduction），基于此编排平台构建 [目前为闭源]\n3. 使用托管 API 和 Tailwind CSS 的无代码 UI 交互平台 https:\u002F\u002Fplatform.bolna.ai\u002F [目前为闭源]\n\n\n## 开发理念\n1. 任何集成、增强或功能最初都会进入这个开源包，因为它构成了我们托管 API 和仪表板的核心。\n2. 随后，我们会根据需要公开 API 或对现有 API 进行修改。\n3. 最后，我们将更新推送到 UI 仪表板。\n\n```mermaid\ngraph LR;\n    A[Bolna 开源] -->B[托管 API];\n    B[托管 API] --> C[托管 Playground]\n```\n\n## 支持的提供商和模型\n1. 使用电话服务提供商如 `Twilio`、`Plivo`、`Exotel`（即将推出）、`Vonage`（即将推出）等发起电话呼叫。\n2. 使用 `Deepgram`、`Azure` 等进行对话转录。\n3. 使用 `OpenAI`、`DeepSeek`、`Llama`、`Cohere`、`Mistral` 等 LLM 处理对话。\n4. 使用 `AWS Polly`、`ElevenLabs`、`Deepgram`、`OpenAI`、`Azure`、`Cartesia`、`Smallest` 等将 LLM 的响应合成回电话音频。\n\n有关所有支持提供商的深入信息，请参阅 [文档](https:\u002F\u002Fdocs.bolna.ai\u002Fproviders)。\n\n## 本地示例设置 [将移至另一个仓库]\n基本的本地设置包括使用 [Twilio](local_setup\u002Ftelephony_server\u002Ftwilio_api_server.py) 或 [Plivo](local_setup\u002Ftelephony_server\u002Fplivo_api_server.py) 进行电话通信。我们已将设置容器化在 `local_setup\u002F` 中。用户需要从 `.env.sample` 文件中填充环境变量文件 `.env`。\n\n该设置包含四个容器：\n\n1. 电话网络服务器：\n   * 如果选择 Twilio：要发起呼叫，需要先设置一个 [Twilio 账户](https:\u002F\u002Fwww.twilio.com\u002Fdocs\u002Fusage\u002Ftutorials\u002Fhow-to-use-your-free-trial-account)\n   * 如果选择 Plivo：要发起呼叫，需要先设置一个 [Plivo 账户](https:\u002F\u002Fwww.plivo.com\u002F)\n2. Bolna 服务器：用于创建和管理智能体\n3. `ngrok`：用于隧道转发。用户需要将 `authtoken` 添加到 `ngrok-config.yml`\n4. `redis`：用于持久化智能体和提示数据。\n\n### 快速开始\n\n最简单的方式是使用提供的脚本：\n\n```bash\ncd local_setup\nchmod +x start.sh\n.\u002Fstart.sh\n```\n\n该脚本会检查 Docker 依赖项，启用 BuildKit 构建所有服务，并以分离模式启动它们。\n\n### 手动设置\n\n或者，您可以手动构建并运行这些服务：\n\n1. 确保已安装 Docker 和 Docker Compose V2\n2. 启用 BuildKit 以加快构建速度：\n   ```bash\n   export DOCKER_BUILDKIT=1\n   export COMPOSE_DOCKER_CLI_BUILD=1\n   ```\n3. 构建镜像：\n   ```bash\n   docker compose build\n   ```\n4. 运行服务：\n   ```bash\n   docker compose up -d\n   ```\n\n如果只想运行特定服务：\n\n```bash\ndocker compose up -d bolna-app twilio-app\n# 或\ndocker compose up -d bolna-app plivo-app\n```\n\nDocker 容器启动后，您就可以开始创建智能体并指示它们发起呼叫了。\n\n## 示例智能体：创建、使用并开始拨打电话\n您可以尝试来自 [example.bolna.dev](https:\u002F\u002Fexamples.bolna.dev) 的不同智能体。\n\n## 编程式使用（最小示例）\n\n您也可以直接在 Python 中构建并运行一个智能体，而无需本地电话设置。\n\n示例脚本：`examples\u002Fsimple_assistant.py`\n\n```python\nimport asyncio\nfrom bolna.assistant import Assistant\nfrom bolna.models import (\n    Transcriber,\n    Synthesizer,\n    ElevenLabsConfig,\n    LlmAgent,\n    SimpleLlmAgent,\n)\n\n\nasync def main():\n    assistant = Assistant(name=\"demo_agent\")\n\n    # 配置音频输入（ASR）\n    transcriber = Transcriber(provider=\"deepgram\", model=\"nova-2\", stream=True, language=\"en\")\n\n    # 配置 LLM\n    llm_agent = LlmAgent(\n        agent_type=\"simple_llm_agent\",\n        agent_flow_type=\"streaming\",\n        llm_config=SimpleLlmAgent(\n            provider=\"openai\",\n            model=\"gpt-4o-mini\",\n            temperature=0.3,\n        ),\n    )\n\n    # 配置音频输出（TTS）\n    synthesizer = Synthesizer(\n        provider=\"elevenlabs\",\n        provider_config=ElevenLabsConfig(\n            voice=\"George\", voice_id=\"JBFqnCBsd6RMkjVDRZzb\", model=\"eleven_turbo_v2_5\"\n        ),\n        stream=True,\n        audio_format=\"wav\",\n    )\n\n    # 构建单一连贯的管道：转录器 -> LLM -> 合成器\n    assistant.add_task(\n        task_type=\"conversation\",\n        llm_agent=llm_agent,\n        transcriber=transcriber,\n        synthesizer=synthesizer,\n        enable_textual_input=False,\n    )\n\n    # 流式输出结果\n    async for chunk in assistant.execute():\n        print(chunk)\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n如何运行：\n\n```bash\nexport OPENAI_API_KEY=...\nexport DEEPGRAM_AUTH_TOKEN=...\nexport ELEVENLABS_API_KEY=...\npython examples\u002Fsimple_assistant.py\n```\n\n这展示了编排和流式输出。对于电话通信，请使用 `local_setup\u002F` 中的服务。\n\n注意：对于基于 REST 的使用（通过 HTTP 进行智能体的 CRUD 操作），请参阅仓库根目录下的 `API.md`。\n\n预期输出格式：`assistant.execute()` 是一个异步生成器，每次产生一个任务结果字典（类似事件的块）。具体的键取决于配置的工具或提供商；应将其视为流，并逐步处理。\n\n### 仅文本管道示例\n\n如果您想要一个仅包含文本的流程（无需转录器\u002F合成器），可以启用仅文本管道：\n\n示例脚本：`examples\u002Ftext_only_assistant.py`\n\n```python\nimport asyncio\nfrom bolna.assistant import Assistant\nfrom bolna.models import LlmAgent, SimpleLlmAgent\n\n\nasync def main():\n    assistant = Assistant(name=\"text_only_agent\")\n\n    llm_agent = LlmAgent(\n        agent_type=\"simple_llm_agent\",\n        agent_flow_type=\"streaming\",\n        llm_config=SimpleLlmAgent(\n            provider=\"openai\",\n            model=\"gpt-4o-mini\",\n            temperature=0.2,\n        ),\n    )\n\n    # 无转录器\u002F合成器；启用仅文本管道\n    assistant.add_task(\n        task_type=\"conversation\",\n        llm_agent=llm_agent,\n        enable_textual_input=True,\n    )\n\n    async for chunk in assistant.execute():\n        print(chunk)\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n运行方法（仅文本）：\n\n```bash\nexport OPENAI_API_KEY=...\npython examples\u002Ftext_only_assistant.py\n```\n\n预期输出格式：`assistant.execute()` 每个任务步骤会流式返回字典；字段因配置而异。请逐块处理。\n\n## 使用您自己的提供商\n您可以通过填充 `.env` 文件来使用您自己的提供商密钥。\n\n\u003Cdetails>\n\n\u003Csummary>ASR 提供商\u003C\u002Fsummary>\u003Cbr>\n目前支持的 ASR 提供商如下：\n\n| 提供商     | 需要在 `.env` 文件中添加的环境变量 |\n|--------------|-------------------------------------|\n| Deepgram     | `DEEPGRAM_AUTH_TOKEN`               |\n\n\u003C\u002Fdetails>\n&nbsp;\u003Cbr>\n\n\u003Cdetails>\n\u003Csummary>LLM 提供商\u003C\u002Fsummary>\u003Cbr>\nBolna 使用 LiteLLM 包来支持多种 LLM 集成。\n\n目前支持的 LLM 提供商家族如下：\nhttps:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002F10fa26e5985d342eedb5a8985642f12f1cf92a4b\u002Fbolna\u002Fproviders.py#L30-L47\n\n对于基于 LiteLLM 的 LLM，根据您的使用场景，在 `.env` 文件中添加以下内容之一：\u003Cbr>\u003Cbr>\n`LITELLM_MODEL_API_KEY`：LLM 的 API 密钥\u003Cbr>\n`LITELLM_MODEL_API_BASE`：托管 LLM 的 URL\u003Cbr>\n`LITELLM_MODEL_API_VERSION`：适用于 Azure 等 LLM 的 API 版本\n\n对于通过 VLLM 托管的 LLM，在 `.env` 文件中添加：\u003Cbr>\n`VLLM_SERVER_BASE_URL`：使用 VLLM 托管的 LLM 的 URL\n\n\u003C\u002Fdetails>\n&nbsp;\u003Cbr>\n\n\u003Cdetails>\n\n\u003Csummary>TTS 提供商\u003C\u002Fsummary>\u003Cbr>\n目前支持的 TTS 提供商如下：\nhttps:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fc8a0d1428793d4df29133119e354bc2f85a7ca76\u002Fbolna\u002Fproviders.py#L7-L14\n\n| 提供商   | 需要在 `.env` 文件中添加的环境变量  |\n|------------|--------------------------------------|\n| AWS Polly  | 通过系统范围内的凭据从 ~\u002F.aws 访问 |\n| Elevenlabs | `ELEVENLABS_API_KEY`                 |\n| OpenAI     | `OPENAI_API_KEY`                     |\n| Deepgram   | `DEEPGRAM_AUTH_TOKEN`                |\n| Cartesia   | `CARTESIA_API_KEY`                   |\n| Smallest   | `SMALLEST_API_KEY`                   |\n\n\u003C\u002Fdetails>\n&nbsp;\u003Cbr>\n\n\u003Cdetails>\n\n\u003Csummary>电话提供商\u003C\u002Fsummary>\u003Cbr>\n目前支持的电话提供商如下：\n\n| 提供商 | 需要在 `.env` 文件中添加的环境变量                                                                                                                    |\n|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Twilio   | `TWILIO_ACCOUNT_SID`, `TWILIO_AUTH_TOKEN`, `TWILIO_PHONE_NUMBER`|\n| Plivo    | `PLIVO_AUTH_ID`, `PLIVO_AUTH_TOKEN`, `PLIVO_PHONE_NUMBER`|\n\n\u003C\u002Fdetails>\n\n## 开源与托管 API\n**我们过去曾尝试同时维护开源和托管解决方案（通过 API 和 UI 控制面板）**。\n\n由于时间紧张而非兴趣不足，我们曾在维护此仓库上有所波动。\n\n目前，我们仍在为社区维护它，并致力于提升语音 AI 的普及度。\n\n尽管该仓库完全开源，但如果您对托管服务或更定制化的解决方案感兴趣，仍可与我们联系。\n\u003Ca href=\"https:\u002F\u002Fcalendly.com\u002Fbolna\u002F30min\">\u003Cimg alt=\"预约会议\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fbolna-ai_bolna_readme_52f7c9e5342a.png\" \u002F>\u003C\u002Fa>\n\n## 扩展其他电话提供商\n如果您希望扩展并添加 Vonage、Telnyx 等其他电话提供商，请遵循以下指南：\n1. 确保该电话提供商支持双向流媒体\n2. 在 [input_handlers\u002Ftelephony_providers](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Ftree\u002Fmaster\u002Fbolna\u002Finput_handlers\u002Ftelephony_providers) 中添加特定于电话的输入处理器文件，编写从 [telephony.py](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmaster\u002Fbolna\u002Finput_handlers\u002Ftelephony.py) 类扩展的自定义函数\n   1. 该文件主要包含如何从电话提供商处接收不同类型的事件数据包\n3. 在 [output_handlers\u002Ftelephony_providers](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Ftree\u002Fmaster\u002Fbolna\u002Foutput_handlers\u002Ftelephony_providers) 中添加特定于电话的输出处理器文件，编写从 [telephony.py](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmaster\u002Fbolna\u002Foutput_handlers\u002Ftelephony.py) 类扩展的自定义函数\n   1. 这主要涉及将合成器类生成的音频转换为支持的音频格式，并通过电话提供商提供的 WebSocket 流式传输\n4. 最后，您需要编写一个专用服务器，例如 [local_setup](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmaster\u002Flocal_setup\u002Ftelephony_server) 中提供的示例 [twilio_api_server.py](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fblob\u002Fmaster\u002Flocal_setup\u002Ftelephony_server\u002Ftwilio_api_server.py)，以通过 WebSocket 发起呼叫。\n\n\n## 贡献\n我们欢迎各种形式的贡献：无论大小，只要有助于改善这一社区资源即可。\n\n1. 当前有许多 [未解决的问题](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fissues)，您可以从中选择一个开始\n2. 如果您有改进建议，想贡献简单的修复（如纠正错别字），或想解决明显的 bug，请随时发起新问题或提交拉取请求\n2. 如果您正在考虑对该仓库进行较大规模的更改或添加，无论是结构还是功能方面，请先创建一个问题 [新建问题 :octocat:](https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fissues\u002Fnew) 并概述您的拟议变更。这将使我们在您投入大量时间和精力之前进行讨论。感谢您的合作与理解","# Bolna 快速上手指南\n\nBolna 是一个端到端的开源语音智能体（Voice Agent）平台，支持通过 JSON 配置快速构建基于大语言模型（LLM）的语音对话应用。它协调 ASR（语音转文字）、LLM（大模型）和 TTS（文字转语音）组件，通过 WebSocket 实现实时语音交互。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Linux, macOS, Windows (需安装 WSL2 或 Docker Desktop)\n- **Docker**: 推荐安装 Docker Engine 及 Docker Compose V2\n- **Python**: 3.9+ (用于本地脚本运行)\n\n### 前置依赖与账号\n在开始之前，你需要准备以下服务的 API Key：\n1. **LLM 提供商**: 如 OpenAI (`OPENAI_API_KEY`)\n2. **ASR 提供商**: 如 Deepgram (`DEEPGRAM_AUTH_TOKEN`)\n3. **TTS 提供商**: 如 ElevenLabs (`ELEVENLABS_API_KEY`)\n4. **电话服务 (可选)**: 如需拨打电话，需配置 Twilio 或 Plivo 账号。\n\n> **注意**: 国内开发者若无法直接访问上述服务，请自行配置网络代理或在 `.env` 文件中设置相应的代理地址。\n\n## 安装步骤\n\n### 方式一：使用 Docker 快速启动（推荐）\n此方式包含完整的编排环境（含电话服务模拟、Redis 等）。\n\n1. 克隆仓库并进入本地设置目录：\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna.git\ncd bolna\u002Flocal_setup\n```\n\n2. 配置环境变量：\n复制示例文件并填入你的 API Key：\n```bash\ncp .env.sample .env\n# 编辑 .env 文件，填入 OPENAI_API_KEY, DEEPGRAM_AUTH_TOKEN 等\n```\n\n3. 运行启动脚本：\n该脚本会自动检查依赖、构建镜像并启动服务。\n```bash\nchmod +x start.sh\n.\u002Fstart.sh\n```\n\n*手动启动备选方案*:\n```bash\nexport DOCKER_BUILDKIT=1\nexport COMPOSE_DOCKER_CLI_BUILD=1\ndocker compose build\ndocker compose up -d\n```\n\n### 方式二：Python 本地运行（仅核心逻辑）\n如果你只想测试核心编排逻辑而不需要电话服务，可直接使用 Python 运行。\n\n1. 安装依赖（假设已克隆项目）：\n```bash\npip install -e .\n```\n\n2. 设置环境变量：\n```bash\nexport OPENAI_API_KEY=your_key\nexport DEEPGRAM_AUTH_TOKEN=your_token\nexport ELEVENLABS_API_KEY=your_key\n```\n\n## 基本使用\n\n### 示例 1：构建最小化语音助手\n以下脚本演示了如何创建一个包含“听 (ASR) -> 思考 (LLM) -> 说 (TTS)\"完整流程的语音助手。\n\n创建文件 `simple_assistant.py`：\n\n```python\nimport asyncio\nfrom bolna.assistant import Assistant\nfrom bolna.models import (\n    Transcriber,\n    Synthesizer,\n    ElevenLabsConfig,\n    LlmAgent,\n    SimpleLlmAgent,\n)\n\n\nasync def main():\n    assistant = Assistant(name=\"demo_agent\")\n\n    # 配置音频输入 (ASR) - 使用 Deepgram\n    transcriber = Transcriber(provider=\"deepgram\", model=\"nova-2\", stream=True, language=\"en\")\n\n    # 配置 LLM - 使用 OpenAI\n    llm_agent = LlmAgent(\n        agent_type=\"simple_llm_agent\",\n        agent_flow_type=\"streaming\",\n        llm_config=SimpleLlmAgent(\n            provider=\"openai\",\n            model=\"gpt-4o-mini\",\n            temperature=0.3,\n        ),\n    )\n\n    # 配置音频输出 (TTS) - 使用 ElevenLabs\n    synthesizer = Synthesizer(\n        provider=\"elevenlabs\",\n        provider_config=ElevenLabsConfig(\n            voice=\"George\", voice_id=\"JBFqnCBsd6RMkjVDRZzb\", model=\"eleven_turbo_v2_5\"\n        ),\n        stream=True,\n        audio_format=\"wav\",\n    )\n\n    # 构建管道：transcriber -> llm -> synthesizer\n    assistant.add_task(\n        task_type=\"conversation\",\n        llm_agent=llm_agent,\n        transcriber=transcriber,\n        synthesizer=synthesizer,\n        enable_textual_input=False,\n    )\n\n    # 执行并流式输出结果\n    async for chunk in assistant.execute():\n        print(chunk)\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n运行脚本：\n```bash\npython simple_assistant.py\n```\n\n### 示例 2：纯文本对话流程\n如果你不需要语音功能，仅需测试 LLM 对话逻辑，可启用纯文本模式。\n\n创建文件 `text_only_assistant.py`：\n\n```python\nimport asyncio\nfrom bolna.assistant import Assistant\nfrom bolna.models import LlmAgent, SimpleLlmAgent\n\n\nasync def main():\n    assistant = Assistant(name=\"text_only_agent\")\n\n    llm_agent = LlmAgent(\n        agent_type=\"simple_llm_agent\",\n        agent_flow_type=\"streaming\",\n        llm_config=SimpleLlmAgent(\n            provider=\"openai\",\n            model=\"gpt-4o-mini\",\n            temperature=0.2,\n        ),\n    )\n\n    # 启用纯文本管道，无需配置 transcriber\u002Fsynthesizer\n    assistant.add_task(\n        task_type=\"conversation\",\n        llm_agent=llm_agent,\n        enable_textual_input=True,\n    )\n\n    async for chunk in assistant.execute():\n        print(chunk)\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n运行脚本：\n```bash\nexport OPENAI_API_KEY=your_key\npython text_only_assistant.py\n```\n\n### 下一步\n- **电话集成**: 若要实现真实的电话拨打功能，请使用 Docker 部署模式，并参考 `local_setup` 中的 Twilio\u002FPlivo 配置。\n- **更多示例**: 访问 [examples.bolna.dev](https:\u002F\u002Fexamples.bolna.dev) 查看不同场景的智能体示例。\n- **自定义提供商**: 编辑 `.env` 文件即可切换支持的 ASR、LLM 或 TTS 提供商（支持 Azure, AWS Polly, Llama 等）。","一家中型电商公司希望升级其客服热线，引入能处理复杂咨询、支持多轮对话且延迟极低的智能语音助手。\n\n### 没有 bolna 时\n- **开发周期漫长**：团队需分别对接 Twilio（电话）、Deepgram（语音转文字）、OpenAI（大模型）和 ElevenLabs（文字转语音），编写大量胶水代码串联各组件，耗时数周。\n- **实时性差体验糟**：由于各模块间数据传输未针对低延迟优化，用户说完话后往往需要等待 3-5 秒才能听到回复，对话节奏断裂，像在与机器人“打电报”。\n- **状态管理混乱**：难以在长对话中精准维护上下文状态，一旦用户打断或切换话题，助手容易丢失记忆或重复提问，导致客诉率上升。\n- **运维成本高昂**：缺乏统一的编排平台，监控通话质量、调试断连问题或更换底层模型时，需要深入修改底层代码，维护难度极大。\n\n### 使用 bolna 后\n- **极速构建部署**：仅需通过一份 JSON 配置文件即可定义助手行为，bolna 自动编排 ASR、LLM 和 TTS 流程，将原本数周的开发工作缩短至几天甚至几小时。\n- **毫秒级流畅交互**：基于 WebSocket 的全双工通信架构实现了流式传输，用户话音刚落助手即刻响应，延迟降低至亚秒级，带来接近真人的自然交谈体验。\n- **智能上下文掌控**：内置的状态机机制完美处理打断、插话及多轮逻辑，确保助手在任何复杂场景下都能准确理解意图并连贯作答。\n- **灵活可观测性强**：提供统一的监控视图和标准化接口，开发人员可轻松切换底层模型供应商或实时调整提示词，无需重构核心代码即可迭代优化。\n\nbolna 通过端到端的开源编排能力，让企业能以最低成本快速落地生产级的高性能语音 AI 应用。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fbolna-ai_bolna_bbb0ad64.png","bolna-ai","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fbolna-ai_a1a61869.png","",null,"hello@bolna.ai","https:\u002F\u002Fplatform.bolna.ai\u002F","https:\u002F\u002Fgithub.com\u002Fbolna-ai",[84,88,92],{"name":85,"color":86,"percentage":87},"Python","#3572A5",99.7,{"name":89,"color":90,"percentage":91},"Dockerfile","#384d54",0.2,{"name":93,"color":94,"percentage":95},"Shell","#89e051",0.1,608,255,"2026-04-03T21:30:46","MIT",4,"未说明 (基于 Docker，理论上支持 Linux\u002FmacOS\u002FWindows)","未说明 (主要作为编排平台调用外部 API，本地无重型模型推理需求)","未说明",{"notes":105,"python":106,"dependencies":107},"该工具是一个端到端的语音代理编排平台，核心逻辑是通过 WebSocket 组合不同的 ASR、LLM 和 TTS 服务商（如 OpenAI, Deepgram, ElevenLabs 等）。本地运行主要依赖 Docker 容器化环境（包含电话服务、Bolna 服务、ngrok 隧道和 Redis 数据库），而非本地 GPU 计算。用户需在 .env 文件中配置各第三方服务商的 API Key 才能正常使用功能。","未说明 (示例代码使用 asyncio，推测需 Python 3.8+)",[108,109,110,111,112],"Docker","Docker Compose V2","LiteLLM","Redis","ngrok",[26,15,13,55],[115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133],"deepgram","elevenlabs","function-calling","gpt-4","llama","openai","plivo","twilio","voice-agents","voice-assistant","whisper","cartesia","ai-agents","agentic-ai","agents","deepseek","deepseek-chat","conversational-ai","voice-ai-agents","2026-03-27T02:49:30.150509","2026-04-06T07:16:10.974717",[137,142,147,152,157,162],{"id":138,"question_zh":139,"answer_zh":140,"source_url":141},17867,"为什么请求没有发送到 Eleven Labs 或者报错不支持？","首先，请前往 Eleven Labs 官方文档，在其 Playground 中尝试发送相同的文本以验证配置是否正确。其次，检查您的 Eleven Labs 套餐定价计划，确认您使用的音频格式或模型是否在免费计划的支持范围内（某些高级格式可能需要付费计划）。","https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fissues\u002F225",{"id":143,"question_zh":144,"answer_zh":145,"source_url":146},17868,"部署到 Docker 后访问根路径出现 404 Not Found 错误怎么办？","这是一个常见的误解。Bolna 的开源项目仅包含后端 API 服务，不包含托管的 Playground 前端界面。因此直接访问根路径（\u002F）会返回 404。如果您需要使用类似 Playground 的功能，请查阅官方 API 文档 (https:\u002F\u002Fbolna.ai\u002Fapis) 自行构建客户端，或者直接访问官方的 hosted playground。如果您想测试 API，请确保调用正确的端点（如 \u002Fagent），而不是根路径。","https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fissues\u002F47",{"id":148,"question_zh":149,"answer_zh":150,"source_url":151},17869,"本地设置时遇到 KeyError: 'llm_config' 错误如何解决？","该错误通常是因为配置文件中的 `llm_agent` 部分缺少必要的嵌套结构。在定义 `llm_agent` 配置时，确保其内部包含正确的 `llm_config` 字段，或者检查代码逻辑是否期望在 `tools_config` 下直接读取 `llm_config`。建议参考项目的贡献指南或最新示例配置文件，确保 JSON 结构与代码中的初始化逻辑（如 `task['tools_config'][\"llm_agent\"]['llm_config']`）完全匹配。","https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fissues\u002F27",{"id":153,"question_zh":154,"answer_zh":155,"source_url":156},17870,"使用 Cartesia TTS 时音频出现截断或不流畅的问题如何解决？","该问题已在后续版本中修复。如果您仍遇到音频逐词截断或不流畅的情况，请确保您已升级到最新版本的 Bolna。如果问题依旧，可能是转写器（transcriber）同时出现了异常（如在静音时停止监听或产生乱码），建议检查转写器配置或更换虚拟机环境测试，以排除环境特定的兼容性问题。","https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fissues\u002F100",{"id":158,"question_zh":159,"answer_zh":160,"source_url":161},17871,"如何在 Agent 的系统提示词（System Prompt）中添加和使用变量？","您可以在系统提示词中使用占位符（例如 `{first_name}`）来动态插入变量。为了实现这一点，您需要在配置中提供一个包含具体变量值的联系人列表（recipients），例如：`{first_name}: John`, `{phone_number}: +1234567890`。系统会在创建任务批次时，将这些具体的值替换到提示词的对应占位符中，从而实现个性化的呼叫流程。","https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fissues\u002F56",{"id":163,"question_zh":164,"answer_zh":165,"source_url":166},17872,"在本地运行时，打断功能（Interruption）不工作，代理无法停止说话怎么办？","打断功能失效通常与转写器（Transcriber）未能及时识别用户语音有关。请检查转写器配置是否正确初始化，以及音频流是否畅通。此外，作为开源项目用户，建议在遇到问题时先查阅文档或等待社区修复，避免频繁标记维护者。如果急需稳定功能，可以考虑使用官方托管的 API 服务。同时，确保您的麦克风输入正常，且没有背景噪音干扰转写判断。","https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fissues\u002F245",[168,173,178,183,188,193,198,203,208,213,218,223,228,233],{"id":169,"version":170,"summary_zh":171,"released_at":172},108143,"0.10.1","## 变更内容\n* 将 bolna 版本从 0.9.9 升级到 0.10.0，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F430 中完成\n* 修复：日志中的 RAG 上下文（跟踪数据），由 @RG-04 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F431 中完成\n* 新功能：LLM 语言检测，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F417 中实现\n* 撤销“新功能：LLM 语言检测”，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F432 中完成\n* 新功能：添加基于 LLM 的语言检测，并修复语音信箱问题，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F434 中实现\n* 修复：在 finally 块中添加 transcriber_duration 回退，以确保准确…，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F439 中完成\n* 新功能：跟踪非对话类延迟，由 @RG-04 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F440 中实现\n* 修复：防止非流式聊天模式下的 LLM 响应重复，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F384 中完成\n* 新功能：为所有转录器添加 first_interim_to_final_ms 延迟指标，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F435 中实现\n* 新功能：将 sequence_id 添加到 hangup_check 和 voicemail_check 延迟中，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F441 中实现\n* 在 LLM 配置中插入 temperature 参数，由 @RG-04 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F442 中完成\n* 新功能：集成 Pixa TTS，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F445 中实现\n* 新功能：添加 CARTESIA_API_HOST 环境变量，以支持区域端点，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F447 中实现\n* 新功能：为 Cartesia TTS 添加速度控制支持，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F448 中实现\n* 修复：防止并发挂断竞争条件，并添加超时回退…，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F450 中完成\n* 修复：防止向 litellm 传递空值，由 @RG-04 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F451 中完成\n* 添加 Vobiz 电话处理程序，由 @amansrivstv 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F438 中完成\n* GPT-5 系列的推理工作，由 @RG-04 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F446 中完成\n* 修复：保留历史记录中的文本响应，以防止重复播放…，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F454 中完成\n* 修复：在转录器 _close 方法中添加空值检查，以防止 NoneType 错误，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F466 中完成\n* 修复：在 task_manager 中使用安全的 .get() 方法访问 sequence 键，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F467 中完成\n* 修复：在 duration 计算中对 message 数据添加空值检查，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F468 中完成\n* 修复：通过跟踪关闭状态来防止 WebSocket 关闭后发送消息，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F469 中完成\n* 修复：内部服务的 requests 版本冲突，由 @SubhrajitPrusty 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F471 中完成\n* 修复：在输出处理器中处理 WebSocket 关闭后的发送操作，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F472 中完成\n* 通过 DEEPGRAM_HOST_PROTOCOL 添加可配置的 Deepgram WebSocket 协议，由 @SubhrajitPrusty 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F474 中完成\n* 实现","2026-02-19T09:03:33",{"id":174,"version":175,"summary_zh":176,"released_at":177},108144,"0.10.0","## 变更内容\n* 升级 bolna 版本：0.9.8 -> 0.9.9，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F334 中完成\n* 修复：移除电话服务器对重复 .env 文件的要求，由 @ayuugoyal 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F310 中完成\n* 忽略来自 Deepgram 的 transaction_key=deprecated 事件，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F336 中完成\n* 添加调试日志，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F337 中完成\n* 移除调试日志，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F340 中完成\n* 更新 ElevenLabs 的 EOS 检查，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F344 中完成\n* 新特性：添加查询 ID 跟踪以实现跨服务关联，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F343 中完成\n* 为 11Labs 设置默认参数，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F349 中完成\n* 新特性\u002F将错误记录到堆栈跟踪，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F342 中完成\n* 为 Cartesia 合成器添加延迟跟踪，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F348 中完成\n* 修复 Cartesia 的 EOS 问题，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F351 中完成\n* 移除临时日志，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F352 和 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F353 中分别完成\n* 为转录器实现基于位置的延迟跟踪，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F354 中完成\n* 在启动时设置 delay=0，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F356 中完成\n* 语言切换功能，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F347 中完成\n* 新特性：如果在最后一个中间结果之后未收到最终语音，则超时，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F358 中完成\n* 修复：正确等待为最后一位用户发言设定的时间，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F359 中完成\n* 添加对 OpenAI 优先级的支持，由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F360 中完成\n* 杂项：添加请求 ID 日志记录，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F362 中完成\n* 修复：仅在多语言模式下禁用关键短语，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F363 中完成\n* 杂项：接受 deepgram_host 作为关键字参数，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F364 中完成\n* 还原“仅在多语言模式下禁用关键短语”的修复，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F366 中完成\n* 新特性：为带有 ba… 的知识库查询添加多集合支持，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F365 中完成\n* 还原“接受 deepgram_host 作为关键字参数”的更改，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F367 中完成\n* 新特性：为知识库代理添加挂断功能，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F374 中完成\n* 新特性：集成 Azure OpenAI，并将所有 LiteLLM 的 Azure 调用路由至此，由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F372 中完成\n* 传递 style 参数，由 @SwapnilChand 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F369 中完成\n* 新特性：为 underst 添加日志记录","2026-01-05T21:03:34",{"id":179,"version":180,"summary_zh":181,"released_at":182},108145,"0.9.9","## 变更内容\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F259 中将 bolna 版本从 0.9.7 升级至 0.9.8\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F262 中改进连接关闭逻辑\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F263 中推送工具中的文本响应\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F273 中优化 Azure 速率限制\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F276 中启用自定义 post content_type=form 函数\n* 由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F274 中标准化 TTS 和转录器的每轮指标，并在 TaskManager 中进行聚合\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F278 和 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F279 中修复 post 请求的表单 urlencode 问题\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F282 中等待转移消息\n* 由 @pavankapoor31 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F288 中移除硬编码的 schema\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F285 中检查是否存在多条话语\n* 功能（转录器）：由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F280 中添加 AssemblyAI 实时转录器\n* 功能（转录器）：由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F281 中添加 Sarvam AI 转录器\n* 临时：由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F290 中检查合成器 schema 的处理方式\n* 功能（转录器）：由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F289 中更新 SarvamTranscriber，使其支持 saaras 和 saarika 模型，并使用独立端点\n* 功能：由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F286 中添加 Google Cloud Speech-to-Text 转录器\n* 功能\u002FRAG 更新 v2：由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F291 中完成\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F293 中修复硬编码的原始日志\n* 功能：由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F292 中为 RAG 代理在正常对话中增加自然度，例如 sim…\n* 重构：由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F299 中将 RAG 服务 URL 重命名为 RAG 服务器 URL，应用于所有代理等\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F300 中添加日志记录\n* 功能\u002FExotel 集成：由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F301 中完成\n* 文档：由 @sandipkumardey 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F297 中修复 API.md 中的 JSON 示例和格式\n* 文档：由 @sandipkumardey 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F298 中添加最小化的程序化使用示例和可运行脚本\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F304 中跟踪首次音频和流媒体时间\n* DTMF 集成：由 @san0808 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F307 中完成\n* 为 Cartesia Sonic-3 预览版所做的更改：由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F309 中完成\n* 延迟跟踪：由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F313 中完成\n* t","2025-10-28T02:59:06",{"id":184,"version":185,"summary_zh":186,"released_at":187},108146,"0.9.8","## 变更内容\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F209 中将 bolna 版本从 0.9.6 升级至 0.9.7\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F210 中移除 nova-3 的关键短语\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F211 中添加转录器连接错误的日志\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F215 中更新挂断逻辑\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F216 中集成 Deepgram 的 voice_id\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F217 中更新提取提示\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F220 中添加 Rime TTS\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F222 中集成 Sarvam WebSocket TTS\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F229 中修复 Deepgram 密钥问题\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F233 中为挂断模型添加 IFX 日志记录\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F230 中实现 POC 强制初始消息\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F238 中移除冗余日志\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F239 中将 ElevenLabs 主机作为环境参数添加\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F241 中添加 OpenRouter 支持\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F242 中检查音频是否仍在播放\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F247 中为实时转接电话传递自定义参数\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F248 中注入用户在线消息的变量\n* 由 @prateeksachan 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F253 中移除日志\n* 由 @devin-ai-integration[bot] 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F254 中修复 Deepgram WebSocket 连接在认证失败时的处理问题\n* 由 @devin-ai-integration[bot] 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F255 中修复 WebSocket ClientConnection 关闭属性错误\n* 由 @devin-ai-integration[bot] 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F256 中禁用 LiteLLM 的 INFO 日志以提升性能\n\n## 新贡献者\n* @devin-ai-integration[bot] 在 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F254 中做出了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fcompare\u002F0.9.7...0.9.8","2025-09-03T14:12:59",{"id":189,"version":190,"summary_zh":191,"released_at":192},108147,"0.9.7","- 新增最小的 `lightning-v2` 模型 TTS https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F206\u002Ffiles\n- Azure TTS 延迟优化 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F191 感谢 @abdulrahmanmajid\n- 为 litellm 支持的模型添加工具调用支持 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F202\n- Docker 更新、修复及优化 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F194 感谢 @belikewater2\n- 支持 sarvam 的 `bulbul-2` TTS https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F179\n- 在非电话对话场景下，为转账通话工具提供模拟响应 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F177\n- 优雅地处理聊天 WebSocket 连接关闭 https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F176","2025-05-28T17:07:42",{"id":194,"version":195,"summary_zh":196,"released_at":197},108148,"0.9.6","- 工具支持字典类型及多种参数类型（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F157）\n- 支持预工具自定义消息（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F161）\n- 将 WebSocket 版本升级至 `15.0.1`（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F167）\n- 增加对 `generate_precise_transcript` 的支持，以在转录中纳入打断内容（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F170）\n- 保存工具调用历史以便提取（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F171）\n- 修复 ElevenLabs 的 `isFinal` 文本分块逻辑，处理非字母数字的边缘情况（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F172）\n- 改进挂断时的渐进式断开机制，使坐席能够在挂断前完成当前通话（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F173）\n- 大量错误修复\n","2025-04-24T14:39:05",{"id":199,"version":200,"summary_zh":201,"released_at":202},108149,"0.9.5","- 通过 WebSocket 提供的 Web 呼叫支持（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F155，https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F156）\n- 修复 ElevenLabs TTS 中的 `isFinal` 问题（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F142，https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F154）\n- 为函数调用添加特定语言的填充消息（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F151）\n- 更新了 OpenAI 工具能力（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F137）\n- 支持 Azure 自动语音识别（STT）（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F138）\n- 将当前时间和时区纳入代理上下文（https:\u002F\u002Fgithub.com\u002Fbolna-ai\u002Fbolna\u002Fpull\u002F131）\n- 大量错误修复\n","2025-03-31T20:27:08",{"id":204,"version":205,"summary_zh":206,"released_at":207},108150,"0.9.4","- 修复 bug\n- 使用标记事件实现音频确认\n- 改进了对 elevenlabs 最新模型 `eleven_flash_v2_5` 的支持\n- 支持自定义 LLM","2025-02-25T16:07:27",{"id":209,"version":210,"summary_zh":211,"released_at":212},108151,"0.9.3","- 所有合成器中音频格式的标准化\n- 修复错误\n- 在语义路由中生成未缓存的响应\n- 支持 ElevenLabs 的 `mulaw` 格式","2025-01-03T21:39:48",{"id":214,"version":215,"summary_zh":216,"released_at":217},108152,"0.9.2","- 异步任务的重大 bug 修复与优化\n- OpenAI 函数工具支持\n- 使用基于 LLM 的提示词导致的挂起问题修复\n- Cartesia TTS 和 Smallest TTS 的改进\n- 为 run_id 嵌入随机 `uuid`\n- 向日志中添加动态上下文信息\n","2024-12-17T14:33:25",{"id":219,"version":220,"summary_zh":221,"released_at":222},108153,"0.9.1","- Fixed typo for passing user provided synthesizer keys 90621fa00012d695bf1aeb2280ad9de20d27e9c9","2024-10-17T14:42:29",{"id":224,"version":225,"summary_zh":226,"released_at":227},108154,"0.9.0","- Enabling elevenlabs streaming audio\r\n- Added support for Cartesia TTS\r\n- Added support for Smallest TTS\r\n- Audio format fixes and cleanup to remove unnecessary conversions\r\n- bug fixes","2024-10-16T16:17:50",{"id":229,"version":230,"summary_zh":231,"released_at":232},108155,"0.8.0","- Fix for elevenlabs audio using plivo by @KaliCharan-V\r\n- Support for RAG using LanceDB @lancedb\r\n- semantic-caching fixes\r\n- updating and fixing library versions\r\n- bug fixes\r\n- removed xtts","2024-09-12T15:07:37",{"id":234,"version":235,"summary_zh":236,"released_at":237},108156,"0.7.14","- function tool bug fixes","2024-09-02T20:07:55"]