bi-chat AI对话系统
**本文档引用的文件** - [[bi_chat/main.py]](../file/bi-chat/bi-chat/main.py) - [[bi_chat/src/core/config.py]](../file/bi-chat/bi-chat/src/core/config.py) - [[bi_chat/src/agents/conversation_manager.py]](../file/bi-chat/bi-chat/src/agents/conversation-manager.py) - [[bi_chat/src/agents/bi_agent.py]](../file/bi-chat/bi-chat/src/agents/bi-agent.py) - [[bi_chat/src/routes/chat.py]](../file/bi-chat/bi-chat/src/routes/chat.py) - [[bi_chat/src/agents/tools.py]](../file/bi-chat/bi-chat/src/agents/tools.py) - [[bi_chat/src/services/session_service_async.py]](../file/bi-chat/bi-chat/src/services/session-service-async.py) - [[bi_chat/src/services/long_term_memory.py]](../file/bi-chat/bi-chat/src/services/long-term-memory.py) - [[bi_chat/src/utils/progress_context.py]](../file/bi-chat/bi-chat/src/utils/progress-context.py) - [[bi-chat/docs/chat_v1_design.md]](../file/bi-chat/docs/chat-v1-design.md) - [[bi-chat/docs/launch_guide.md]](../file/bi-chat/docs/launch-guide.md) - [[bi-chat/bi_chat/src/db/__init__.py]](../file/bi-chat/bi-chat/src/db/init-.py)
目录
简介
本文件为基于 AgentScope 框架构建的多智能体 BI 对话系统 bi-chat 的技术文档。系统以 FastAPI 提供 REST 接口,采用 ReAct 推理范式,结合短期记忆与长期记忆(Mem0 + Milvus),支持工具调用(实体检索、指标检索、SQL 执行、知识图谱查询、营销策略生成等),并提供流式与非流式响应。文档涵盖智能体设计模式、工具调用机制、记忆管理、对话流程、与数据分析服务的集成、可扩展性与性能优化、部署与监控等内容。
项目结构
bi-chat 项目位于 bi-chat 目录,核心由以下部分组成:
- 应用入口与生命周期管理:FastAPI 应用、AgentScope 初始化、共享资源预加载、会话清理任务
- 配置中心:统一读取环境变量,覆盖 LLM、数据库、Milvus、Redis、Neo4j、内存压缩等配置
- 会话管理:LRU 缓存、并发锁、记忆加载与持久化、动态注册环境感知工具
- 智能体:BIReActAgent 扩展、共享模型与工具包、自动保存记忆
- 路由与流水线:消息路由、流式输出、SSE 兼容封装、工具调用解析
- 工具集:实体检索、指标检索、SQL 执行沙箱、知识图谱查询、营销策略生成
- 服务层:异步会话服务(PostgreSQL)、长期记忆服务(Mem0 + Milvus)
- 进度上下文:跨序列化传递进度汇报器
图表来源
- [bi_chat/main.py]
- [bi_chat/src/routes/chat.py]
- [bi_chat/src/agents/conversation_manager.py]
- [bi_chat/src/agents/bi_agent.py]
- [bi_chat/src/agents/tools.py]
- [bi_chat/src/services/session_service_async.py]
- [bi_chat/src/services/long_term_memory.py]
章节来源
核心组件
- 应用入口与生命周期
- 初始化 AgentScope,注册路由,预加载共享资源(模型与工具包),启动定时清理任务
- 会话管理器
- LRU 缓存、并发锁、记忆加载与持久化、动态注册环境感知工具、工作流 Agent 构建
- BIReActAgent
- 继承 ReActAgent,自动保存记忆、支持长期记忆、可配置记忆压缩
- 工具集
- 实体检索、指标检索、SQL 执行沙箱、知识图谱查询、营销策略生成
- 服务层
- 异步会话服务(PostgreSQL)、长期记忆服务(Mem0 + Milvus)
章节来源
- [bi_chat/src/agents/conversation_manager.py]
- [bi_chat/src/agents/bi_agent.py]
- [bi_chat/src/agents/tools.py]
- [bi_chat/src/services/session_service_async.py]
- [bi_chat/src/services/long_term_memory.py]
架构总览
系统采用分层架构:
- 表现层:FastAPI 路由,支持流式与非流式响应
- 智能体层:ReAct 推理循环,工具调用与观察
- 服务层:会话持久化、长期记忆检索与存储
- 数据层:PostgreSQL(会话历史)、Milvus(长期记忆向量)、Neo4j(知识图谱)、StarRocks(业务数据查询)
图表来源
- [bi_chat/src/routes/chat.py]
- [bi_chat/src/agents/conversation_manager.py]
- [bi_chat/src/agents/bi_agent.py]
- [bi_chat/src/agents/tools.py]
- [bi_chat/src/services/session_service_async.py]
详细组件分析
会话管理器(ConversationManager)
- LRU 缓存与并发控制:使用有序字典与会话级锁,支持最大会话数与空闲超时清理
- 记忆加载策略:智能加载历史,避免触发压缩;历史消息清洗,修复不完整工具调用链
- 动态工具注册:根据页面信息注册环境感知工具
- 工作流构建:支持多 Agent 协作(Manager、Data、General、Knowledge、Calculation、Summary、Guard)
图表来源
章节来源
BIReActAgent 与智能体设计
- 继承 ReActAgent,扩展自动保存记忆、长期记忆支持、可配置压缩
- 共享资源:模型与工具包应用级单例,工具包深拷贝独立
- 推理循环:最多 10 次迭代,支持工具调用与观察
- 进度汇报:通过上下文变量传递进度汇报器
图表来源
章节来源
工具调用机制
- 工具注册:search_entities、search_indicators、execute_sql、get_database_info、env_perception、trigger_parallel_analysis、search_knowledge_graph、create_promotion_plan、promotion_strategy
- SQL 执行沙箱:安全关键字过滤、结果截断、错误处理
- 知识图谱查询:Neo4j Cypher 模糊匹配
- 营销策略:基于分析结果智能推荐投放策略
图表来源
章节来源
记忆管理
- 短期记忆(InMemoryMemory):会话级独立,自动保存增量消息,支持压缩阈值与保留最近轮次
- 长期记忆(Mem0 + Milvus):用户级共享实例,带去重检索与 Milvus update 修复
- 历史加载清洗:修复不完整工具调用链,剥离孤儿 Tool 消息
图表来源
章节来源
对话流程与流式输出
- 路由层:接收消息、分流流式与非流式、封装 SSE
- 流式解析:增量文本、工具调用缓存、工具结果输出顺序保证
- 输出类型:conversation_id、text、tool_use、tool_result、error
图表来源
章节来源
配置与资源管理
- 配置项:LLM、数据库、Milvus、Redis、Neo4j、沙箱、内存压缩、长期记忆模式
- 共享资源:DashScopeChatModel、Toolkit(深拷贝)、InMemoryMemory、Mem0LongTermMemory(用户级共享)
章节来源
- [bi_chat/src/core/config.py]
- [bi_chat/src/agents/bi_agent.py]
- [bi_chat/src/services/long_term_memory.py]
依赖关系分析
更新 移除了对 bi-proto 模块的依赖,更新了聊天服务的依赖分析
- 组件耦合
- 路由依赖会话管理器与数据库会话
- 会话管理器依赖配置、工具包、长期记忆服务
- BIReActAgent 依赖模型、工具包、内存、会话服务
- 工具集依赖沙箱、本体检索器、Neo4j 客户端
- 外部依赖
- AgentScope(ReActAgent、Memory、Formatter、Token)
- PostgreSQL(会话历史)
- Milvus(长期记忆向量)
- Neo4j(知识图谱)
- StarRocks(业务数据查询)
图表来源
- [bi_chat/src/routes/chat.py]
- [bi_chat/src/agents/conversation_manager.py]
- [bi_chat/src/agents/bi_agent.py]
- [bi_chat/src/agents/tools.py]
- [bi_chat/src/services/session_service_async.py]
- [bi_chat/src/services/long_term_memory.py]
- [bi_chat/src/core/config.py]
章节来源
性能考虑
- 资源共享与隔离
- 模型与嵌入模型应用级单例,减少初始化开销
- 工具包深拷贝,避免共享状态竞争
- InMemoryMemory 独立,降低跨会话干扰
- 记忆压缩
- 智能阈值加载,避免压缩触发
- 可配置压缩阈值与保留最近轮次
- 并发与清理
- 会话级锁避免并发冲突
- 定时清理空闲会话,释放内存
- I/O 优化
- 异步会话服务与数据库交互
- 工具结果截断,控制响应大小
故障排除指南
- SSE 结束标记缺失
- 现象:客户端长时间等待,无 [DONE] 结束
- 处理:确保 finally 分支发送 finish_reason 与 [DONE]
- 工具调用链不完整
- 现象:历史消息中存在孤立 Tool 消息或 Assistant 缺失 tool_calls
- 处理:加载时进行历史清洗,剥离不完整链路
- SQL 执行异常
- 现象:危险关键字被拦截或沙箱执行失败
- 处理:检查 SQL 关键字白名单与沙箱配置
- 长期记忆 Milvus 更新错误
- 现象:仅更新 metadata 时报 vectors is nil
- 处理:使用修复后的 VectorStore,避免 vector=None 时的 upsert
章节来源
- [bi_chat/src/routes/chat.py]
- [bi_chat/src/agents/conversation_manager.py]
- [bi_chat/src/agents/tools.py]
- [bi_chat/src/services/long_term_memory.py]
结论
bi-chat 通过 AgentScope 的 ReAct 智能体与工具链,实现了从自然语言到业务数据查询与分析的闭环。系统在会话管理、记忆管理、工具调用与流式输出方面具备良好的可扩展性与稳定性。通过共享资源、异步服务与压缩策略,兼顾性能与用户体验。建议在生产环境中完善监控与告警,持续优化工具链与检索质量。
附录
部署与运维
- 启动步骤
- 后端:运行 Python 应用入口
- 前端:Next.js 开发服务器
- 端口占用与停止
- 检查 8100(后端)与 3000(前端)
- 通过 PID 杀死进程
章节来源
对话示例与使用场景
- 场景示例
- 实体与指标检索:快速定位业务对象与口径
- SQL 查询:在 StarRocks 中执行聚合分析
- 知识图谱查询:获取精确的业务关系
- 营销策略:基于分析结果生成投放方案
- 输出类型
- conversation_id:首次返回会话标识
- text:模型推理文本(增量)
- tool_use:工具调用信息
- tool_result:工具执行结果
- error:错误信息
章节来源
智能体开发指南
- 自定义 Agent
- 继承 ReActAgent,配置模型、工具包、内存与压缩
- 在会话管理器中注册与构建
- 工具扩展
- 在工具集中注册新工具,遵循 ToolResponse 格式
- 如需数据库访问,使用沙箱或服务层封装
- 对话策略配置
- 通过配置中心调整模型、压缩与长期记忆模式
- 在路由层控制流式与非流式输出
章节来源