Commit Graph

138 Commits

Author SHA1 Message Date
22fdb625a4 feat: 完成极简 LangGraph 架构迁移,添加 Baosi API 支持
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m36s
主要变更:
- 迁移到极简 LangGraph 标准架构(START → init_state → 记忆 → Agent ⇄ Tools → finalize → END)
- 添加 Baosi API 支持,配置 ops4.7 模型
- 保留本地模型作为默认首选,Baosi 作为备选
- 新架构使用 LangGraph 原生 ToolNode 和 bind_tools
- 移除旧的混合路由、JSON 解析等复杂逻辑
- 把旧代码移到 deprecated/ 目录
- 添加新的 Agent 节点和 Tools 模块
- 添加测试脚本验证新架构
- 所有测试通过 ✓
2026-05-07 00:48:17 +08:00
5e762da740 修复导入路径:从.nodes._utils导入
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m49s
2026-05-06 19:33:59 +08:00
b80ad9519a 修复dispatch_custom_event:用config参数
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m26s
2026-05-06 19:15:30 +08:00
47e35bfd00 修复子图包装器:使用dispatch_custom_event,用ainvoke
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Has been cancelled
2026-05-06 19:10:20 +08:00
47ccac5b35 优化:复用 hybrid_router 的推理结果,避免重复 LLM 调用
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 6m22s
2026-05-06 18:50:22 +08:00
000af774a3 优化:统一意图分类逻辑,复用 intent.py,删除冗余的 intent_classifier.py
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m44s
2026-05-06 18:41:14 +08:00
1dc1ecad62 优化: LLM降级重排一次调用给所有文档打分
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 9m56s
2026-05-06 17:25:42 +08:00
a6813a5ab0 优化: 重排前增加向量初筛,只让前20个进入重排
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 7m32s
2026-05-06 17:08:47 +08:00
d09b0d16ce 修改日志用项目统一的 logger
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 10m46s
2026-05-06 16:15:09 +08:00
13499ecf2a 添加详细日志: 在关键节点加日志以便定位卡住问题
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 6m26s
2026-05-06 16:02:53 +08:00
e70a2919dd 兼容:同时注册新旧路径到 allowed_msgpack_modules
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m49s
避免旧 checkpoint 反序列化时出现警告
2026-05-06 15:21:32 +08:00
adb25a2e22 优化:重构 state,分离持久化和临时字段,完善 init_state_node
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m37s
主要改动:
1. 移除无用字段 system_prompt
2. 重新组织 state,明确标注「持久化字段」和「临时字段」
3. 完善 init_state_node,重置所有临时字段
4. 解决数据残留隐患,确保每轮对话开始时状态干净
2026-05-06 15:10:33 +08:00
304e1318e5 重构:继续移除对 debug_info 的依赖,主要模块已完成迁移
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 7m28s
2026-05-06 14:47:51 +08:00
dceb9061e8 重构:移除对 debug_info 的依赖,只使用新的结构化状态字段
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Has been cancelled
2026-05-06 14:45:40 +08:00
0f1691b578 修复:更新 msgpack 序列化配置,加入新的类型
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Has been cancelled
修复问题:
1. 更新模块路径从 "app.core.intent" 到 "backend.app.core.intent"
2. 添加新的状态类型:
   - ReactReasoningState
   - HybridRouterState
   - FastPathState
3. 添加 HybridRouterResult
2026-05-06 14:36:16 +08:00
d96301e4d5 重构:增强 JSON 解析稳定性,优化 Prompt,改进状态结构
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m36s
主要改进:

1. 新增 json_parser.py - 统一的 JSON 解析工具
   - 支持多种格式(纯 JSON、markdown、文本中的 JSON)
   - 多层 fallback 策略
   - 安全的字段提取函数

2. 优化 intent.py 和 hybrid_router.py
   - 使用新的 json_parser
   - 优化 Prompt,更清晰的格式要求
   - 更好的错误处理

3. 改进 state.py - 新增结构化状态字段
   - ReactReasoningState、HybridRouterState、FastPathState
   - 向后兼容旧的 debug_info

4. 更新各节点模块 - 同时更新旧字段保持兼容
   - reasoning.py - 更新 state.react_reasoning
   - hybrid_router.py - 更新 state.hybrid_router
   - fast_paths.py - 更新 state.fast_path
