
1.1 大模型原生对话与Skill的本质区别
传统大模型对话是无状态、瞬时性、无记忆的交互模式:每一轮对话都是独立的计算单元,模型不会主动保存用户历史输入、偏好、生理数据、交互目标,仅基于当前单轮文本生成回答。例如用户连续询问“我今天空腹血糖 7.2mmol/L”、“这个数值正常吗”、“我需要调整饮食吗”,普通大模型无法关联三轮对话的上下文,会将其视为三个独立问题,给出碎片化、无针对性的回复。
Skill技能模块是基于大模型的垂直领域轻量化封装组件,是为特定慢病场景(糖尿病、高血压、饮食管理)定制的功能单元。它不是独立的大模型,而是挂载在大模型之上的专业化插件,具备独立的数据存储、逻辑计算、规则判断能力,能够承接大模型无法完成的结构化数据处理、长期记忆保存、病程量化分析工作。

1.2 状态持久化:慢病管理的核心技术基石
状态持久化 是指将Skill与用户的交互数据、用户生理指标、健康偏好、病程数据,从内存临时存储写入持久化存储介质(数据库、文件、云存储),实现数据跨对话轮次、跨使用时间、跨设备永久保存的技术。
在慢病管理场景中,状态持久化解决了三个核心痛点:
1.3 病程追踪与个人健康图谱
病程追踪 是基于持久化的结构化数据,对用户慢病指标(血糖、血压)、生活习惯、用药情况、饮食行为进行连续、量化、可视化的跟踪,生成趋势曲线、异常预警、病程评估报告。
个人健康图谱 是将用户所有 Skill(糖尿病、高血压、饮食)的数据进行关联融合,形成的多维度、结构化、可推理的用户健康数据网络。它打破了单一技能的数据孤岛,实现血糖异常→饮食禁忌→用药建议→血压关联的全链路智能分析。
我国慢病患者规模超 4 亿,糖尿病、高血压为代表的慢性病具有长期性、反复性、需持续干预的特征。传统医疗模式存在三大痛点:
大模型具备自然语言理解、生成、交互能力,但缺乏结构化数据存储、专业医疗规则、长期记忆能力;而 Skill 状态持久化技术,恰好弥补了大模型的短板,让大模型从通用对话工具升级为专业慢病管理助手。
Skill不只是一个功能插件,它是慢病病程管理的最小数据单元:

所有 Skill 通过状态持久化,将非结构化的自然语言对话,转化为标准化、可计算、可追踪的医疗健康数据,最终汇聚成个人健康图谱。这是大模型实现智能化慢病管理的核心逻辑。
1.1 无状态交互原理
普通大模型采用请求 - 响应模式:
1.2 有状态Skill交互架构
Skill架构在大模型之上,新增三大核心模块:
2.1 存储介质选型
2.2 数据结构化标准
慢病数据必须标准化,才能实现追踪与分析:

2.3 跨轮次、跨技能数据关联
为了让 Skill 具备专业性,必须嵌入基础医学规则:
这些规则会写入 Skill 的逻辑判断模块,结合持久化数据实现智能评估。

以“糖尿病血糖记录”追踪的不同场景的流程执行步骤为例:

执行步骤:

执行步骤:


执行步骤:

跨Skill健康时序堆叠图:

