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)。