
SKILL(技能单元):是大模型在医疗场景下的专业化功能模块,比如血糖监测SKILL、血压预警SKILL、饮食指导SKILL、危急重症SKILL,每个SKILL只负责一类精准医疗任务,不做泛化闲聊。
意图路由:当用户输入一句话,如“我血糖12、血压180,该吃什么”,大模型先识别这句话里包含的所有医疗意图,再把请求精准分配给对应的SKILL处理。
竞争调度:多个SKILL同时命中用户意图时,血糖 + 血压 + 饮食3个SKILL都被触发,算法通过打分、优先级判断,决定先处理哪个、后处理哪个、不处理哪个,避免意图混乱。
医疗场景核心规则:危急问题(高血压危象、低血糖昏迷)绝对优先,绝不被饮食指导、闲聊等低优先级SKILL抢占,保障医疗安全。

普通大模型是聊天机器人,用户问什么就答什么,没有优先级、没有安全管控:
SKILL调度算法让大模型升级为医疗决策单元,具备3大核心能力:
关键词匹配层:基础识别,快速命中用户输入中的医疗关键词,如血糖、血压、饮食、头晕、昏迷;
置信度打分模块:给每个命中的SKILL打分数,判断意图匹配的可信度;
上下文衰减模块:结合对话上下文,降低过时意图的权重,比如10分钟前问血糖,现在问血压,血糖权重衰减;
历史偏好加权模块:根据用户历史使用习惯,提升高频SKILL的权重,比如用户常年监测血糖,血糖SKILL加权加分;
竞争调度核心:综合分数 + 固定优先级,最终路由到唯一、优先执行的 SKILL。
用户输入:“我空腹血糖13.5,血压185/110,头晕眼花,今天该吃什么”
医疗场景的优先级是固定且不可篡改的,这是算法的核心规则,所有调度都以此为依据:
优先级 | SKILL 类型 | 风险等级 | 典型功能 | 调度规则 |
|---|---|---|---|---|
P0(最高) | 危急重症 SKILL | 极高 | 昏迷、休克、心梗、高血压危象 | 绝对优先,屏蔽所有其他 SKILL |
P1 | 生命体征预警 SKILL | 高 | 血压≥180、血糖≥16、心率异常 | 优先于 P2 及以下,不可被抢占 |
P2 | 慢病监测 SKILL | 中 | 常规血糖 / 血压 / 血脂记录 | 优先于 P3,可被 P0/P1 抢占 |
P3 | 健康指导 SKILL | 低 | 饮食、运动、用药建议 | 最后执行,可被所有高优先级抢占 |
P4(最低) | 闲聊 / 通用 SKILL | 无 | 问候、无关问题 | 仅无医疗意图时执行 |
重点说明:P0-P1级SKILL 有抢占权,一旦命中,立即中断当前低优先级SKILL的执行,保障医疗安全。

计算意图匹配可信度,置信度是算法对“用户意图与SKILL匹配度”的量化评分,满分100分,分数越高,匹配越准确。
基础打分规则:
示例:用户说“血压185,头晕”,血压SKILL打分 = 40(完全匹配)+20(语义相关)+30(数值异常)=90 分。

核心是避免过时意图干扰,因为对话是动态的,用户10分钟前问的血糖,现在问血压,旧意图的权重需要随时间衰减,避免算法误判。
衰减公式:当前上下文权重 = 原始权重 × 衰减系数 ^ 时间间隔(分钟)
示例:用户 10 分钟前触发血糖SKILL,原始权重100,当前时间间隔10分钟:

目的是贴合用户习惯,算法会记录用户历史使用 SKILL 的频率,给高频 SKILL额外加权,提升匹配准确性:
加权规则:
示例:用户常年监测血糖,近7天使用12次血糖SKILL,触发时额外+15分,提升置信度。


通过流程图展示技能路由决策:用户输入经粗匹配、语义识别、多维度打分(置信度、上下文、历史偏好)后,按固定优先级(P0-P4)路由至目标SKILL并执行回复。

