Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
虚拟护理和 AI 医生所需的数据
虚拟就诊作为 FHIR R4 数据 — 预约、录入、家庭读数、就诊、随访 — 以及 AI 助手如何获得已获同意、带来源标签的视图。已测试流程。
虚拟诊所 — 无论是视频中的临床医生还是协助他们的 AI 助手 — 其质量仅取决于就诊前、就诊中和就诊后能够看到的患者数据:最近的测量值、活动性问题和用药、患者报告的内容以及所做决定的记录。 视频通话是比较容易的部分。本页将虚拟就诊映射到 HL7 FHIR R4 资源,展示了如何为 AI 助手提供经过同意、带有来源标签的记录视图,并在 Anpheros Platform 上运行整个流程,包括我们在执行过程中发现的一个限制。
虚拟就诊即数据
| 阶段 | 发生的事情 | FHIR R4 资源 |
|---|---|---|
| 预约 | 患者选择视频就诊时间 | Appointment |
| 问诊 | 患者回答问题并报告症状 | QuestionnaireResponse, Observation (category symptom) |
| 家庭数据 | 自上次就诊以来血压计、体重秤或手表读数 | Observation (vital signs, activity), marked as device data |
| 准备 | 临床医生或为其服务的 AI 助手,审阅记录 | read: Condition, MedicationStatement, AllergyIntolerance, Observation, DocumentReference |
| 就诊 | 谁、何时、为何以及是虚拟就诊 | Encounter with class = VR (virtual) |
| 结果 | 诊断、药物变更、开具的检查、随访 | Condition, MedicationStatement, ServiceRequest, CarePlan, Appointment |
| 追踪 | 谁编写了每项内容,来自哪个系统 | Provenance on every write |
与面对面就诊相比,有两点不同。临床医生更依赖患者生成的数据(家庭读数、问卷),因此记录必须显示哪些值来自设备或患者,哪些来自临床医生。准备阶段是 AI 当今最有用的地方——将数月的读数总结为变化的内容——因此记录必须在患者同意的情况下可供软件读取。
AI 的定位及其应看到的数据
| AI 角色 | 所需数据 | 不应获取的数据 |
|---|---|---|
| 录入助手(就诊前与患者交流) | 活动性问题和用药情况,以便提出相关问题 | 不需要的文件和记录 |
| 临床医生就诊前摘要 | 近期测量趋势、新症状、用药变更、近期结果 | 超出问题范围的多年历史记录 |
| 就诊后文档草稿 | 就诊情况、讨论内容、结果 | 其他患者的数据,任何时候 |
| 后续随访 | 护理计划和所需测量值 | 计划之外的任何内容 |
通用规则:为每个 AI 角色提供最小的数据片段以回答其问题,标记每个值的来源,以便模型和临床医生能够权衡家庭读数与实验室结果,记录每次读取以便患者可以看到 AI 看到的内容,并为任何诊断性操作保持人工监督。进行诊断或推荐治疗的 AI 可能被视为医疗器械软件(在美国由 FDA 管辖;在欧盟根据医疗器械法规和人工智能法案管辖);数据平台不会改变这一点。
Anpheros 上的流程,分步说明
下面的代码使用了 Anpheros TypeScript SDK,并在带有沙盒密钥的本地平台实例上运行。患者已经有来自血压计 (author_type: device) 的三次家庭血压读数、高血压作为一种病症以及依那普利作为一种药物。
import { Anpheros, apiKey } from '@anpheros/sdk';
const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });
const subject = { reference: `Patient/${patientId}` };
// 1. Before the visit: the booking and the intake questionnaire
await anpheros.fhir.create({ resourceType: 'Appointment', status: 'booked', description: 'Video visit: blood pressure follow-up',
start: '2026-10-14T15:00:00-05:00', end: '2026-10-14T15:20:00-05:00',
participant: [{ actor: subject, status: 'accepted' }] } as any);
await anpheros.fhir.create({ resourceType: 'QuestionnaireResponse', status: 'completed', subject, authored: '2026-10-14T09:12:00-05:00',
item: [
{ linkId: 'reason', text: 'What would you like to discuss?', answer: [{ valueString: 'Higher readings this week and dizziness in the morning' }] },
{ linkId: 'missed-doses', text: 'Did you miss any doses in the last 7 days?', answer: [{ valueBoolean: false }] },
] } as any, { author_type: 'patient' });
// The symptom itself, as a patient-reported Observation, so it reaches the context below
await anpheros.observations.create(patientId, { code: 'R42', system: 'http://hl7.org/fhir/sid/icd-10', display: 'Dizziness and giddiness',
category: 'symptom', effective_at: '2026-10-13T07:45:00-05:00', value_text: 'Dizzy for a few minutes after getting up', author_type: 'patient' });
// 2. What the clinician (or an AI assistant helping them) reads: a budgeted, source-labelled context
const ctx = await anpheros.context.build({ patient: patientId, task: 'prepare a video visit',
question: 'blood pressure trend and dizziness in the last 2 weeks', budget_tokens: 700, format: 'text' });
// 3. After the visit: the encounter, written as the clinician
const encounter = await anpheros.fhir.create({ resourceType: 'Encounter', status: 'finished',
class: { system: 'http://terminology.hl7.org/CodeSystem/v3-ActCode', code: 'VR', display: 'virtual' },
subject, period: { start: '2026-10-14T15:02:00-05:00', end: '2026-10-14T15:18:00-05:00' },
reasonCode: [{ text: 'Blood pressure follow-up' }] } as any, { author_type: 'practitioner', source_system: 'video-clinic' });
第二步返回的上下文(700 个 token 中的第 487 个;这就是您会放在模型前面或展示给临床医生的内容):
## Summary
Maria Lopez, 58 y, female. Active conditions: Essential (primary) hypertension. Active medications: Enalapril 10 mg.
Allergies: none recorded. Record: 0 lab values, 3 vital signs, 0 documents. As of 2026-10-13.
## Vitals
- Blood pressure panel: latest 2026-10-12 146/90 mm[Hg] ; weekly 2026-10-05: 150/93.5; 2026-10-12: 146/90 [device]
## Symptoms
- Dizziness and giddiness: 1 occurrence(s): 2026-10-13 [patient]
## Timeline
- 2026-10-13 symptom: Dizziness and giddiness: Dizzy for a few minutes after getting up [patient]
每一行都带有其来源 — 血压计为 [device],症状为 [patient] — 并且读数被记录在访问日志中。就诊的来源显示为来自 video-clinic 的 practitioner,患者的时间线现在显示为:虚拟就诊、视频就诊预约、头晕、三次血压读数、药物和病症。
我们在运行过程中发现的问题: 上下文 API 今天不包含 QuestionnaireResponse 的答案。第一次运行,仅在问卷中包含头晕信息,生成的摘要中并未提及。将患者报告的症状记录为 Observation,类别为 symptom(如上),或者自行将问卷传递给您的模型。
授予 AI 代理访问权限并获得同意
当 AI 在他人的应用程序中运行时,它不会获得您的项目密钥。该应用程序通过 OAuth 2.1 和 SMART on FHIR 向患者征求同意,范围限定在 patient/Observation.rs?category=vital-signs 以内,有效期固定,可随时撤销。代理还可以通过 Anpheros MCP 服务器访问记录,除非患者允许更多,否则为只读。请参阅 如何授予 AI 代理访问医疗记录的权限 和 FHIR MCP 服务器。
Anpheros 的功能和局限性
Anpheros 提供记录及其周边控制:上表中所有资源的 FHIR R4 存储、每个应用的授权、每次写入的溯源信息、患者可查看的访问日志,以及将记录转化为预算化、标签化摘要以供模型使用的上下文 API。
它不提供视频通话、日程安排界面、电子处方、计费或临床决策支持,也不托管或选择 AI 模型。基于 Anpheros 构建的虚拟诊所需要自行实现这些功能,并承担相应的临床责任。
常见问题解答
什么是虚拟医生?
指通过视频、电话或消息远程看诊患者的临床医生。该术语也用于会与患者交谈的 AI 助手;实际上,这些助手是协助人类临床医生,而不是取代他们,并且依赖于相同的患者数据。
哪个 FHIR 资源将就诊标记为虚拟?
Encounter.class,其 v3 ActCode 为 VR(“virtual”)。预约是 Appointment;就诊是 QuestionnaireResponse,而对于症状,则是 Observations。
AI 医疗助手需要哪些数据?
仅需要其任务所需的数据:对于就诊前摘要,需要最近的测量趋势、新症状、活动性问题和药物,以及最近的结果 — 每项都标有其来源和时间。为其提供一个预算范围内的上下文,而不是整个记录。
如何将患者报告和设备数据与临床数据分开?
记录谁编写了每项内容。在 Anpheros 中,每次写入都带有作者类型 — 患者、设备、执业者、导入或 AI — 并且提供给模型的上下文会用它来标记每一行。
AI 助手能否在未经患者同意的情况下读取患者记录?
在 Anpheros 上不能。除创建记录的应用程序之外的应用程序需要患者的 OAuth 同意,该同意仅限于他们选择的范围和期限,并且每次读取都会出现在其访问日志中。
相关资源
- AI 医疗保健应用
- 如何使用 FHIR 后端构建 AI 医疗保健应用
- 如何使用结构化数据构建医疗聊天机器人
- FHIR 中的可穿戴设备数据:虚拟就诊所依赖的家庭读数
- 如何构建个人健康记录应用
- 医疗数据溯源详解
- 使用 FHIR 进行远程患者监控
- 医疗应用和 AI 代理的用药数据
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card