初始化
This commit is contained in:
178
docs/agent_lifecycle.md
Normal file
178
docs/agent_lifecycle.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# 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`
|
||||
Reference in New Issue
Block a user