流程详细说明:
- 1. 用户输入接收 接收用户文本/语音请求,比如:“我血糖 14,血压 190,心慌,该吃什么”。
- 2. 关键词粗匹配
算法扫描输入中的医疗关键词,筛选出候选SKILL:
- 3. 大模型语义精识别
大模型分析语义,修正粗匹配误差:
- 4. 多维度打分计算
- 5. 固定优先级调度
无论分数多少,优先级高于一切:
6. SKILL执行与回复输出
7. 日志记录与更新
记录本次调度结果、用户意图、SKILL执行情况,更新历史偏好数据,为下一次调度优化。
SKILL最终得分 = 基础置信度 × 上下文衰减系数 + 历史偏好加权分
if 存在P0级SKILL命中: 路由到P0 SKILL elif 存在P1级SKILL命中: 路由到P1 SKILL elif 存在P2级SKILL命中: 路由到P2 SKILL elif 存在P3级SKILL命中: 路由到P3 SKILL else: 路由到P4闲聊SKILL
核心逻辑:优先级第一,分数第二,保障高风险问题绝对优先。
衰减系数遵循指数衰减规律,符合人类对话逻辑:时间越远,意图越不重要。医疗场景选择0.8作为衰减系数,兼顾灵敏度与稳定性:
基础关键词匹配容易误判,如用户说“血压计坏了”,关键词匹配血压SKILL,但无医疗风险,大模型会做置信度修正:
1. 能力升级:从泛化回答到专业决策
普通大模型的局限:
SKILL调度算法带来的升级:
2. 架构升级:可管控、可扩展、可维护
3. 医疗场景的不可替代性
4. 未来价值:大模型医疗的核心基础设施
SKILL意图路由竞争调度算法是医疗大模型的核心骨架:
三者结合,让大模型真正成为辅助诊疗的医疗决策单元,而非简单的聊天工具。
以下示例展示了一个医疗AI助手的核心调度逻辑。其意义在于通过多维度评分(关键词匹配、历史偏好、时效性衰减)和高风险优先原则,确保紧急医疗情况能被及时识别并分配给最合适的处理模块,避免因低优先级请求延误高危状况,保障患者安全。
重点包括:
import time
from typing import Dict, List
# 1. 定义医疗SKILL优先级与配置(核心规则)
SKILL_CONFIG = {
"critical_emergency": {"name": "危急重症SKILL", "priority": 0, "base_score": 95}, # P0最高
"bp_warning": {"name": "血压预警SKILL", "priority": 1, "base_score": 80},
"glucose_monitor": {"name": "血糖监测SKILL", "priority": 2, "base_score": 75},
"diet_guide": {"name": "饮食指导SKILL", "priority": 3, "base_score": 60},
"chat": {"name": "闲聊SKILL", "priority": 4, "base_score": 0}
}
# 2. 关键词匹配库
KEYWORD_MAP = {
"critical_emergency": ["昏迷", "休克", "心梗", "血压≥180", "血糖≥16", "心慌", "喘不上气"],
"bp_warning": ["血压", "高血压", "头晕"],
"glucose_monitor": ["血糖", "空腹血糖", "餐后血糖"],
"diet_guide": ["吃什么", "饮食", "饭菜", "食谱"],
"chat": ["你好", "谢谢", "在吗", "问候"]
}
class MedicalSkillScheduler:
def __init__(self):
self.user_history = {} # 记录用户历史SKILL使用记录
self.last_request_time = {} # 记录上一次请求时间
# 计算上下文衰减系数
def calculate_decay(self, skill_name: str) -> float:
last_time = self.last_request_time.get(skill_name, 0)
if last_time == 0:
return 1.0 # 从未调用过,不衰减,使用基础分
now = time.time()
interval_min = (now - last_time) / 60 # 时间间隔(分钟)
decay = 0.8 ** interval_min # 衰减公式
return round(decay, 3)
# 计算历史偏好加权分
def calculate_preference(self, skill_name: str, user_id: str) -> int:
history = self.user_history.get(user_id, {}).get(skill_name, 0)
if history >= 10:
return 15
elif 5 <= history < 10:
return 10
elif 1 <= history < 5:
return 5
return 0
# 关键词匹配命中SKILL
def match_skills(self, query: str) -> List[str]:
matched_skills = []
for skill, keywords in KEYWORD_MAP.items():
for kw in keywords:
if kw in query:
matched_skills.append(skill)
break
return matched_skills if matched_skills else ["chat"]
# 计算SKILL最终得分
def calculate_final_score(self, skill_name: str, user_id: str) -> float:
base = SKILL_CONFIG[skill_name]["base_score"]
decay = self.calculate_decay(skill_name)
preference = self.calculate_preference(skill_name, user_id)
final_score = base * decay + preference
return round(final_score, 2)
# 核心调度算法
def schedule(self, query: str, user_id: str = "default_user") -> Dict:
# Step1:匹配候选SKILL
matched_skills = self.match_skills(query)
# Step2:计算每个SKILL得分
skill_scores = {}
for skill in matched_skills:
skill_scores[skill] = self.calculate_final_score(skill, user_id)
# Step3:按优先级排序(优先级第一,分数第二)
sorted_skills = sorted(
skill_scores.keys(),
key=lambda x: (SKILL_CONFIG[x]["priority"], -skill_scores[x])
)
# Step4:选定目标SKILL
target_skill = sorted_skills[0]
target_name = SKILL_CONFIG[target_skill]["name"]
final_score = skill_scores[target_skill]
# Step5:更新历史记录
self.user_history[user_id] = self.user_history.get(user_id, {})
self.user_history[user_id][target_skill] = self.user_history[user_id].get(target_skill, 0) + 1
self.last_request_time[target_skill] = time.time()
# Step6:生成调度结果
return {
"user_query": query,
"matched_skills": {SKILL_CONFIG[s]["name"]: skill_scores[s] for s in matched_skills},
"target_skill": target_name,
"final_score": final_score,
"priority": SKILL_CONFIG[target_skill]["priority"]
}
# 测试示例
if __name__ == "__main__":
scheduler = MedicalSkillScheduler()
# 测试用例:危急重症场景
query1 = "我血压190,心慌头晕,眼前发黑,该吃什么"
result1 = scheduler.schedule(query1)
print("=== 测试用例1:危急重症场景 ===")
print(f"用户输入:{result1['user_query']}")
print(f"命中SKILL及得分:{result1['matched_skills']}")
print(f"最终调度:{result1['target_skill']},优先级:{result1['priority']},最终得分:{result1['final_score']}")
print("-" * 80)
# 测试用例:常规慢病场景
query2 = "我空腹血糖7.0,今天饮食注意什么"
result2 = scheduler.schedule(query2)
print("=== 测试用例2:常规慢病场景 ===")
print(f"用户输入:{result2['user_query']}")
print(f"命中SKILL及得分:{result2['matched_skills']}")
print(f"最终调度:{result2['target_skill']},优先级:{result2['priority']},最终得分:{result2['final_score']}")代码说明:
输出结果:
=== 测试用例1:危急重症场景 === 用户输入:我血压190,心慌头晕,眼前发黑,该吃什么 命中SKILL及得分:{'危急重症SKILL': 95.0, '血压预警SKILL': 80.0, '饮食指导SKILL': 60.0} 最终调度:危急重症SKILL,优先级:0,最终得分:95.0 -------------------------------------------------------------------------------- === 测试用例2:常规慢病场景 === 用户输入:我空腹血糖7.0,今天饮食注意什么 命中SKILL及得分:{'血糖监测SKILL': 75.0, '饮食指导SKILL': 60.0} 最终调度:血糖监测SKILL,优先级:2,最终得分:75.0
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False
# 1. 医疗SKILL优先级可视化
def draw_skill_priority():
priorities = ["P0\n危急重症", "P1\n血压预警", "P2\n血糖监测", "P3\n饮食指导", "P4\n闲聊"]
levels = [100, 80, 60, 40, 20]
colors = ["#DC143C", "#FF4500", "#FFA500", "#32CD32", "#1E90FF"]
plt.figure(figsize=(10, 6))
bars = plt.bar(priorities, levels, color=colors, edgecolor="black", linewidth=1.5)
plt.title("医疗SKILL优先级与风险等级可视化", fontsize=16, pad=20)
plt.xlabel("SKILL优先级", fontsize=12)
plt.ylabel("风险等级(分值越高风险越高)", fontsize=12)
plt.ylim(0, 110)
# 添加数值标签
for bar, level in zip(bars, levels):
plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 2,
f"{level}分", ha="center", va="bottom", fontsize=11, fontweight="bold")
plt.grid(axis="y", alpha=0.3)
plt.tight_layout()
plt.savefig("medical_skill_priority.png", dpi=300, bbox_inches="tight")
plt.close()
print("优先级图表已保存:medical_skill_priority.png")
# 2. 上下文衰减曲线可视化
def draw_decay_curve():
minutes = np.arange(0, 21, 1)
decay = 0.8 ** minutes
plt.figure(figsize=(10, 6))
plt.plot(minutes, decay, color="#FF4500", linewidth=3, marker="o", markersize=4)
plt.title("医疗场景上下文衰减曲线(衰减系数=0.8)", fontsize=16, pad=20)
plt.xlabel("时间间隔(分钟)", fontsize=12)
plt.ylabel("上下文权重系数", fontsize=12)
plt.grid(alpha=0.3)
plt.ylim(0, 1.05)
# 标注关键节点
key_points = [5, 10, 15, 20]
for p in key_points:
plt.annotate(f"{p}分钟: {0.8**p:.2f}",
xy=(p, 0.8**p),
xytext=(p+0.5, 0.8**p+0.05),
arrowprops=dict(arrowstyle="->", color="red"),
fontsize=10)
plt.tight_layout()
plt.savefig("context_decay_curve.png", dpi=300, bbox_inches="tight")
plt.close()
print("衰减曲线图表已保存:context_decay_curve.png")
# 执行生成
if __name__ == "__main__":
draw_skill_priority()
draw_decay_curve()医疗SKILL优先级与风险等级可视化:

医疗场景上下文衰减曲线(衰减系数=0.8):

SKILL级别意图路由竞争调度算法,就是给医疗大模型装了一套智能指挥中心,让AI从只会闲聊的机器人,变成能判断轻重缓急、懂风险分级的专业医疗决策单元。整套逻辑就是用户一句话里同时问到血糖、血压、饮食这类多个问题时,系统先通过关键词粗匹配 + 大模型语义解析,把所有相关SKILL都找出来,再用置信度打分、上下文时间衰减、历史使用偏好加权算出每个意图的靠谱程度。但分数只是参考,医疗场景最核心的是固定优先级,危急重症永远排第一,接着是血压血糖这类生命体征预警,再到慢病监测、饮食指导,闲聊放在最后。
这样一来就彻底解决了用户血压爆表、情况危急,AI却先扯吃什么的尴尬场面,高风险内容绝对不会被低优先级请求抢占。简单理解,它就是医疗AI的分诊台,既有人文温度,又有科技精度,既保证响应精准,又守住安全底线,是医疗大模型在真实场景里的关键骨架。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。