介绍 SymptomCheck Bench
2024 年 11 月 2 日 | Klemen Vodopivec, Rok Vodopivec, Nejc Završan
Overview
在我们之前的博客文章中,我们强调了需要更现实、具有自主性的基准测试在医疗 AI 评估中的需求。今天,我们介绍了 SymptomCheck Bench,这是我们为解决这一挑战迈出的第一步。
SymptomCheck Bench 是一个基于 OSCE(模拟临床评估)风格的基准测试,旨在测试基于大语言模型(LLM)的文本对话患者诊断准确性。我们选择了这个名称,因为我们在评估任务中紧密地模仿了症状检查器的应用功能( 2),即从用户那里提取症状信息,并根据这些症状生成可能的医疗状况。
在本文中,我们将:
解释 SymptomCheck Bench 的工作原理,并描述其关键组件。
展示 MedAsk 与传统症状检查器的对比结果。
讨论基准的局限性,并探讨未来改进的潜力。
我们相信透明度在医疗领域至关重要。因此,我们已将整个基准,包括代码和数据,免费发布在 GitHub(3)。我们鼓励医学人工智能社区与 SymptomCheck Bench 互动并参与其持续发展。
SymptomCheck 基准描述
SymptomCheck Bench 遵循一个结构化的四步流程,如图 1 所示。
初始化:从预定义的案例集选取一个临床案例,为患者模拟器提供临床细节。
对话:症状检查器代理和患者模拟器进行基于文本的对话,模拟真实的症状评估对话,其中代理提出问题,患者根据临床案例数据提供答案。
诊断:一旦症状检查器代理收集到足够的信息,它会生成五个最可能的替代诊断(DDx)。
评估:评估代理将 DDx 列表与从选定临床案例中提取的地面真相诊断进行比较,以评估症状检查代理的表现。

图 1:SymptomCheck Bench 工作流程(在 BioRender.com 创建)
Symptom Checker Agent
SymptomCheck Bench 的核心是 Symptom Checker Agent,这是正在评估的 AI 系统。其主要任务包括:
与模拟患者进行基于文本的对话。
提出相关问题以收集症状、医疗历史和其他临床细节。
根据收集的数据生成差错诊断(DDx)。
代理在对话结束前只能问 12 个问题,因为更长的对话实际上会降低诊断准确性(4)。支持的各种大型语言模型作为代理的基础引擎,包括 GPT 系列、Mistral、Claude、DeepSeek 等。附录 A 展示了症状检查代理的提示指令。
根据我们的透明度承诺,我们已在 GitHub 上发布了 MedAsk 的一个较旧版本(3),作为 SymptomCheck Bench 的症状检查代理。这个版本用于与其他症状检查器进行比较测试,并为评估未来版本的 MedAsk 提供了一个基准。对于未来的版本,将提供一个 API,允许任何人使用 SymptomCheck Bench 框架来测试 MedAsk。
Patient Agent
患者代理基于临床案例中的场景,使用 GPT-4o 作为基础语言模型进行模拟。其任务如下:
从案例中提取主要症状,开始与首席医生的对话。
使用 vignette 中的数据回答后续问题。
如果被问到 vignette 中未包含的信息,回答为“我不知道”。
重要的是,患者代理不会被提供其真实诊断,以防止对话中信息泄露。附录 B 展示了患者代理的提示指令。
我们从 Hammoud 等人的研究中获取了临床案例,该研究比较了六种不同症状检查器的诊断准确性。他们的工作提供了 400 个开放源代码的案例,涵盖了广泛的临床场景。有关这些案例的更详细描述及其创建过程,请参见原始出版物(5)。
图 2 展示了一个示例情节及其基于该情节的患者代理与症状检查代理(MedAsk)之间的模拟对话。

