Files
xk-ai-agent/docs/agent_lifecycle.md

179 lines
13 KiB
Markdown
Raw Permalink Normal View History

2026-08-14 21:50:48 +08:00
# 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`