SmartBizTrip 整体架构图
六层结构 + 主助手五步处理流程;端口 / 文件名 / 工具名均对照代码核实
① 客户端层
② API 服务层
③ 主助手 · 协调层
④ A2A 子助手层
⑤ MCP 工具层
⑥ 数据层
网页客户端 — static/index.html
聊天界面 · 代理卡片 · 记忆面板(SSE 逐段渲染)
命令行客户端 — 课件示例/classroom_main.py
逐轮输入问题,控制台打印回复
api_server.py — FastAPI · 127.0.0.1:8080
POST /api/chat/stream(SSE 流式,网页默认) · POST /api/chat · GET /api/agents · /api/memory 系列
① 记忆写入
add_message("user")
带偏好 · 历史 · 任务上下文
② 意图识别 intent_agent
LLM → JSON
意图 / 改写查询 / 追问
③ 追问 · 范围外?
是 → 直接返回追问,本轮结束
否 → 继续路由
④ 路由与执行
简单:逐意图直接执行
复杂:规划 → ReAct(依赖分批 · 批内并行)
⑤ 汇总输出
summarize 整理 · 流式分片
多步才调汇总模型 · 存记忆
memory.py — ConversationMemory(记忆模块)
短期对话(10 条) · 用户偏好 · 任务上下文 · 查询实体/历史 | 启动时从 MySQL 记忆表恢复,变更时写回;派发子助手前记录查询历史
天气子助手 · :5005
a2a_server/weather_server.py
WeatherQueryAssistant · AgentCard
工具调用 Agent · 缺参数则追问
票务子助手 · :5006
a2a_server/ticket_server.py
TicketServer(TicketAssistant)
高铁 / 航班 / 会展:查询 + 模拟预订
差旅子助手 · :5007
a2a_server/trip_server.py
TripAssistant
商务用车 / 保险 / 会务套餐
天气 MCP · :8002
mcp_server/mcp_weather_server.py
query_weather
双数据源:MySQL / 和风API 直查
票务 MCP · :8001
mcp_server/mcp_ticket_server.py
query / order:train · flight · event
参数化 SQL 查询
差旅 MCP · :8003
mcp_server/mcp_trip_server.py
query / order:用车 · 保险 · 会务套餐
会务套餐走 Milvus 语义检索
MySQL · :3306 · biztrip_rag
业务表:train / flight / event_tickets · weather_data · car_rentals · insurances
记忆表:user_profiles · query_history · short_term_messages(weather_data ← 爬虫定时采集)
Milvus 向量库 · :19530
会务套餐集合 · text-embedding-v3 · COSINE
初始化:sql/init_meeting_package_rag.py
POST /api/chat/stream(SSE)
chat_stream / chat
A2A 协议:Task → status / artifacts
意图映射:weather→天气助手 | train / flight / event / order→票务助手
car_rental / meeting_package / insurance / trip_order→差旅助手 | city_service→主助手直连
MCP 工具调用(to_langchain_tool)
参数化 SQL / 向量检索(会务套餐 RAG)
要点:MCP 为参数化工具(%s 防注入,LLM 只提参数不写 SQL);预订均为模拟演示;天气数据由 utils/spider_weather.py 定时从和风API采集入库;启动顺序:MCP(8001-8003) → A2A(5005-5007) → api_server(8080)。