|
| 1 | +# 🏗️ 架构与调用关系图 |
| 2 | + |
| 3 | +## 系统架构概览 |
| 4 | + |
| 5 | +``` |
| 6 | +┌─────────────────────────────────────────────────────────────────┐ |
| 7 | +│ 用户界面 (Frontend) │ |
| 8 | +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │ |
| 9 | +│ │ 聊天界面 │ │ 医学可视化 │ │ 诊断模拟游戏界面 │ │ |
| 10 | +│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │ |
| 11 | +└────────────────────────────┬────────────────────────────────────┘ |
| 12 | + │ |
| 13 | + ▼ |
| 14 | +┌─────────────────────────────────────────────────────────────────┐ |
| 15 | +│ Nexent Runtime │ |
| 16 | +│ ┌─────────────────────────────────────────────────────────────┐│ |
| 17 | +│ │ 病理学AI助手 (Agent ID: 13) ││ |
| 18 | +│ └─────────────────────────────────────────────────────────────┘│ |
| 19 | +└────────────────────────────┬────────────────────────────────────┘ |
| 20 | + │ |
| 21 | + ▼ |
| 22 | +┌─────────────────────────────────────────────────────────────────┐ |
| 23 | +│ MCP 工具层 │ |
| 24 | +│ ┌──────────────────────┐ ┌──────────────────────────────┐ │ |
| 25 | +│ │ 内置工具 │ │ 自定义医疗工具 │ │ |
| 26 | +│ │ • knowledge_search │ │ • chain_of_diagnosis │ │ |
| 27 | +│ │ • tavily_search │ │ • evaluate_confidence │ │ |
| 28 | +│ │ • analyze_image │ │ • diagnosis_game │ │ |
| 29 | +│ └──────────────────────┘ └──────────────────────────────┘ │ |
| 30 | +└────────────────────────────┬────────────────────────────────────┘ |
| 31 | + │ |
| 32 | + ▼ |
| 33 | +┌─────────────────────────────────────────────────────────────────┐ |
| 34 | +│ 数据层 │ |
| 35 | +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │ |
| 36 | +│ │ PostgreSQL │ │Elasticsearch│ │ 病理图片服务器 │ │ |
| 37 | +│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │ |
| 38 | +└─────────────────────────────────────────────────────────────────┘ |
| 39 | +``` |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +## 工具调用关系图 (Mermaid) |
| 44 | + |
| 45 | +```mermaid |
| 46 | +flowchart TD |
| 47 | + subgraph User["👤 用户"] |
| 48 | + Q[用户提问] |
| 49 | + end |
| 50 | +
|
| 51 | + subgraph Agent["🤖 病理学AI助手 Agent ID:13"] |
| 52 | + A[接收问题] |
| 53 | + B{判断问题类型} |
| 54 | + end |
| 55 | +
|
| 56 | + subgraph BuiltIn["📦 内置工具"] |
| 57 | + KB[knowledge_base_search<br/>内部知识库 60%] |
| 58 | + TS[tavily_search<br/>外部搜索 40%] |
| 59 | + AI[analyze_image<br/>图片分析] |
| 60 | + end |
| 61 | +
|
| 62 | + subgraph Medical["🏥 医疗诊断工具"] |
| 63 | + COD[chain_of_diagnosis<br/>5步诊断推理链] |
| 64 | + CONF[evaluate_diagnosis_confidence<br/>置信度评估] |
| 65 | + IMG[search_pathology_images<br/>病理图片搜索] |
| 66 | + GUIDE[generate_medical_guide<br/>就医指南] |
| 67 | + end |
| 68 | +
|
| 69 | + subgraph Game["🎮 诊断模拟游戏"] |
| 70 | + START[start_diagnosis_game<br/>启动游戏] |
| 71 | + ACTION[diagnosis_action<br/>问诊/体检/检查/诊断] |
| 72 | + end |
| 73 | +
|
| 74 | + subgraph Visual["📊 医学可视化工具"] |
| 75 | + KG[generate_knowledge_graph<br/>知识图谱] |
| 76 | + FLOW[generate_diagnosis_flow<br/>诊断流程图] |
| 77 | + CHART[generate_medical_chart<br/>统计图表] |
| 78 | + RADAR[generate_radar_chart<br/>雷达图] |
| 79 | + TL[generate_timeline<br/>时间线] |
| 80 | + GANTT[generate_gantt_chart<br/>甘特图] |
| 81 | + QUAD[generate_quadrant_chart<br/>象限图] |
| 82 | + STATE[generate_state_diagram<br/>状态图] |
| 83 | + SANKEY[generate_sankey_diagram<br/>桑基图] |
| 84 | + end |
| 85 | +
|
| 86 | + Q --> A |
| 87 | + A --> B |
| 88 | + B -->|医学问答| KB |
| 89 | + B -->|医学问答| TS |
| 90 | + B -->|图片分析| AI |
| 91 | + B -->|诊断分析| COD |
| 92 | + B -->|诊断游戏| START |
| 93 | + B -->|可视化| KG |
| 94 | + B -->|就医咨询| GUIDE |
| 95 | + |
| 96 | + KB --> R[生成回答] |
| 97 | + TS --> R |
| 98 | + AI --> R |
| 99 | + COD --> CONF --> R |
| 100 | + START --> ACTION --> R |
| 101 | + KG --> R |
| 102 | + FLOW --> R |
| 103 | + CHART --> R |
| 104 | + RADAR --> R |
| 105 | + TL --> R |
| 106 | + GANTT --> R |
| 107 | + QUAD --> R |
| 108 | + STATE --> R |
| 109 | + SANKEY --> R |
| 110 | + IMG --> R |
| 111 | + GUIDE --> R |
| 112 | +``` |
| 113 | + |
| 114 | +--- |
| 115 | + |
| 116 | +## 完整工具调用流程图 |
| 117 | + |
| 118 | +```mermaid |
| 119 | +flowchart LR |
| 120 | + subgraph Input["输入"] |
| 121 | + U[用户问题] |
| 122 | + end |
| 123 | +
|
| 124 | + subgraph Process["处理流程"] |
| 125 | + U --> Agent[病理学AI助手] |
| 126 | + Agent --> Parse{解析意图} |
| 127 | + |
| 128 | + Parse -->|知识查询| Search["双重检索"] |
| 129 | + Parse -->|诊断请求| Diag["诊断分析"] |
| 130 | + Parse -->|游戏请求| Game["诊断游戏"] |
| 131 | + Parse -->|可视化| Viz["图表生成"] |
| 132 | + Parse -->|就医咨询| Guide["就医指南"] |
| 133 | + |
| 134 | + Search --> KB[内部知识库] |
| 135 | + Search --> Web[外部搜索] |
| 136 | + |
| 137 | + Diag --> CoD[CoD推理链] |
| 138 | + CoD --> Eval[置信度评估] |
| 139 | + |
| 140 | + Game --> Start[启动游戏] |
| 141 | + Start --> Action[执行动作] |
| 142 | + |
| 143 | + Viz --> Charts[9种图表工具] |
| 144 | + end |
| 145 | +
|
| 146 | + subgraph Output["输出"] |
| 147 | + KB --> Merge[结果融合] |
| 148 | + Web --> Merge |
| 149 | + Eval --> Merge |
| 150 | + Action --> Merge |
| 151 | + Charts --> Merge |
| 152 | + Guide --> Merge |
| 153 | + Merge --> Response[AI回答] |
| 154 | + end |
| 155 | +``` |
| 156 | + |
| 157 | +--- |
| 158 | + |
| 159 | +## 诊断游戏流程图 |
| 160 | + |
| 161 | +```mermaid |
| 162 | +flowchart LR |
| 163 | + A[启动游戏] --> B[问诊阶段] |
| 164 | + B --> C[体格检查] |
| 165 | + C --> D[辅助检查] |
| 166 | + D --> E[给出诊断] |
| 167 | + E --> F[评分反馈] |
| 168 | +``` |
| 169 | + |
| 170 | +--- |
| 171 | + |
| 172 | +## Chain-of-Diagnosis 流程 |
| 173 | + |
| 174 | +```mermaid |
| 175 | +flowchart TD |
| 176 | + INPUT[输入症状] --> S1[Step1: 症状分析] |
| 177 | + S1 --> S2[Step2: 病史关联] |
| 178 | + S2 --> S3[Step3: 鉴别诊断] |
| 179 | + S3 --> S4[Step4: 检查建议] |
| 180 | + S4 --> S5[Step5: 初步结论] |
| 181 | + S5 --> EVAL[置信度评估] |
| 182 | + EVAL --> OUTPUT[诊断报告] |
| 183 | +``` |
| 184 | + |
| 185 | +--- |
| 186 | + |
| 187 | +## 前端组件调用关系 |
| 188 | + |
| 189 | +```mermaid |
| 190 | +flowchart TD |
| 191 | + subgraph Chat["聊天界面"] |
| 192 | + CI[chatInterface.tsx] |
| 193 | + MD[markdownRenderer.tsx] |
| 194 | + end |
| 195 | +
|
| 196 | + subgraph MedViz["医学可视化组件"] |
| 197 | + MVP[MedicalVisualizationPanel] |
| 198 | + PIG[PathologyImageGallery] |
| 199 | + DCC[DiagnosisConfidenceCard] |
| 200 | + ST[SourceTag] |
| 201 | + end |
| 202 | +
|
| 203 | + subgraph Services["服务层"] |
| 204 | + CS[conversationService.ts] |
| 205 | + end |
| 206 | +
|
| 207 | + CI --> MD |
| 208 | + MD -->|渲染Mermaid| MVP |
| 209 | + MD -->|渲染图片| PIG |
| 210 | + MD -->|渲染置信度| DCC |
| 211 | + MD -->|渲染来源| ST |
| 212 | + MD -->|[btn:xx]按钮| BTN[ClickableOption] |
| 213 | + |
| 214 | + CI --> CS |
| 215 | + CS -->|deleteAll| API[后端API] |
| 216 | +``` |
| 217 | + |
| 218 | +--- |
| 219 | + |
| 220 | +## MCP工具注册关系 |
| 221 | + |
| 222 | +```mermaid |
| 223 | +flowchart TD |
| 224 | + subgraph MCP["FastMCP框架"] |
| 225 | + LMS[local_mcp_service.py] |
| 226 | + end |
| 227 | +
|
| 228 | + subgraph Decorator["@local_mcp_service.tool 装饰器"] |
| 229 | + D1[医疗诊断工具 x4] |
| 230 | + D2[诊断游戏工具 x2] |
| 231 | + D3[可视化工具 x9] |
| 232 | + end |
| 233 | +
|
| 234 | + subgraph Runtime["Nexent Runtime"] |
| 235 | + Agent[病理学AI助手] |
| 236 | + end |
| 237 | +
|
| 238 | + LMS --> D1 |
| 239 | + LMS --> D2 |
| 240 | + LMS --> D3 |
| 241 | + |
| 242 | + D1 --> Agent |
| 243 | + D2 --> Agent |
| 244 | + D3 --> Agent |
| 245 | +``` |
| 246 | + |
| 247 | +--- |
| 248 | + |
| 249 | +## 数据流向图 |
| 250 | + |
| 251 | +```mermaid |
| 252 | +flowchart LR |
| 253 | + subgraph Input["用户输入"] |
| 254 | + Text[文本问题] |
| 255 | + Image[病理图片] |
| 256 | + Click[按钮点击] |
| 257 | + end |
| 258 | +
|
| 259 | + subgraph Process["Agent处理"] |
| 260 | + Text --> Agent[病理学AI助手] |
| 261 | + Image --> Agent |
| 262 | + Click --> Agent |
| 263 | + |
| 264 | + Agent --> Tools[MCP工具] |
| 265 | + Tools --> KB[(知识库)] |
| 266 | + Tools --> Web((互联网)) |
| 267 | + Tools --> ImgDB[(图片库)] |
| 268 | + end |
| 269 | +
|
| 270 | + subgraph Output["输出"] |
| 271 | + KB --> Response |
| 272 | + Web --> Response |
| 273 | + ImgDB --> Response |
| 274 | + Response[AI回答] --> Render[前端渲染] |
| 275 | + Render --> Markdown[文本/表格] |
| 276 | + Render --> Mermaid[图表] |
| 277 | + Render --> Images[图片] |
| 278 | + Render --> Buttons[交互按钮] |
| 279 | + end |
| 280 | +``` |
| 281 | + |
| 282 | +--- |
| 283 | + |
| 284 | +## 文件修改清单 |
| 285 | + |
| 286 | +### 后端修改 |
| 287 | + |
| 288 | +| 文件 | 类型 | 说明 | |
| 289 | +|------|------|------| |
| 290 | +| `backend/tool_collection/mcp/local_mcp_service.py` | 新增 | 15个医疗MCP工具 | |
| 291 | + |
| 292 | +### 前端修改 |
| 293 | + |
| 294 | +| 文件 | 类型 | 说明 | |
| 295 | +|------|------|------| |
| 296 | +| `frontend/components/medical-visualization/PathologyImageGallery.tsx` | 新增 | 病理图片画廊 | |
| 297 | +| `frontend/components/medical-visualization/DiagnosisConfidenceCard.tsx` | 新增 | 置信度卡片 | |
| 298 | +| `frontend/components/medical-visualization/SourceTag.tsx` | 新增 | 来源标签 | |
| 299 | +| `frontend/components/medical-visualization/MedicalVisualizationPanel.tsx` | 修改 | 去除硬编码 | |
| 300 | +| `frontend/components/ui/markdownRenderer.tsx` | 修改 | [btn:xx]按钮解析 | |
| 301 | +| `frontend/app/[locale]/chat/components/chatLeftSidebar.tsx` | 修改 | 清空对话按钮 | |
| 302 | +| `frontend/services/conversationService.ts` | 修改 | deleteAll方法 | |
| 303 | + |
| 304 | +### 配置文件 |
| 305 | + |
| 306 | +| 文件 | 说明 | |
| 307 | +|------|------| |
| 308 | +| `docker/update_prompt_btn.sql` | Agent提示词配置 | |
0 commit comments