2026-05-06 13:34:32 +08:00
ef6fbc1521 推理优化
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m36s
2026-05-06 04:26:06 +08:00
1260bef5cb 添加rag置信度判断
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m31s
2026-05-06 01:15:52 +08:00
3ae9daa01a 导入方式修改
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m44s
2026-05-05 23:17:00 +08:00
b5c15ef445 refactor: 单图方案重构 + 动态模型选择 + chat_services优化
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 12m9s
## 核心改动

### 1. 单图方案重构
- 删除了多图(self.graphs),改为单图(self.graph)
- 新增 MainGraphState.current_model 字段用于运行时注入模型
- llm_call 节点改为动态选择模型(create_dynamic_llm_call_node)

### 2. chat_services 优化
- 添加 _cached_services 缓存,避免重复初始化
- 新增 get_cached_chat_services() 函数,用于单图注入
- 新增 _check_http_service_available() 统一HTTP探测逻辑
- 减少重复代码,LocalVLLMChatProvider和LocalSmallModelProvider共用探测方法

### 3. AIAgentService 重构
- initialize() 只构建一次图,传入 chat_services 字典
- 新增 _resolve_model() 模型回退逻辑
- 新增 _build_invocation() 统一构建调用参数
- process_message() 和 process_message_stream() 改为注入 current_model
- 流式处理代码拆分,增加可读性

### 4. 新增和删除文件
- 新增:backend/app/main_graph/main_graph_builder.py(图构建)
- 新增:backend/app/main_graph/subgraph_wrapper.py(子图封装)
- 新增:tools/test/test_tavily_search.py(测试)
- 删除:backend/app/main_graph/graph.py(旧图)
- 删除:backend/app/main_graph/utils/main_graph_builder.py(旧构建器)
- 删除:backend/app/main_graph/utils/__init__.py

### 5. 其他更新
- README.md:新增模型服务使用情况详解章节
- backend/app/model_services/__init__.py:新增 get_cached_chat_services 导出

## 方案优势

- 内存优化:N张图 → 1张图
- 灵活性:运行时动态选择模型,支持同会话不同模型
- 性能:模型服务缓存,初始化仅一次
- 可维护性:减少重复代码,统一HTTP探测逻辑
2026-05-05 17:30:55 +08:00
8b5fbbd395 修改readme
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m35s
2026-05-05 14:06:36 +08:00
8c021c264e 修改readme
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m28s
2026-05-05 13:30:31 +08:00
128aad0c22 refactor: 重构快速路径流程,统一通过 llm_call 输出
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m31s
- 重构 fast_paths.py,让 fast_chitchat 和 fast_rag 都进入 llm_call 而不是直接设置 final_result
- 修改 check_fast_path_success 函数返回 'llm_call' 而不是 'success'
- 更新 main_graph_builder.py 的条件边配置,支持路由到 llm_call
- 在快速路径节点中添加清除 state.final_result 的逻辑,避免复用旧结果
- 重构 RAG 工具初始化方式,使用模块级变量管理
- 修改 finalize.py 让它返回 final_result
- 更新 agent_service.py 的 RAG 工具注入方式
- 简化 hybrid_router.py 的代码结构
- 清理 rag_nodes.py 的全局变量相关代码
- 更新相关测试文件
2026-05-05 04:32:42 +08:00
b64dade9e9 修复循环推理bug 2026-05-05 00:54:04 +08:00
acc8d801f3 修复代码,实现rag测试
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 6m11s
2026-05-04 20:31:04 +08:00
0543a4da8b fix: 彻底修复 RAG 无限循环问题
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m33s
关键修复:
1. rag_nodes.py: history 里记录的 action 改成大写 RETRIEVE_RAG
2. react_nodes.py: route_by_reasoning 优先检查 DIRECT_RESPONSE
3. 优化路由判断顺序,避免不必要的循环
2026-05-04 19:03:41 +08:00
c9bf21be0e fix: 修复 RAG 无限循环问题和导入错误
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Has been cancelled
主要修复:
1. 修复 RAG 推理无限循环问题(大小写不匹配 + 缺少已检索结果检查)
2. 修复 intent_classifier.py 的绝对导入错误
3. 删除旧的 start.sh 脚本,添加新的启动脚本
4. 优化路由逻辑和状态管理
2026-05-04 18:59:15 +08:00
9841f47432 refactor: 重构RAG核心组件,简化代码结构和测试文件
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m53s
2026-05-04 17:58:10 +08:00
a07e398739 refactor!: 完全异步化 RAG 系统,移除 LangChain ParentDocumentRetriever 依赖
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m34s
- 重写 rag_core/vector_store.py:完全异步实现 aadd_documents、asimilarity_search
- 重写 app/rag/retriever.py:异步混合检索,移除同步兼容代码
- 修改 rag_indexer/index_builder.py:全链路异步调用
- 删除 rag_core/retriever_factory.py:不再使用 LangChain ParentDocumentRetriever
- 清理冗余导入和代码:移除 model_services 兼容、不需要的异常导入
- 更新 rag_indexer/README.md:反映新架构

