Files
xk-ai-agent/docs/agent_lifecycle.md
2026-08-14 21:50:48 +08:00

179 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`