Triage user symptoms via semantic search over yixue.com knowledge base; calls symptom_triage.py which uses sentence-transformers (BAAI/bge-small-zh-v1.5) to recommend departments, flag emergencies, and generate follow-up questions
接收用户自然语言症状描述,调用 symptom_triage.py,通过语义检索知识库 yixue_knowledge.json,
输出推荐就诊科室、危急警示和追问列表。
hospital_matcher 之前必须先调用本 skill,以确定目标科室hospital_matcher本 skill 使用 sentence-transformers 语义检索,不依赖关键词匹配:
用户症状描述
│
▼
detect_emergency() ← 与 7 条急症场景描述比对,阈值 0.70
│ 有命中 → 返回 warning_flags,终止流程
▼
search_knowledge(k=5) ← BGE 向量检索 yixue_knowledge.json 59 个条目
│ 每条索引文本 = route + keywords + content[:150]
▼
_deduplicate_by_hierarchy() ← 子节点分数 ≥ 父节点×0.85 时丢弃父节点
│
▼
route → 科室映射 ← _ROUTE_DEPT 前缀匹配表
│ 仅命中父节点 → need_more_info=True,触发追问
▼
返回结构化结果
创建临时脚本 temp_triage.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import json
import os
os.environ['PYTHONIOENCODING'] = 'utf-8'
sys.stdout.reconfigure(encoding='utf-8')
sys.path.insert(0, 'skills/healthpath-symptom-triage')
from symptom_triage import triage
result = triage(
symptom_text="用户症状描述",
user_profile={"age_group": "adult"} # "elderly" | "adult" | "child"
)
print(json.dumps(result, ensure_ascii=False, indent=2))
然后执行(Windows PowerShell 必须用分号分隔,不能用 &&):
cd E:\homework\Zhishu; $env:PYTHONIOENCODING='utf-8'; python temp_triage.py
为什么用脚本? Windows PowerShell 的 GBK 编码会导致 UnicodeEncodeError,脚本方式可以正确处理 UTF-8 和特殊符号(如 ⚠️)。
⚠️ PowerShell 语法注意:
cd E:\homework\Zhishu && $env:PYTHONIOENCODING='utf-8' && python temp_triage.py
&& 不是有效的链接符,会导致 ParserErrorcd E:\homework\Zhishu; $env:PYTHONIOENCODING='utf-8'; python temp_triage.py
; 分隔多条命令cmd /c 包装(支持 &&):cmd /c "cd E:\homework\Zhishu && set PYTHONIOENCODING=utf-8 && python temp_triage.py"from symptom_triage import triage
result = triage(
symptom_text="老人头晕失眠两周了",
user_profile={"age_group": "elderly"}, # "elderly" | "adult" | "child"
extra_answers={}
)
| 字段 | 说明 |
|---|---|
recommended_departments | 推荐科室列表,按相关度排列,取 [0] 作为主科室传入 hospital_matcher |
warning_flags | 危急征兆提示;非空时立即告知用户拨打 120,终止挂号流程 |
need_more_info | 是否需要向用户追问 |
follow_up_questions | 追问列表,每项含 id / question |
preliminary_diagnosis | 初步判断,可直接展示给用户 |
referenced_routes | 本次命中的知识库 route 列表 |
disclaimer | 固定免责声明,每次必须展示 |
detect_emergency()
└─ 命中(score ≥ 0.70)→ warning_flags 非空,提示急诊/120,立即返回
输入过短(< 5字)
└─ need_more_info=True,追问症状详情
search_knowledge()
├─ 无命中(score < 0.40)→ need_more_info=True,追问部位/性质
├─ 仅命中父节点 → need_more_info=True,追问部位/性质
└─ 命中叶子节点 → 返回科室推荐 + preliminary_diagnosis
BAAI/bge-small-zh-v1.5(约 90MB),缓存于 ~/.cache/huggingface/hub/hf-mirror.com 下载,需要联网TRANSFORMERS_OFFLINE=1,完全离线,秒速加载hf-mirror.com,可通过环境变量 HF_ENDPOINT 覆盖Windows 特殊处理(必须):
UnicodeEncodeErrorPYTHONIOENCODING='utf-8' 和 sys.stdout.reconfigure(encoding='utf-8')ensure_ascii=False 保留中文和特殊符号Linux/macOS: 可直接调用,无需额外处理
age_group=elderly)时,判断文本加入老年人专项提示age_group=child)时,科室列表置顶儿科disclaimer 内容每次必须原文展示给用户,不得省略ParserError 或 InvalidEndOfLine原因: PowerShell 不支持 && 链接符。
解决: 用分号 ; 替代:
cd E:\homework\Zhishu; $env:PYTHONIOENCODING='utf-8'; python temp_triage.py
UnicodeEncodeError原因: PowerShell 默认 GBK 编码,Python 输出 UTF-8 中文时冲突。
解决:
sys.stdout.reconfigure(encoding='utf-8')ensure_ascii=False$env:PYTHONIOENCODING='utf-8'原因: 首次运行需从 HuggingFace 下载 90MB 模型。
解决:
~/.cache/huggingface/hub/,后续运行秒速加载HF_ENDPOINT 环境变量切换镜像源⚠️ 以上判断仅供参考,不构成医学诊断,不替代执业医师意见。如症状严重或突发,请立即拨打 120 或前往最近急诊。