核心改进:
- 完全异步化:索引构建和检索全链路 async/await
- 自定义实现:不再依赖 LangChain 的 ParentDocumentRetriever
- 双向量支持:子文档同时存储 dense + sparse 向量到 Qdrant
- 架构清晰:rag_core 公共组件、rag_indexer 索引、app/rag 检索
2026-05-04 14:33:12 +08:00
4209386c77 refactor: 统一导入方式,移除 sys.path 操作
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m22s
- 重构所有模块导入,移除 sys.path.insert
- 统一使用 from backend.xxx 的绝对导入方式
- rag_core 包内使用相对导入(from .xxx)
- 移动 visualize_graph.py 到 tools/ 目录
- 添加必要的 __init__.py 文件
- 清理废弃文档和脚本
2026-05-04 12:55:45 +08:00
82dde7113e 修改rag,实现混合检索
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m42s
2026-05-04 04:28:32 +08:00
44d89acdb5 fix: 修复本地llm服务不可用问题 + 统一模型缓存目录位置
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Has been cancelled
- 修复 config.py 添加 LOCAL_MODEL_NAME 配置项
- 修复 chat_services.py 本地模型检测时API路径重复问题(/v1/models -> /models)
- 更新 .gitignore,移除模型目录跟踪
- 统一模型缓存到 docker/models/fastembed_cache,避免重复
- 更新 Dockerfile,正确复制预下载的BM25模型缓存
2026-05-04 03:26:19 +08:00
8af82f8f7f feat: RAG混合检索系统完整实现 + 启动脚本修复
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 5m4s
- 实现了稠密+稀疏混合检索,使用 Qdrant 原生 RRF 融合
- 修复了 retriever.py 的 BaseRetriever 继承和稀疏向量包装问题
- 修复了 pipeline.py 的 Optional 导入问题
- 添加了稀疏 embedder 的缓存配置
- 简化了 vector_store.py,移除不必要的逻辑
- 修复了 start.sh 的 PROJECT_DIR 硬编码和端口配置问题
- 完善了 RAG 检索的测试文件
2026-05-04 02:54:37 +08:00
60afa86ded feat: 实现 BM25 稀疏 + 稠密向量混合检索功能
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Has been cancelled
2026-05-04 02:01:22 +08:00
2183c901b4 添加稀疏模型本地缓存功能
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 13m54s
- 创建 download_sparse_model.py 脚本用于下载稀疏模型到本地
- 添加 SPARSE_MODEL_PATH 和 SPARSE_MODEL_NAME 配置
- 修改 retriever.py 和 index_builder.py 使用 cache_dir
- 更新 .gitignore 排除 models/ 目录
- 更新 Dockerfile 在构建时下载稀疏模型
2026-05-03 18:55:39 +08:00
5c45806ad3 🚀 完全实现 Qdrant 混合检索功能
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 11m7s
- 不需要兼容,完全重写为混合检索
- 检索器:强制使用 FastEmbedSparse + RetrievalMode.HYBRID
- 索引器:强制启用稀疏向量,混合检索模式
- 添加 fastembed 依赖到 requirements.txt
- 语法检查通过
2026-05-03 18:12:20 +08:00
5094a87a8f 使用 Qdrant 原生混合检索功能
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m40s
- 用 langchain-qdrant 的 RetrievalMode.HYBRID
- 自动检测 Qdrant 集合是否有 sparse_vectors_config
- 有则用 Qdrant 原生混合检索,无则优雅回退纯稠密
- 接口完全兼容,0 改动现有代码
- 语法检查通过
2026-05-03 17:58:21 +08:00
422b3fb09e 实现真实混合检索框架
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Has been cancelled
- 最优雅、最兼容、最少修改方案
- 混合检索框架:Qdrant 稠密检索 + BM25Retriever 关键词检索
- 接口完全兼容,现有代码无需改动
- 语法检查通过
2026-05-03 17:56:15 +08:00
17bc72b76c 实现真实的混合检索框架
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 6m23s
- 移除假的 create_hybrid_retriever 实现
- 添加 HybridRetriever 类,支持检测 Qdrant 稀疏向量配置
- 更新 README.md 说明现状(未配置稀疏向量,优雅降级到纯稠密检索)
- 语法检查通过
2026-05-03 17:46:38 +08:00
a9451681f6 📝 修复 rag/README.md 里的过时引用
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m42s
- 从 app.graph.graph_builder 改为 app.main_graph.utils.main_graph_builder
2026-05-03 17:22:25 +08:00
80cda1362a 🗑️ 删除旧的 graph_builder.py
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Has been cancelled
- 保留最新的 main_graph/utils/main_graph_builder.py
- agent_service.py 已在使用新文件
- 旧文件是没有混合路由的老版本
2026-05-03 17:20:28 +08:00
b647150814 🗑️ 精简文档结构
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m42s
- 删除冗余文档:backend/app/README.md、backend/app/model_services/README.md
- 保留重要深度文档:backend/app/rag/README.md(RAG 模块详细说明)
- 更新 REACT_MODE_SUMMARY.md:加入模型服务层的关键内容
2026-05-03 17:01:15 +08:00
53fbfb4741 📚 整理并更新文档
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 6m41s
- 删除过时文档:REACT_PLAN.md、backend/docs/HYBRID_ROUTER.md
- 更新 REACT_MODE_SUMMARY.md:加入新的混合路由架构
- 更新 README.md:加入混合路由、双模型服务等新特性
- 更新 backend/app/README.md:加入 hybrid_router.py
- 更新 backend/app/model_services/README.md:加入 get_chat_service/get_small_llm_service
- 更新 .gitignore:允许 REACT_MODE_SUMMARY.md 上传
- 新增 backend/test/test_hybrid_router.py:测试脚本
2026-05-03 16:53:34 +08:00
a5fc9cd5d8 完整的混合路由优化系统
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 6m8s
1. 双模型服务 (llm + smallLLM)
   - 增加 get_small_llm_service() 函数
   - 支持智谱/DeepSeek 小模型作为轻量级选项

