# 00 - 多 Agent 协作架构总览 ## 1. 设计哲学 本系统借鉴 Claude Code 的核心架构理念: > **程序做脚手架,LLM 做决策。** - 程序只负责:循环、注入上下文、执行工具、限流、权限 - LLM 负责:理解用户意图、选择策略、调用工具、判断完成 - 多个专业 Agent 各司其职,由 Coordinator 统一编排 与旧架构的根本区别:**不再用程序化状态机控制对话流程**,而是通过精心设计的 Prompt 引导 LLM 自主决策。 ## 2. 整体架构图 ``` ┌─────────────────────────────────────────────────────────────┐ │ Frontend │ │ web-client (React + Socket.io) │ │ ┌─────────────┐ ┌──────────────┐ ┌───────────────┐ │ │ │ ChatWindow │ │ AgentStatus │ │ MessageBubble │ │ │ └──────┬──────┘ └──────────────┘ └───────────────┘ │ │ │ WebSocket │ └─────────┼───────────────────────────────────────────────────┘ │ ┌─────────▼───────────────────────────────────────────────────┐ │ Conversation Gateway (WebSocket) │ │ conversation.gateway.ts │ └─────────┬───────────────────────────────────────────────────┘ │ ┌─────────▼───────────────────────────────────────────────────┐ │ Conversation Service │ │ conversation.service.ts │ │ (消息持久化、对话管理、Token 追踪) │ └─────────┬───────────────────────────────────────────────────┘ │ ┌─────────▼───────────────────────────────────────────────────┐ │ Coordinator Agent Service (主协调器) │ │ coordinator-agent.service.ts │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ Agent Loop (递归 async generator) │ │ │ │ │ │ │ │ ┌──────────────┐ ┌─────────────────────┐ │ │ │ │ │ Context │───→│ Claude API (Sonnet) │ │ │ │ │ │ Injector │ │ + Coordinator Prompt │ │ │ │ │ │ (动态上下文) │ │ + Agent Tools │ │ │ │ │ └──────────────┘ └──────────┬──────────┘ │ │ │ │ │ │ │ │ │ ┌────────────▼────────────┐ │ │ │ │ │ Tool Execution Queue │ │ │ │ │ │ (并发/串行调度) │ │ │ │ │ └────────────┬────────────┘ │ │ │ │ │ │ │ │ │ ┌──────────────────┼──────────────┐ │ │ │ │ ▼ ▼ ▼ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌──────────┐ │ │ │ │ │ Agent Tools │ │ Agent Tools │ │ Direct │ │ │ │ │ │ (invoke_xxx) │ │ (invoke_xxx) │ │ Tools │ │ │ │ │ │ → Specialist │ │ → Specialist │ │ (payment │ │ │ │ │ │ API Call │ │ API Call │ │ search) │ │ │ │ │ └──────┬──────┘ └──────┬──────┘ └────┬─────┘ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ │ │ ┌─────────────────────────────────────────┐ │ │ │ │ │ tool_results → 递归回 Agent Loop │ │ │ │ │ └─────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────┐ │ Specialist Agents │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Policy │ │ Assessment │ │ Strategist │ │ │ │ Expert │ │ Expert │ │ │ │ │ │ (Sonnet) │ │ (Sonnet) │ │ (Sonnet) │ │ │ │ Tools: │ │ Tools: │ │ Tools: │ │ │ │ - search_kb │ │ - search_kb │ │ - get_user │ │ │ └──────────────┘ │ - get_user │ │ _context │ │ │ └──────────────┘ └──────────────┘ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Objection │ │ Case │ │ Memory │ │ │ │ Handler │ │ Analyst │ │ Manager │ │ │ │ (Sonnet) │ │ (Haiku) │ │ (Haiku) │ │ │ │ Tools: │ │ Tools: │ │ Tools: │ │ │ │ - search_kb │ │ - search_kb │ │ - save_mem │ │ │ │ - get_user │ │ - get_user │ │ - get_user │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ └──────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────┐ │ External Services │ │ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ Knowledge │ │ Payment │ │ Evolution │ │ │ │ Service │ │ Service │ │ Service │ │ │ │ (RAG+Neo4j)│ │ (Alipay/ │ │ (Analytics│ │ │ │ Port 3003 │ │ WeChat) │ │ +Learn) │ │ │ │ │ │ Port 3002 │ │ Port 3005 │ │ │ └───────────┘ └───────────┘ └───────────┘ │ └──────────────────────────────────────────────────────────┘ ``` ## 3. 七个 Agent 一览 | Agent | 角色 | Model | 工具 | 触发时机 | |-------|------|-------|------|----------| | **Coordinator** | 主协调器,面对用户 | Sonnet | invoke_* + 直接工具 | 每次用户消息 | | **Policy Expert** | 政策专家 | Sonnet | search_knowledge | 用户问政策、条件、流程 | | **Assessment Expert** | 评估专家 | Sonnet | search_knowledge, get_user_context | 需要评估用户资格时 | | **Strategist** | 策略顾问 | Sonnet | get_user_context | 需要对话策略建议时 | | **Objection Handler** | 异议处理 | Sonnet | search_knowledge, get_user_context | 用户表达顾虑/犹豫 | | **Case Analyst** | 案例分析 | Haiku | search_knowledge, get_user_context | 需要用案例说服用户 | | **Memory Manager** | 记忆管理 | Haiku | save_user_memory, get_user_context | 需要保存/加载用户信息 | ## 4. 消息流转完整路径 ``` 1. 用户发送消息 (WebSocket: 'message' event) │ 2. ConversationGateway → ConversationService.sendMessage() │ 3. ConversationService: │ a. 验证对话所有权 │ b. 保存用户消息 │ c. 构建 ConversationContext (last 20 messages + state) │ d. 调用 CoordinatorAgentService.sendMessage() │ 4. CoordinatorAgentService → agentLoop(): │ a. ContextInjector 注入动态上下文: │ - 用户历史记忆摘要 │ - 已收集的用户信息 │ - 对话统计(轮次、时长) │ - 最近的评估结果 │ - 相关知识预检索 │ │ b. 调用 Claude API (Sonnet, streaming) │ → yield: text chunks (流式传输给前端) │ → yield: agent_start / agent_progress events │ │ c. 如果 Claude 返回 tool_use: │ │ │ ├── invoke_policy_expert({...}) │ │ → PolicyExpertService.execute() │ │ → 独立 Claude API 调用 (Sonnet) │ │ → 内部可调 search_knowledge (最多 3 轮) │ │ → 返回结构化政策信息 │ │ │ ├── invoke_assessment_expert({...}) │ │ → AssessmentExpertService.execute() │ │ → 独立 Claude API 调用 (Sonnet) │ │ → 返回评估报告 │ │ │ ├── generate_payment({...}) [直接工具,不调 Agent] │ │ → 调用 payment-service API │ │ → 返回支付链接 │ │ │ └── get_current_datetime() [直接工具,不调 Agent] │ → 返回当前时间 │ │ d. ToolExecutionQueue: │ - Agent 调用之间可并行(invoke_policy + invoke_memory 并行) │ - Agent 调用与直接工具可并行 │ - 写操作串行(save_user_memory) │ │ e. tool_results 返回后 → 递归回步骤 b │ Coordinator 综合所有结果,生成最终回复 │ │ f. 无 tool_use → 自然结束递归 │ 5. ConversationService: │ a. 聚合完整回复 │ b. 保存助手消息 │ c. 更新对话统计 (tokens, message count) │ d. 提取并保存咨询状态 │ 6. ConversationGateway → WebSocket events: - stream_start - agent_start {agentName: "policy_expert"} - stream_chunk {content: "..."} - agent_complete {agentName: "policy_expert"} - stream_chunk {content: "综合分析..."} - stream_end {usage: {...}} ``` ## 5. 与旧架构的关键区别 | 方面 | 旧架构 | 新架构 | |------|--------|--------| | 对话流程控制 | 策略引擎(程序状态机,8 阶段) | Coordinator Prompt(LLM 自主判断) | | 意图分类 | IntentClassifier(规则匹配) | LLM 自行理解意图 | | 响应质量 | ResponseGate(关键词检查) | Prompt 内置质量标准 | | 工具调用 | 单 Agent 串行调 10 个工具 | Coordinator 编排,专家 Agent 各持少量工具 | | 评估逻辑 | 程序化评分算法 | Assessment Expert (LLM + 知识库) | | 并发能力 | 无 | ToolExecutionQueue 并发调度 | | 上下文管理 | 固定拼接 last 20 messages | 动态注入 8+ 种上下文 | | 扩展性 | 改代码加阶段/工具 | 新增 Agent + 注册工具 | ## 6. 技术栈 - **Runtime**: Node.js 18+ / NestJS 10 - **AI SDK**: @anthropic-ai/sdk 0.52+ - **Models**: claude-sonnet-4-20250514 (主力), claude-haiku (辅助) - **Streaming**: AsyncGenerator + WebSocket (Socket.io) - **Database**: PostgreSQL + pgVector (RAG), Neo4j (知识图谱), Redis (缓存) - **Frontend**: React 18 + Zustand + Socket.io-client