一、背景与动机在之前的版本中辩证分析流程是一个写死的5阶段流水线Stage 1: Diagnosis必须等待 Stage 2: Ancient Modern可并行依赖diagnosis Stage 3: Dietary Therapy依赖diagnosis Stage 4: Safety Convalescence可并行依赖dietary Stage 5: Report等待所有完成这种设计存在三个核心问题流程僵化无论症状简单还是复杂所有Agent按固定顺序执行失败即降级某个Agent失败就直接使用降级方案缺乏重试和优化机制Agent无自主性Agent只是被动接收输入、输出结果没有思考能力缺少Agent的灵魂一个真正的多智能体系统应该具备自主决策根据自身情况决定如何执行任务质量自检完成工作后检查输出是否符合要求反思改进失败后分析原因调整策略重试动态协作根据上下文智能调整执行策略这就是本阶段要解决的问题。二、核心改进2.1 增强版编排器orchestrator_v2.py新的编排器具备以下能力用户请求 │ ▼ ┌─────────────────────────────┐ │ 评估症状复杂度 │ ← 新增simple/moderate/complex └─────────────────────────────┘ │ ▼ ┌─────────────────────────────┐ │ Stage 1: Diagnosis V2 │ ← 必须等待核心Agent │ ├─ RAG检索 │ │ ├─ 自适应深度分析 │ ← 新增 │ ├─ 质量检验 │ ← 新增专项规则 │ └─ 反思重试(最多2次) │ ← 新增 └─────────────────────────────┘ │ ▼ ┌─────────────────────────────┐ │ Stage 2: Ancient Modern │ ← 简单症状可跳过 │ └─ 并行执行 │ └─────────────────────────────┘ │ ▼ ┌─────────────────────────────┐ │ Stage 3: Dietary V2 │ └─────────────────────────────┘ │ ▼ ┌─────────────────────────────┐ │ Stage 4: Safety Convale. │ ← 并行执行 └─────────────────────────────┘ │ ▼ ┌─────────────────────────────┐ │ Stage 5: Report V2 │ └─────────────────────────────┘2.2 关键特性对比特性V1V2流程策略固定5个Stage串行执行动态路由根据症状复杂度智能选择执行策略质量检验无7种Agent专项检验规则完整性/正确性/质量三维评分反思机制无7种Agent专属反思策略含历史模式分析重试机制无重试最多2次重试重试前等待1秒数据结构各Agent返回格式不一致统一_extract_agent_data方法兼容处理并行执行Stage内并行但数据处理不一致真正并行统一数据传递降级方案简单默认值每个Agent有专属完整降级数据执行统计仅返回results返回完整统计复杂度/重试次数/降级数/耗时等三、各Agent的增强3.1 辨证Agent V2核心改进def _assess_information_completeness(self, symptoms: List[str], user_profile: Dict) - float: 评估信息完整度 score 0.0 max_score 1.0 # 症状数量评分最高40% symptom_score min(len(symptoms) / 5.0, 0.4) score symptom_score # 体质信息20% if user_profile.get(current_constitution): score 0.2 # 年龄性别20% if user_profile.get(age) and user_profile.get(gender): score 0.2 # 病史10% if user_profile.get(medical_history): score 0.1 # 过敏史10% if user_profile.get(allergies): score 0.1 return min(score, max_score)根据信息完整度自动生成不同深度的分析指令完整度≥70%信息较为完整请进行全面的深度辨证分析完整度≥40%信息基本完整请进行重点辨证分析完整度40%信息有限请基于现有症状进行初步辨证并说明局限性3.2 古籍Agent V2改进点兼容多种数据结构V1/V2格式自动适配提示词传递更多辨证信息八纲病机治法RAG检索从3条增加到5条支持重试attempt参数3.3 现代文献Agent V2改进点与古籍Agent类似的兼容性改进增加病机和治法原则的传递输出格式统一为7个核心字段3.4 食疗推荐Agent V2改进点利用八纲辨证的寒热虚实属性生成针对性饮食原则强调药食同源目录内食材输出使用纯中文4字段3.5 安全审查Agent V2改进点智能摘要食疗方案原则食材禁忌自动将配伍禁忌和体质冲突转换为问题列表RAG查询基于结构化数据构建3.6 调养Agent V2改进点利用病机分析和治法原则生成精准推荐输出使用纯中文5大模块针灸/推拿/食疗/气功/生活调护3.7 质量检验Agent V2def _get_agent_specific_rules(self, agent_name: str) - str: 获取Agent特定的检验规则 rules { diagnosis_v2: 辨证Agent检验规则 - syndrome字段不能为空必须是有效的证型名称 - confidence必须是0-1之间的小数 - reasoning必须详细不少于50字 - key_symptoms至少包含1个症状 - 八纲辨证必须包含阴阳、表里、寒热、虚实四个维度 - 病机总结必须包含核心病机和治法原则, ancient_v2: 古籍Agent检验规则 - 类似病案至少包含1个病案 - 名家治法至少包含1个治法 - 常用经方至少包含1个方剂 ..., # ... 其他Agent规则 }评分机制完整性40%权重是否包含所有必填字段正确性30%权重数据格式是否正确内容是否合理质量30%权重内容是否足够详细、有价值3.8 反思Agent V2反思流程Agent失败/质量不通过 │ ▼ ReflectionAgent分析 ├─ 根本原因是什么 ├─ 如何修复 └─ 如果重试需要调整什么 │ ▼ 输出反思结果 ├─ root_cause: 根本原因 ├─ action: retry/skip/fallback ├─ retry_strategy: 调整建议 └─ estimated_success_rate: 预估成功率每个Agent都有专属的反思建议def _get_agent_specific_advice(self, agent_name: str) - str: advice { diagnosis_v2: 辨证Agent反思建议 - 如果是JSON解析失败可能需要调整LLM输出格式要求 - 如果证型为空可能需要提供更详细的症状信息 - 重试策略可以增加对话历史的长度或提供更明确的症状列表 - 如果多次失败降级方案是使用默认证型建议咨询医师, # ... 其他Agent建议 }四、实现细节4.1 数据结构兼容V2编排器统一处理两种数据结构def _extract_agent_data(self, result: Dict[str, Any]) - Dict[str, Any]: 统一提取Agent的数据兼容新旧两种格式 if not result: return {} if result.get(status) ! completed: return {} data result.get(data, {}) # 如果有result嵌套说明是V1格式 if result in data: return data.get(result, {}) # 直接返回data return data4.2 执行流程async def _execute_single_agent(self, state, agent_name, input_data, ...): 执行单个Agent含重试、检验、反思逻辑 while True: agent_state.attempts 1 output await agent.run(**agent_input) # 质量检验 quality_result await self._run_quality_check(...) action self._decide_next_action(state, agent_name, quality_result) if action ExecutionAction.CONTINUE: # 通过检验继续 return output elif action ExecutionAction.RETRY: # 反思后重试 reflection await self._run_reflection(...) await asyncio.sleep(1.0) continue elif action ExecutionAction.FALLBACK: # 降级方案 return self.fallback_strategies[agent_name](...) else: # 跳过 return {status: skipped}五、执行统计V2编排器返回完整的执行统计信息{ execution_stats: { total_agents: 7, completed: 6, failed: 0, skipped: 1, used_fallback: 1, degraded: 1, total_attempts: 8, duration_seconds: 45.3, symptom_complexity: moderate }, agent_details: { diagnosis_v2: { status: completed, attempts: 1, quality_score: 85.5, used_fallback: false, is_degraded: false }, ancient_v2: { status: completed, attempts: 2, quality_score: 78.0, used_fallback: false, is_degraded: false } } }六、遇到的问题与解决问题1数据结构不一致问题V1和V2 Agent返回的数据结构不同导致下游Agent无法正确处理。解决在编排器中实现_extract_agent_data统一提取方法兼容两种格式。问题2质量检验过于严格问题LLM输出经常不够完整导致质量检验评分低于阈值触发不必要的重试。解决质量检验只做结构完整性检查不做质量评分降低通过阈值从70降到60失败时直接降级不过度重试七、后续改进方向意图识别在聊天层增加意图识别自动判断用户是聊天、问诊、查询报告还是其他操作动态RAG让每个Agent根据自身情况自主决定是否进行RAG检索Agent协作实现Agent之间的主动调用而非被动接收编排器的输入前端展示让用户看到Agent的推理过程和协作状态八、总结阶段七完成了增强版编排器V2的开发主要成果质量检验和反思机制让Agent拥有自我检查和自我改进能力动态路由根据症状复杂度智能调整执行策略完整执行统计便于调试和监控可随时切换V1/V2这次改进展示了多智能体系统的核心特征自主性、协作性、反思性。