图 2:示例临床案例(左)和模拟患者-MedAsk 对话(右)。
Evaluator Agent
对话结束时,症状检查器代理返回五个最可能的诊断列表。这个列表随后自动与评估者代理从故事中获得的基准诊断进行比较,该评估者使用 GPT-4o 作为其基础模型。评估者确定基准诊断是否出现在 DDx 列表中以及在什么位置,即 top-k 诊断准确性。
在开发评估代理时,一个关键挑战是选择一个能够反映疾病命名多样性的评价提示。我们采用了由 Tu 等人(6)的研究中提出的疾病匹配定义,这些定义列在表 1 中。只有当诊断满足“精确匹配”或“极其相关”的定义时,才被视为匹配,我们认为这在严格性和实用性之间找到了最佳平衡。用于评估的完整提示可以在附录 C 中找到。
Degree of Matching | Description |
Unrelated |
|
Somewhat Related |
|
Relevant |
|
Extremely Relevant |
|
Exact Match |
|
表 1:DDx 与真实诊断之间的匹配度,来自(6)。
我们用于这个基准的自动评估方法可能被看作是一个潜在的弱点。然而,最近的研究(6, 7)表明,这些方法在类似的情境中与人类评分高度一致。
为了确保我们的方法的稳健性,我们引入了人类专家参与进来。我们手动评估了 100 个临床案例中真实诊断与 MedAsk 输出之间的匹配情况,由三名不同的医学专家进行。我们将他们的评估结果与我们的评估代理的结果进行了比较,使用上述描述的匹配标准。如表 2 所示,在人专家和 LLM 基础的评估之间存在显著的一致性。
Comparison |
|
Overall Agreement | 0.9199 (< 0.001) |
Pairwise Agreements | |
| 0.9927 (< 0.001) |
| 0.9544 (< 0.001) |
| 0.9081 (< 0.001) |
Expert 1 vs Expert 2 | 0.9617 (< 0.001) |
Expert 1 vs Expert 3 | 0.8252 (< 0.001) |
Expert 2 vs Expert 3 | 0.8771 (< 0.001) |
表 2:人类专家评估和自动评估的互评一致性。
MedAsk 性能与现有症状检查器的比较
我们通过使用 GPT-4o 作为基础模型的 MedAsk 进行了评估,共运行了五次,覆盖所有 400 个临床案例(结果可在 GitHub 上找到)。平均诊断准确性结果为:
正确诊断为首选(正确诊断):58.3%
正确诊断在前三个选项中的前三名:78.7%
前五(在前五个选项中正确诊断):82.0%
使用来自(5)的案例研究的一个显著优势是,它们的研究已经为六种不同的商业症状检查器在相同临床场景下的基准性能指标奠定了基础。 尽管我们评估方法(自动化患者模拟和评估)与他们的人类互动和评估方法之间存在差异(见他们研究的方法部分),但我们认为这种比较为 MedAsk 的相对表现提供了有价值的见解。图 3 显示了从研究中表现最好的五个症状检查器的结果(Avey, Ada, WebMD, K Health 和 Buoy),以及 MedAsk。