2. 前置混合路由
   - 规则快速分流(无 LLM,超快速)
   - 轻量级意图分类(smallLLM)
   - 快速路径:fast_chitchat, fast_rag, fast_tool

3. 自动升级机制
   - 快速路径失败 → 自动回到 React 循环
   - SSE 事件增强:intent_classified, path_decision, fast_path_*, escalation

4. 向后兼容
   - build_react_main_graph(use_hybrid_router=True/False)
   - 可选择启用或禁用混合路由

5. 更新 intent.py
   - 支持 use_small_llm 参数
   - 保留原有完整功能供 React 循环使用
2026-05-03 16:45:46 +08:00
9c53f58165 feat: 集成MCP统一外部接口管理系统
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m38s
- 添加MCP Manager统一入口管理
- 实现Contact/Dictionary/News三个适配器
- 三层降级策略:MCP -> Database -> Mock
- 保持原有api_client向后兼容
- 添加完整文档和测试
2026-05-03 12:36:12 +08:00
e67ec97a12 添加自定义事件的调试日志
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m18s
2026-05-02 09:39:18 +08:00
3f6bbdec92 给关键节点添加思考过程输出
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 6m41s
- react_reason_node: 直接发送自定义推理事件
- web_search_node: 添加开始/完成/错误事件
- rag_retrieve_node: 添加开始/完成/重试/错误事件
- 子图包装器: 添加子图开始/完成/错误事件
2026-05-02 09:23:07 +08:00
afddea61f8 恢复循环推理架构,子图执行完回到react_reason
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 6m37s
- 恢复子图→react_reason的边
- 保持intent.py中的逻辑:检测到subgraph_completed就返回DIRECT_RESPONSE
- 保持llm_call中的逻辑:检测到final_result就直接返回
2026-05-02 09:11:38 +08:00
2893accbc4 修复三个问题:1. 子图执行后的无限循环 2. llm_call没有输出 3. 思考打印两次
- 子图执行后直接进入finalize,避免回到react_reason循环
- llm_call节点检查是否已有final_result,避免重复调用LLM
- 直接在react_reason_node中通过adispatch_custom_event发送推理事件,避免通过state传递导致重复
2026-05-02 09:00:34 +08:00
bd2c20d927 debug: 添加更多调试日志来诊断 llm_token 不输出的问题
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 6m2s
2026-05-02 08:00:32 +08:00