# AI Agent 生命周期详解 ## 概述 本文档详细描述中医AI Agent的完整生命周期,以"患者主诉生成病历"和"病历生成处方"两个核心场景为例。 --- ## 通用生命周期(6个阶段) ``` ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌─────────┐ ┌─────────┐ │ ①感知 │───▶│ ②规划 │───▶│ ③检索 │───▶│ ④工具 │───▶│ ⑤反思 │───▶│ ⑥输出 │ │ │ │ │ │ │ │ 调用 │ │ 校验 │ │ │ └─────────┘ └─────────┘ └─────────┘ └──────────┘ └─────────┘ └─────────┘ ▲ │ │ │ └────────────────────── 记忆沉淀(长期学习) ◀──────────────────────────────────┘ ``` --- ## 场景A:患者主诉 → 生成病历 ### 时序图 ``` 患者/医生 Go服务(Controller) Agent Runner LLM MaxKB 规则引擎 │ │ │ │ │ │ │ POST /emr/gen │ │ │ │ │ │──────────────────▶│ │ │ │ │ │ │ CreateSession │ │ │ │ │ │─────────────────────▶│ │ │ │ │ │ │ 注入System Prompt │ │ │ │ │ │─────────────────▶│ │ │ │ │ │ │ │ │ │ │ │ 思考:需要检索病历模板 │ │ │ │ │ 调用工具:maxkb_retrieve │ │ │ │ │───────────────────────────────────────────────▶│ │ │ │ │ │ RAG检索 │ │ │ │ │ │ 返回规范片段 │ │ │ │◀────────────────────────────────────────────────│ │ │ │ │ │ │ │ │ │ 生成病历初稿 │ │ │ │ │ │─────────────────▶│ │ │ │ │ │ │ │ │ │ │ │ 规则校验 │ │ │ │ │ │──────────────────────────────────────────────────────────▶│ │ │ │ │ │ │ │ │ │ 有issues?─────Yes──▶ 反思修正循环 │ │ │ │ │────No──▶ 输出最终结果 │ │ │ │ │ │ │ │ │◀─────────────────│ JSON Response │ │ │ │ │ │ │ │ │ │ ``` ### 详细步骤 | 阶段 | 动作 | 涉及组件 | 代码位置 | |------|------|----------|----------| | ①感知 | 接收HTTP请求,解析JSON,创建Agent会话 | handler.EMRHandler.Generate | internal/handler/emr_handler.go | | ②规划 | LLM分析任务:需要哪些信息?检索什么? | agent.Runner.Run → LLM | internal/agent/runner.go | | ③检索 | 调用MaxKB获取病历模板、术语规范 | tool.MaxKBRetrieveTool | internal/tool/maxkb.go | | ④工具 | 可选:查HIS获取患者病史 | tool.HISTool | internal/tool/agent_tools.go | | ⑤反思 | 规则引擎检查完整性,不通过则修正 | rule.EMRQualityChecker | internal/rule/rule_engine.go | | ⑥输出 | 返回结构化病历JSON + 质控结果 | handler响应封装 | internal/handler/emr_handler.go | --- ## 场景B:病历 → 生成处方 ### 时序图 ``` 医生 Go服务 Agent Runner LLM MaxKB 规则引擎 │ │ │ │ │ │ │ POST /rx/gen │ │ │ │ │ │──────────────────▶│ │ │ │ │ │ │ CreateSession │ │ │ │ │ │───────────────────▶│ │ │ │ │ │ │ System Prompt注入 │ │ │ │ │ │─────────────────▶│ │ │ │ │ │ │ │ │ │ │ │ 辨证:太阳伤寒表实证 │ │ │ │ │ 检索经典方剂 │ │ │ │ │ │──────────────────────────────────▶│ │ │ │ │ │ │ 返回麻黄汤 │ │ │ │◀──────────────────────────────────│ │ │ │ │ │ │ │ │ │ │ 生成处方初稿 │ │ │ │ │ │─────────────────▶│ │ │ │ │ │ │ │ │ │ │ │ 配伍禁忌校验 ◀──────────────────────────────────────────────│ │ │ │ 剂量校验 ◀──────────────────────────────────────────────│ │ │ │ 孕妇安全检查 ◀──────────────────────────────────────────────│ │ │ │ │ │ │ │ │ │ Blocked? ──Yes──▶ 重新组方(反思循环) │ │ │ │────No──▶ 输出处方 │ │ │ │ │ │ │ │ │◀─────────────────│ JSON Response │ │ │ │ │ │ │ │ │ │ │ 医生审核确认 │ │ │ │ │ │ POST /rx/:id/approve │ │ │ │ │──────────────────▶│ 写入审计日志 │ │ │ │ │ │──────────────────────────────────────────────────────────────────────▶│ │ │ │ │ │ │ ``` ### 详细步骤 | 阶段 | 动作 | 涉及组件 | 安全级别 | |------|------|----------|----------| | ①感知 | 接收病历+患者信息,创建会话 | handler.PrescriptionHandler | - | | ②规划 | LLM辨证→确定治则治法→选方思路 | agent.PrescriptionGenerator | - | | ③检索 | MaxKB检索对应证型的经典方剂 | tool.MaxKBRetrieveTool | 知识来源 | | ④工具 | 药典查询验证剂量、HIS查过敏史 | tool.PharmacopoeiaTool | 数据支撑 | | ⑤反思 | **十八反十九畏硬校验** | rule.PrescriptionValidator | 🔴 硬拦截 | | ⑤反思 | 孕妇/儿童剂量调整 | rule.PrescriptionValidator | 🟡 警告 | | ⑤反思 | 过敏史冲突检查 | rule.PrescriptionValidator | 🔴 硬拦截 | | ⑥输出 | 结构化处方 + Human-in-the-Loop | handler响应 + 医生审核 | 🟢 人工兜底 | --- ## 安全设计原则 ### 三层防护体系 ``` ┌─────────────────────────────────────────────────┐ │ Layer 3: 人工审核(Human-in-the-Loop) │ ← 最后防线 │ 医生审核确认每一张处方 │ ├─────────────────────────────────────────────────┤ │ Layer 2: 规则引擎(硬约束,独立于LLM) │ ← 核心防线 │ 十八反十九畏 / 剂量上限 / 孕妇禁忌 / 过敏冲突 │ ├─────────────────────────────────────────────────┤ │ Layer 1: MaxKB知识库(事实基础) │ ← 知识防线 │ 药典规范 / 经典方剂 / 临床指南 │ └─────────────────────────────────────────────────┘ ``` ### 关键原则 1. **LLM不做最终决策** —— 只负责语言理解和推理,不负责医疗判断 2. **规则引擎独立运行** —— 不依赖LLM的自检,用确定性代码做硬校验 3. **每次修正都有审计日志** —— 谁在什么时间做了什么修改,全链路可追溯 4. **Human-in-the-Loop** —— 处方最终必须经过医生确认才能生效 --- ## 配置 MaxKB 知识库 ### 快速部署 ```bash # Docker一键启动MaxKB docker run -d --name maxkb -p 8080:8080 1panel/maxkb # 访问 http://localhost:8080 # 默认账号: admin / MaxKB@123.. ``` ### 推荐上传的文档 | 分类 | 文档示例 | 用途 | |------|----------|------| | 药典 | 《中国药典》2020版(中药部分) | 剂量、性味归经、禁忌 | | 方剂 | 《方剂学》教材 / 《伤寒论》原文 | 经典方剂组成与主治 | | 规范 | 《中医病历书写规范》 | 病历模板与质控标准 | | 指南 | 各病种中医诊疗指南 | 辨证分型与治法 | | 内部分享 | 本院名老中医经验方 | 院内知识沉淀 | ### 获取API Key 1. 登录MaxKB控制台 2. 进入「应用管理」→ 创建应用 3. 选择知识库 → 配置模型 4. 在「API Key管理」中生成 Key 5. 将 Key 和 AppID 填入 `manifest/config/config.yaml`