图 3:MedAsk 与现有症状检查器在诊断准确性方面的比较,涵盖前 1、前 3 和前 5 诊断。
如图 3 所示,MedAsk 在现有症状检查器中表现出令人印象深刻的表现:在所有指标上排名第二,超越了 Avey,在准确性方面表现最佳,比 Ada 的准确性提高了两倍。
鉴于 MedAsk 的开发时间表,这次表现尤其值得重视。虽然已建立的症状检查器在至少七年的时间里经历了开发和改进,而 MedAsk 在短短六个月的时间里就达到了这些成果。这种快速进展展示了基于 LLM 方法在症状评估中的巨大潜力。根据我们最新版本的持续改进,我们预计未来评估中会取得更强的表现。
限制和未来工作
SymptomCheck Bench 的当前实现存在几个重要的局限性,这些局限性需要在未来的工作中得到解决。首先,我们依赖于一个 LLM 基础的患者模拟器,虽然实用,但引入了潜在的偏见,这些偏见尚未完全被研究。我们尚未进行系统比较我们的模拟患者反应与通常用于类似研究中的患者角色之间的差异。 此外,不同基础模型对患者模拟器的影响尚未得到充分探索,尽管最近的一项研究(4)表明,选择语言模型可以显著影响模拟互动的性质和质量。
虽然 MedAsk 和类似的系统通常提供初步建议和治疗计划,但 SymptomCheck Bench 并不评估这些能力。此外,该基准测试并未评估咨询过程中的重要质性方面(8),如信息收集的效率、对患者的同情展示或在代理人的回应中出现的幻觉和事实错误的频率。
第三,使用公开可用的临床案例片段可能引发数据污染的担忧,因为这些场景中的一些可能已经包含在大语言模型(LLM)的训练数据中,这可能导致性能指标被高估。当前的 400 个案例片段虽然有价值,但也仅覆盖了可能存在的医疗状况(9)。 基准的未来迭代将从扩展 vignette 数据库和确保使用新颖的临床场景开始,这些场景在 LLM 训练数据中是不可验证的。
最后,在实验的初期阶段,我们对 Mixtral、Mistral Large、DeepSeek V2.5、Claude 3 Opus、Claude 3.5 Sonnet,GPT-3.5 和 GPT-4o 进行了范围较小的基准测试。考虑到 GPT-4o 的出色表现和我们的财务限制,我们集中评估了这个模型。 广泛地对其他模型进行基准测试,或如 o1 这样的较新版本,可能为了解底层模型能力与诊断准确性之间的关系提供有价值的见解。
Sources
- OSCE Definition – https://geekymedics.com/what-is-an-osce/ (Accessed October 20, 2024)
- WebMD Symptom Checker – https://symptoms.webmd.com/ (Accessed October 20, 2024)
- SymptomCheck Bench GitHub – https://github.com/medaks/symptomcheck-bench
- Schmidgall, Samuel, et al. “AgentClinic: a multimodal agent benchmark to evaluate AI in simulated clinical environments.” arXiv preprint arXiv:2405.07960 (2024).
- Hammoud M, Douglas S, Darmach M, Alawneh S, Sanyal S, Kanbour Y. Evaluating the Diagnostic Performance of Symptom Checkers: Clinical Vignette Study. URL: https://ai.jmir.org/2024/1/e46875
- Tu, Tao, et al. “Towards conversational diagnostic ai.” arXiv preprint arXiv:2401.05654 (2024).
- Lan, Tian, et al. “Criticbench: Evaluating large language models as critic.” arXiv preprint arXiv:2402.13764 (2024).
- Yao, Zonghai, et al. “MedQA-CS: Benchmarking Large Language Models Clinical Skills Using an AI-SCE Framework.” arXiv preprint arXiv:2410.01553 (2024).
- Kopka, Marvin, et al. “Evaluating self-triage accuracy of laypeople, symptom-assessment apps, and large language models: A framework for case vignette development using a representative design approach (RepVig).” medRxiv (2024): 2024-04.
Appendix
A) Symptom Checker Agent Prompt Instructions
You are a doctor diagnosing through an online chat platform a patient with the following characteristics {DEMOGRAPHICS}.
You will ask the patient concise questions (1-3 sentences at a time) in order to understand their disease. After gathering sufficient information, finish the conversation by writing chosen diagnoses in this format:
DIAGNOSIS READY: [diagnosis1, diagnosis2, diagnosis3, diagnosis4, diagnosis5]
Below is the dialogue history. Provide the doctor’s response.
{DIALOGUE_HISTORY}
B) Patient Agent Prompt Instructions
You are a patient with the following background:
DEMOGRAPHICS: {DEMOGRAPHICS}
HISTORY: {HISTORY_OF_ILLNESS}
PRIMARY COMPLAINTS: {PRIMARY_COMPLAINTS}
ADDITIONAL DETAILS: {ABSENT_FINDINGS, PHYSICAL_HISTORY, FAMILY_HISTORY, SOCIAL_HISTORY}
You are visiting a doctor because of your PRIMARY COMPLAINTS. A doctor will ask you questions to diagnose your condition. Provide concise answers of 1-3 sentences, sharing only the relevant information based on your background. If the doctor asks about something not mentioned in the background, simply reply ‘I don’t know.’
Below is the dialogue history. Provide the patient’s response.
{DIALOGUE_HISTORY}
C) Evaluator Agent Prompt Instructions
Given a list of differential diagnoses and the correct diagnosis, determine if any of the diagnoses in the list are either an exact match, or very close, but not an exact match to the correct diagnosis.
If any diagnosis meets these criteria, specify its position, starting from 1. If none of the diagnoses meet these criteria, write -1.
Respond in the following format: Correct diagnosis position: [number]
OBTAINED DIAGNOSES: {DDX_LIST}
CORRECT DIAGNOSIS: {GROUND_TRUTH_DIAGNOSIS}