基于skill的核心逻辑和慢病管理应用场景,实现一个基础的示例,包含数据结构化、状态持久化、病程追踪、可视化绘图功能;
生成全局唯一用户ID,实现不同用户数据隔离,是状态持久化的基础:一人一档案,数据不混淆
# 安装依赖
# pip install json matplotlib datetime uuid
import json
import uuid
from datetime import datetime
import matplotlib.pyplot as plt
import os
def generate_user_id():
"""
生成全局唯一用户ID,实现不同用户数据隔离
是状态持久化的基础:一人一档案,数据不混淆
"""
return str(uuid.uuid4())
# 示例:创建用户
user_id = generate_user_id()
print(f"慢病管理系统用户唯一ID:{user_id}")输出结果:
慢病管理系统用户唯一ID:45272ec6-6feb-42e3-8105-12a0fc8b3cff
糖尿病Skill:解析自然语言为结构化血糖数据,input_text是用户输入文本,measure_time是测量时间,默认当前时间,返回结构化血糖数据
def parse_diabetes_input(input_text: str, measure_time=None):
"""
糖尿病Skill:解析自然语言为结构化血糖数据
:param input_text: 用户输入文本
:param measure_time: 测量时间,默认当前时间
:return: 结构化血糖数据
"""
if measure_time is None:
measure_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 简化版语义解析(工业级可对接大模型API)
glucose_value = 0.0
measure_type = "未知"
if "空腹" in input_text:
measure_type = "空腹"
if "餐后2小时" in input_text:
measure_type = "餐后2h"
# 提取数值
for word in input_text.split():
word = word.replace("mmol/L", "")
try:
glucose_value = float(word)
break
except:
continue
# 医学规则判断血糖状态
status = "正常"
if measure_type == "空腹":
if glucose_value > 6.1:
status = "偏高"
elif glucose_value < 3.9:
status = "偏低"
elif measure_type == "餐后2h":
if glucose_value > 7.8:
status = "偏高"
return {
"measure_time": measure_time,
"glucose_value": glucose_value,
"measure_type": measure_type,
"status": status
}状态持久化核心函数:将Skill数据保存到本地的json文件
def save_user_skill_data(user_id: str, skill_type: str, data: dict):
"""
状态持久化核心函数:将Skill数据保存到本地文件
:param user_id: 用户唯一ID
:param skill_type: 技能类型(diabetes/hypertension/diet)
:param data: 结构化数据
"""
filename = f"{user_id}_{skill_type}.json"
# 读取历史数据(若存在)
history_data = []
if os.path.exists(filename):
with open(filename, "r", encoding="utf-8") as f:
history_data = json.load(f)
# 追加新数据
history_data.append(data)
# 写入文件(持久化)
with open(filename, "w", encoding="utf-8") as f:
json.dump(history_data, f, ensure_ascii=False, indent=2)
print(f"✅ 数据已持久化保存至:{filename}")
return True读取用户持久化的历史数据,用于病程追踪
def get_user_skill_history(user_id: str, skill_type: str):
"""
读取用户持久化的历史数据,用于病程追踪
"""
filename = f"{user_id}_{skill_type}.json"
if not os.path.exists(filename):
return []
with open(filename, "r", encoding="utf-8") as f:
return json.load(f)
def analyze_glucose_trend(user_id: str):
"""
糖尿病病程追踪:分析血糖趋势,生成统计报告
"""
data_list = get_user_skill_history(user_id, "diabetes")
if not data_list:
return "暂无血糖数据"
# 统计计算
values = [item["glucose_value"] for item in data_list]
times = [item["measure_time"][5:16] for item in data_list]
avg_value = sum(values) / len(values)
max_value = max(values)
min_value = min(values)
# 异常统计
abnormal_count = len([item for item in data_list if item["status"] != "正常"])
report = f"""
📊 糖尿病血糖病程分析报告
总记录次数:{len(data_list)}
平均血糖值:{avg_value:.2f} mmol/L
最高血糖值:{max_value:.2f} mmol/L
最低血糖值:{min_value:.2f} mmol/L
异常记录次数:{abnormal_count}
"""
return report, times, values绘制血糖趋势图,保存为图片,实现病程追踪可视化
def plot_glucose_trend(user_id: str, save_path=None):
"""
绘制血糖趋势图,保存为图片(病程追踪可视化)
"""
data_list = get_user_skill_history(user_id, "diabetes")
if not data_list:
print("暂无血糖数据")
return
if save_path is None:
save_path = f"{user_id}_glucose_trend.png"
plt.rcParams["font.sans-serif"] = ["SimHei", "DejaVu Sans"]
plt.rcParams["axes.unicode_minus"] = False
values = [item["glucose_value"] for item in data_list]
times = [item["measure_time"][5:16] for item in data_list]
plt.figure(figsize=(12, 6))
plt.plot(times, values, marker="o", linewidth=2, color="#e63946", label="血糖值")
plt.axhline(y=6.1, color="orange", linestyle="--", label="空腹血糖上限")
plt.title(f"用户 {user_id[:8]}... 血糖趋势追踪图", fontsize=14)
plt.xlabel("测量时间", fontsize=12)
plt.ylabel("血糖值 (mmol/L)", fontsize=12)
plt.xticks(rotation=45)
plt.grid(alpha=0.3)
plt.legend()
plt.tight_layout()
plt.savefig(save_path, dpi=150)
plt.close()
print(f"✅ 血糖趋势图已保存:{save_path}")
return save_pathif __name__ == "__main__":
# 1. 创建用户
user_id = generate_user_id()
print(f"新用户ID:{user_id}")
# 2. 模拟用户连续输入血糖数据
user_inputs = [
"2025-12-20 08:00 空腹血糖6.5mmol/L",
"2025-12-21 08:10 空腹血糖5.9mmol/L",
"2025-12-22 08:05 空腹血糖7.2mmol/L",
"2025-12-23 07:50 空腹血糖6.8mmol/L"
]
# 3. 解析并持久化数据
for text in user_inputs:
data = parse_diabetes_input(text)
save_user_skill_data(user_id, "diabetes", data)
# 4. 生成病程报告
report, _, _ = analyze_glucose_trend(user_id)
print(report)
# 5. 生成趋势图
plot_glucose_trend(user_id)输出结果:
慢病管理系统用户唯一ID:7fc7e735-7b83-4507-b40f-7d564a61743c 新用户ID:b052e05f-49e6-480d-958a-9c8b83f64b79 ✅ 数据已持久化保存至:b052e05f-49e6-480d-958a-9c8b83f64b79_diabetes.json ✅ 数据已持久化保存至:b052e05f-49e6-480d-958a-9c8b83f64b79_diabetes.json ✅ 数据已持久化保存至:b052e05f-49e6-480d-958a-9c8b83f64b79_diabetes.json ✅ 数据已持久化保存至:b052e05f-49e6-480d-958a-9c8b83f64b79_diabetes.json 📊 糖尿病血糖病程分析报告 总记录次数:4 平均血糖值:6.60 mmol/L 最高血糖值:7.20 mmol/L 最低血糖值:5.90 mmol/L 异常记录次数:3
血糖趋势图:

