13 KiB
13 KiB
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知识库(事实基础) │ ← 知识防线
│ 药典规范 / 经典方剂 / 临床指南 │
└─────────────────────────────────────────────────┘
关键原则
- LLM不做最终决策 —— 只负责语言理解和推理,不负责医疗判断
- 规则引擎独立运行 —— 不依赖LLM的自检,用确定性代码做硬校验
- 每次修正都有审计日志 —— 谁在什么时间做了什么修改,全链路可追溯
- Human-in-the-Loop —— 处方最终必须经过医生确认才能生效
配置 MaxKB 知识库
快速部署
# Docker一键启动MaxKB
docker run -d --name maxkb -p 8080:8080 1panel/maxkb
# 访问 http://localhost:8080
# 默认账号: admin / MaxKB@123..
推荐上传的文档
| 分类 | 文档示例 | 用途 |
|---|---|---|
| 药典 | 《中国药典》2020版(中药部分) | 剂量、性味归经、禁忌 |
| 方剂 | 《方剂学》教材 / 《伤寒论》原文 | 经典方剂组成与主治 |
| 规范 | 《中医病历书写规范》 | 病历模板与质控标准 |
| 指南 | 各病种中医诊疗指南 | 辨证分型与治法 |
| 内部分享 | 本院名老中医经验方 | 院内知识沉淀 |
获取API Key
- 登录MaxKB控制台
- 进入「应用管理」→ 创建应用
- 选择知识库 → 配置模型
- 在「API Key管理」中生成 Key
- 将 Key 和 AppID 填入
manifest/config/config.yaml