基于大语言模型的呼叫中心 AI 对话引擎
多角色 · MCP 工具集成 · 可视化流程编排
目录
SunBot 是一套面向呼叫中心场景的 AI 对话中间件,核心职责是:
每个"角色"是一个完整的 AI 人设配置,包含系统 Prompt、绑定的流程、技能和工具:
| 字段 | 说明 |
|---|---|
content | 系统 Prompt,定义角色行为、话术规则 |
flow_ids | 绑定的对话流程列表(编译后嵌入 Prompt) |
skill_ids | 绑定的 Skill 技能模块列表 |
mcp_server_ids | 绑定的 MCP 工具服务器列表 |
is_default | 是否为默认角色(API 调用时自动 fallback) |
流程以节点图形式配置,支持 7 种节点类型:
编译时从 start 节点出发,BFS 拓扑遍历,将节点图翻译为自然语言 Prompt,嵌入角色 Prompt 中。按 flow_id + updated_at 缓存,数据库变更后自动失效重编译。
Skill 是可复用的对话知识模块,以 Markdown 文件形式存储,通过 {{skill:skill_id}} 占位符注入 Prompt,支持多技能叠加。
工具粒度控制:每个工具可单独启用/禁用,无需修改 MCP Server 代码。启动时预热 prompt_id → tools[] 映射,变更时自动刷新缓存。
| 接口 | 模型 | 特点 |
|---|---|---|
| Qwen(通义千问) | Plus / Max | 主力,tool_call 最稳定,经过大量生产验证 |
| GLM(智谱) | ChatGLM | 备选,已实现完整 tool_call |
| Ollama(本地) | 本地部署模型 | 离线场景,已实现完整 tool_call |
Tool Call 循环:最多 5 轮,每轮都传入完整 tools 定义,确保 LLM 在多轮工具调用中不丢失上下文。
每个来电对应一个 session_id,多轮上下文隔离。对话历史存储于 MongoDB,支持跨请求连续。变量系统 {{变量名}} 在运行时动态替换,如来电号码、客户姓名等。
reply_source 标识:llm 纯 LLM 回复
llm_tool 执行了工具调用后的回复
skill Skill 生成
X-API-Key Header 校验,可配置开关| 接口 | 方法 | 说明 |
|---|---|---|
/api/chat | POST | 核心对话接口(支持流式/普通,取决于配置) |
/api/chat/stream | POST | 强制流式对话(SSE) |
/api/prompts | GET / POST | 角色列表 / 创建角色 |
/api/prompts/{id} | GET / PUT / DELETE | 角色详情 / 更新 / 删除 |
/api/flows | GET / POST | 流程列表 / 创建流程 |
/api/mcp/servers | GET / POST | MCP 服务器管理 |
/api/mcp/servers/{id}/tools/{name}/toggle | PUT | 工具启用 / 禁用 |
/api/sessions/{id}/history | GET | 对话历史查询 |
/api/interactions | GET | 对话记录查询(含 reply_source 标识) |
/api/license/status | GET | 授权状态查询 |
| 层次 | 技术选型 |
|---|---|
| Web 框架 | FastAPI + Uvicorn(异步,高并发) |
| 数据库 | MongoDB(文档型,灵活 Schema) |
| LLM 接入 | 通义千问 API / 智谱 API / Ollama |
| 工具协议 | MCP(Model Context Protocol) |
| 前端 | 原生 HTML + Bootstrap 5 + SSE 实时推送 |
| 部署 | PyInstaller 打包 / Python 直接运行 |
| 语言版本 | Python 3.13 |
SunBot 在整个链路中作为纯文本 AI 推理层,与 ASR / TTS / 电话协议完全解耦,可对接任意呼叫中心平台。