b052e05f-49e6-480d-958a-9c8b83f64b79_diabetes.json 文件内容:
[
{
"measure_time": "2025-12-20 08:00",
"glucose_value": 6.5,
"measure_type": "空腹",
"status": "偏高"
},
{
"measure_time": "2025-12-21 08:10",
"glucose_value": 5.9,
"measure_type": "空腹",
"status": "正常"
},
{
"measure_time": "2025-12-22 08:05",
"glucose_value": 7.2,
"measure_type": "空腹",
"status": "偏高"
},
{
"measure_time": "2025-12-23 07:50",
"glucose_value": 6.8,
"measure_type": "空腹",
"status": "偏高"
}
]1. 弥补大模型三大核心缺陷
2. 大模型能力升级路径
3 产业价值:大模型 + Skill 重构慢病管理模式
4. 技术价值:大模型从文本生成器升级为数据智能体
Skill 状态持久化让大模型不再只是处理文本,而是能够:
这是大模型在医疗健康领域落地的核心技术支撑。
面向慢病的SKILL状态持久化与病程追踪,核心其实就是把只会聊天、转头就忘的大模型,变成能长期管慢病、懂患者病情的智能助手。普通对话是无状态的,聊完就清空,而 SKILL 最大的价值,就是能为每个用户保存专属交互记录,把血糖、血压、饮食禁忌这些关键信息结构化存下来,实现跨轮次、跨技能的记忆,最终拼成完整的个人健康图谱。
它不只是一个功能插件,更是慢病管理里真正的数据载体,让大模型从 “随口回答” 升级成 “持续追踪、专业判断”。有了状态持久化,数据不会丢、趋势能分析、异常能预警,这才是医疗AI落地的关键,否则再强的模型也只能做一次性问答。大模型落地垂直场景,拼的不是对话多流畅,而是数据能不能结构化、能不能持久化、能不能联动复用。很多人一上来就堆模型效果,反而忽略了状态管理和病程追踪这种工程底座,结果实用性大打折扣。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。