- 数据集
- NLP
- 医疗健康
【免费下载链接】opus5-5-doctor-patient-conversations-all-human-diseases
Opus5.5全疾病医患对话数据集(opus5-5-doctor-patient-conversations-all-human-diseases)覆盖2,194 种人类疾病,每条记录都是约 5,700 tokens 的完整临床对话,被官方定位为医疗 RAG 系统的"事实来源"数据集。本文带你从零搭建一套完整的医疗 RAG:如何设计索引键、如何做向量检索、如何给上下文做预算,三步走通。
📊 先认识这套数据集
数据文件只有一行说明却重达 75 MB——opus5-5diseaseconversations.jsonl 采用 JSONL 格式(一行一条记录),是构建医疗 RAG 系统的原始语料。
| 指标 | 数值 |
|---|---|
| 记录数 | 2,194 条临床问诊(覆盖 2,194 种唯一疾病) |
| 单条对话 | 平均 33.4 轮(25–59 轮),约 22,800 字符 /~5,700 tokens |
| 总对话量 | 约 1,250 万 tokens |
| 文献引用 | 6,377 条经 NCBI 实时验证的 PubMed 参考 |
| 字段结构 | 每条记录固定20 个键 |
每条记录由两部分组成:
- 结构化临床字段(逐字复制自权威来源,模型不虚构):
description、related_drugs、drug_interactions、icd10、prevalence等; - 生成的临床对话(由 Claude Opus 5.5 逐病生成并智能体验证):
conversation字段已是标准的 ChatML 格式(system/user/assistant角色交替),从接诊、检查、治疗到出院全流程,含真实生命体征、化验数值和参考范围。
💡 对 RAG 构建者来说,最有价值的两个字段是executive_summary(病例摘要)和aliases/search(同义词与检索词)——它们正是设计索引键的原材料。
🧭 获取与准备数据集
git clone https://gitcode.com/hf_mirrors/nisten/opus5-5-doctor-patient-conversations-all-human-diseases克隆后得到两个文件:
| 文件 | 说明 |
|---|---|
| opus5-5diseaseconversations.jsonl | 数据集本体(Git LFS 托管,clone 后自动拉取完整 75 MB 内容) |
| README.md | 完整数据卡片:Schema 表、RAG 构建示例、质量验证说明 |
用 Python 打开文件即可逐行json.loads读取,无需任何解析库之外的依赖。
第一步:如何设计 RAG 索引键(最关键的一步)
官方在 README.md 中给出了明确建议:
不要对整个对话做嵌入(embed)——应为每个疾病索引一个紧凑的"检索键",完整对话作为检索命中后喂给大模型的 payload。
为什么不能直接嵌入完整对话?
- 对话太长:平均 5,700 tokens,嵌入长文本既慢又会稀释语义重点;
- 噪声多:对话里充满寒暄、追问、场景细节,与"这是什么病"的检索意图无关;
- 检索不干净:向量空间里混入大量过程性文本,相似度排序会失准。
推荐的"紧凑检索键"配方
用每个记录的四个短字段拼出一段几百 tokens 以内的文本作为嵌入对象:
检索键 = name + aliases + description + executive_summary例如糖尿病酮症酸中毒(DKA)这条记录,检索键就是"疾病名 + 全部同义词 + 临床描述 + 病例摘要",语义高度聚焦,几百个 token 就够。
✅ 这样做还有额外好处:2,194 条记录 × 短文本,全量嵌入几秒就能跑完,无需任何向量数据库,一张内存里的 NumPy 矩阵就够用了。
第二步:如何做 Top-K 向量检索
索引建好后,检索就是"查询向量化 + 余弦相似度排序 + 取前 K 条"三件事:
- 用同一嵌入模型(如
BAAI/bge-small-en-v1.5等轻量模型)把用户查询编码成向量; - 与检索键矩阵做点积(向量已归一化,点积即余弦相似度);
- 取相似度最高的
k条记录,把它们的完整conversation拼成上下文。
# 简化示意:归一化向量上的余弦 Top-K q = model.encode(query) # 用户问题 top_k = (emb @ q).argsort()[::-1][:k] # 取前 k 个索引 context = "\n\n---\n\n".join( "\n".join(f"{m['role']}: {m['content']}" for m in recs[i]["conversation"]) for i in top_k ) # 把 context 和用户问题一起发给你的聊天大模型📌 检索效果小技巧:查询用症状 + 人群 + 关键体征的方式组织,例如"35 包年烟龄,咯血,体重下降,肺部肿块",与检索键中description的语义对齐度最高。
第三步:上下文预算——到底喂几条对话?
这是多数新手会踩坑的一步。由于每条对话平均5,700 tokens,能塞几条进大模型窗口是算出来的,不是拍脑袋的:
k = (模型窗口 - 提示词预留) ÷ 5700以 32k 窗口、预留 4,000 tokens 给提示词和回答为例:(32000 − 4000) ÷ 5700 ≈ 4,即最多喂 4 条对话。
📈 不同模型窗口下的 k 值速查表
| 模型上下文窗口 | 建议 k 值 | 说明 |
|---|---|---|
| 8k | k = 1 | 很紧张;建议改喂executive_summary而非完整对话 |
| 16k | k = 2 | 可用 |
| 32k | k ≤ 4 | 舒适区间 |
| 128k | k ≤ 21 | 接近全库覆盖 |
💡小窗口的替代方案:如果上下文不够宽,仍然用检索键做检索,但命中的结果不传完整对话,改传每条记录的executive_summary+ 结构化字段(药物、鉴别诊断等)。摘要只有几百 tokens,8k 窗口也能放得下 2–3 条,广度大幅提升。
为什么这套数据适合做医疗 RAG 的事实来源
- 引用可验证:全部 6,377 条 PubMed 引用逐一通过 NCBI 实时校验标题,
pubmed_refs字段按每条对话实际引用的文献重建——回答可溯源到具体 PMID; - 内部一致性:血气满足 Henderson-Hasselbalch 方程、阴离子间隙与生化面板吻合、剂量与体重匹配,减少"幻觉式数字"进入你的上下文;
- 教学性设计:每条对话恰好包含一处患者隐瞒/失实信息,且被医生礼貌地识破并纠正,天然适合训练"追问澄清"型问答助手;
- ChatML 即取即用:
conversation字段本身就是{"role", "content"}消息列表,转成 SFT 训练集只是一次字段投影(README.md 提供了两行代码的转换示例)。
⚠️注意事项:这是合成数据,仅供研究与 RAG 落地使用,不构成医疗建议;引用验证只保证文献存在且标题匹配,不保证对话中对论文的转述完全准确,关键临床事实请回溯一手文献。
总结:三步搭建你的医疗 RAG
| 步骤 | 做什么 | 关键决策 |
|---|---|---|
| 1️⃣ 索引 | 嵌入"紧凑检索键" | name + aliases + description + executive_summary,不嵌入完整对话 |
| 2️⃣ 检索 | 余弦相似度 Top-K | 查询用"症状 + 人群 + 体征"组织语言 |
| 3️⃣ 预算 | 按窗口反推 k 值 | 8k→1,16k→2,32k→4,128k→21;小窗口改喂摘要 |
整套方案对资源要求极低:2,194 条短文本嵌入 + 内存矩阵检索,消费级 CPU 就能跑通,非常适合用来快速验证你自己的医疗问答场景。祝搭建顺利 🚀
- 数据集
- NLP
- 医疗健康
【免费下载链接】opus5-5-doctor-patient-conversations-all-human-diseases
相关推荐
覆盖2194种人类疾病:Opus5.5全疾病医患对话数据集疾病清单与身体系统分布速览
覆盖2194种人类疾病:Opus5.5全疾病医患对话数据集疾病清单与身体系统分布速览 还在为训练医疗AI找不到"覆盖面广 + 质量过硬"的对话数据发愁吗?开源项
数据集NLP医疗健康Opus5.5全疾病医患对话数据集终极指南:2194种人类疾病临床对话如何一次看懂
Opus5.5全疾病医患对话数据集终极指南:2194种人类疾病临床对话如何一次看懂 Opus 5.5 全疾病医患对话数据集(opus5 5 doctor pat
数据集NLP医疗健康每段对话都埋着一个谎言:Opus5.5全疾病医患对话数据集的独特教学设计与医疗安全价值
每段对话都埋着一个谎言:Opus5.5全疾病医患对话数据集的独特教学设计与医疗安全价值 如果你正在寻找一份能直接用于医疗 AI 训练、医疗 RAG 检索的 医患
数据集NLP医疗健康
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考