View a markdown version of this page

环境文档 - Amazon Connect Health

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

环境文档

环境文档可实时捕获患者与临床医生的对话,并生成结构化的临床文档供提供者审查。该服务将语音识别与生成式人工智能相结合,以生成临床笔记、提取医学术语、识别说话者角色以及对对话片段进行分类。

重要

Amazon Connect Health 环境文档会生成概率结果。输出精度因音频质量、背景噪音、扬声器清晰度、医学术语复杂程度和特定环境语言而异。在用于患者护理之前,必须由训练有素的医疗专业人员审查所有输出结果的准确性。

Amazon Connect Health 环境文档已在美国东部(弗吉尼亚北部us-east-1)() 和美国西部(俄勒冈)(us-west-2) 地区提供。

环境文档的工作原理

环境文档使用通过 HTTP/2 或进行实时音频流 WebSocket。工作流程包括:

  1. 创建订阅-将提供商与环境文档代理关联。订阅将在激活模式下自动创建。

  2. 流式传输音频 — 您的应用程序通过或将患者与临床医生对话中的音频流式传输到 Amazon Connect Health。 HTTP/2 WebSocket该服务实时转录音频并识别说话者。

  3. 生成文档-对话结束后,该服务会根据配置的模板生成结构化的临床记录、证据映射和就诊后摘要。

  4. 检索输出 — 该服务将笔录、临床文档和就诊后摘要写入您配置的 Amazon S3 存储桶。

技术要求

  • 支持的语言 — 美国英语 (en-US)

  • 支持的音频格式 — FLAC、PCM

  • 编码 — PCM 16 位

  • 采样率 — 16,000 Hz 或更高

支持的医学专业

环境文档目前支持以下专业:

  • 过敏免疫学

  • 心脏科

  • 皮肤病学

  • 内分泌学

  • 胃肠病学

  • Hematology/Oncology

  • 传染病学

  • 肾脏病学

  • 神经科

  • 妇产科学

  • 肿瘤科

  • 眼科学

  • 骨科学

  • 耳鼻喉科学

  • 疼痛医学

  • 儿科

  • 全科

  • 精神病学

  • 呼吸病学

  • 风湿病学

  • 外科学

  • 泌尿外科

Amazon Connect Health 环境文档使用 AI 来实时捕获和转录临床对话。由于此功能记录了可能包含受保护的健康信息 (PHI) 的口头通信,因此客户及其下游集成商有责任遵守所有适用的同意、记录和隐私法。这包括在为任何患者会诊启用环境记录之前,先征得所有法律要求的同意。AWS 不会代表您征求患者的同意。

使用环境文件时,必须征得每位患者和病房内在场的任何人的适当同意。作为获得同意的一部分,应告知患者,人工智能服务提供商将记录并使用其来创建临床记录,他们的信息可能会与服务提供者共享,并且他们可以在不影响其护理的情况下拒绝就诊。客户和集成商应根据适用的州法律和内部保留政策保存患者同意记录。客户应确保根据其组织的隐私惯例获得同意。

示例语言:

“在我们开始之前,我想告诉你,今天的访问将由人工智能服务提供商记录和监控,以帮助记录文档。你同意继续吗?”

订阅管理

创建订阅

要创建订阅,请调用 CreateSubscription API 操作。这会生成一个subscriptionId唯一值,用于授权用户并开始直播会话。订阅将在激活模式下自动创建。

提示

在用户首次使用时创建订阅,以使订阅开始与实际使用量保持一致。

停用订阅

要暂时停止订阅接受新的直播会话,请调用 DeactivateSubscription API 操作。已停用的订阅会保留其配置,以后可以重新激活。 In-progress 直播正常完成。

重要

停用订阅会立即丧失剩余的免费试用期。如果在免费试用期间停用的订阅稍后重新激活,则该订阅将作为付费订阅重新激活。

重新激活订阅

可以通过调用 ActivateSubscription API 操作来重新激活已停用的订阅。subscriptionId付费计量在重新激活后立即开始。

流式传输音频

环境文档通过流媒体连接实时处理音频。您的应用程序会打开连接,将音频块作为事件编码的消息发送,并在对话进行时接收转录结果。环境文档支持两种流媒体传输: HTTP/2 和 WebSocket (wss://)。两种传输都提供相同的功能,具有相同的身份验证和授权要求、配额和限制。两个传输的会话行为(创建、流式传输和终止)是相同的。

注意

会话与启动它的传输绑定。您不能在一个传输上启动会话,而在另一个传输上恢复会话。如果您暂停并恢复会话,则恢复的会话必须使用启动会话的相同传输方式。

如果您的音频有两个声道,则可以使用频道标识来分别转录每个声道的语音。环境文档目前支持最多两个声道的音频。在您的转录中,频道被分配了标签 ch_0ch_1

除了标准的转录部分(文字记录和项目)外,启用频道标识的请求还包括 channel_labels 部分。本节包含按声道分组的每个言语或标点符号,以及与之相关的声道标签、时间戳和置信度分数。如果一个声道上的某个人与另一个声道上的一个人同时说话,则当这些人互相交谈时,每个声道的时间戳会重叠。

直播结束 HTTP/2

HTTP/2 是 AWS 开发工具包使用的流传输方式,适用于服务器端和本机应用程序。您的应用程序建立 HTTP/2 连接,将音频块和控制事件作为事件流消息发送,并通过同一连接实时接收脚本事件。当您使用 AWS 开发工具包时,该软件开发工具包会为您处理连接设置、请求签名和事件流编码。

有关详细的 HTTP/2 直播设置和事件流编码,请参阅 Amazon Connect Health API 参考

使用 AWS SDK

以下代码示例展示了如何使用适用于 Java 的 AWS SDK 2.x 来设置 Amazon Connect Health 环境文档直播会话。

package com.example.connecthealth; import io.reactivex.rxjava3.core.BackpressureStrategy; import io.reactivex.rxjava3.core.Flowable; import org.reactivestreams.Publisher; import org.reactivestreams.Subscriber; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.connecthealth.ConnectHealthAsyncClient; import software.amazon.awssdk.services.connecthealth.model.*; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.TargetDataLine; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; import java.util.Arrays; import java.util.UUID; import java.util.concurrent.CompletableFuture; public class MedicalScribeStreamingApp { private static final int CHUNK_SIZE_IN_BYTES = 6400; private static final int SAMPLE_RATE = 16000; private static final Region REGION = Region.US_WEST_2; private static final String SESSION_ID = UUID.randomUUID().toString(); private static final String DOMAIN_ID = "your-domain-id"; private static final String SUBSCRIPTION_ID = "your-subscription-id"; private static final String OUTPUT_S3_URI = "s3://your-bucket/output/"; private static ConnectHealthAsyncClient client; public static void main(String[] args) { client = ConnectHealthAsyncClient.builder() .credentialsProvider(getCredentials()) .httpClientBuilder(NettyNioAsyncHttpClient.builder()) .region(REGION) .build(); try { StartMedicalScribeListeningSessionRequest request = StartMedicalScribeListeningSessionRequest.builder() .sessionId(SESSION_ID) .domainId(DOMAIN_ID) .subscriptionId(SUBSCRIPTION_ID) .languageCode(MedicalScribeLanguageCode.EN_US) .mediaSampleRateHertz(SAMPLE_RATE) .mediaEncoding(MedicalScribeMediaEncoding.PCM) .build(); MedicalScribeInputStream endSessionEvent = MedicalScribeInputStream.sessionControlEventBuilder() .type(MedicalScribeSessionControlEventType.END_OF_SESSION) .build(); CompletableFuture<Void> result = client.startMedicalScribeListeningSession( request, new AudioStreamPublisher( getStreamFromMic(), getConfigurationEvent(), endSessionEvent ), getResponseHandler() ); result.get(); client.close(); } catch (Exception e) { System.err.println("Error occurred: " + e.getMessage()); e.printStackTrace(); } } private static AudioInputStream getStreamFromMic() throws LineUnavailableException { AudioFormat format = new AudioFormat(SAMPLE_RATE, 16, 1, true, false); DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); if (!AudioSystem.isLineSupported(info)) { throw new LineUnavailableException("Microphone line not supported"); } TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info); line.open(format); line.start(); System.out.println("Recording... Press Enter to stop"); Thread monitorThread = new Thread(() -> { try { System.in.read(); line.stop(); line.close(); } catch (IOException e) { e.printStackTrace(); } }); monitorThread.setDaemon(true); monitorThread.start(); return new AudioInputStream( new BufferedInputStream(new AudioInputStream(line)), format, AudioSystem.NOT_SPECIFIED ); } private static AwsCredentialsProvider getCredentials() { return DefaultCredentialsProvider.create(); } private static StartMedicalScribeListeningSessionResponseHandler getResponseHandler() { return StartMedicalScribeListeningSessionResponseHandler.builder() .onResponse(r -> { System.out.println("Session started: " + r.sessionId()); System.out.println("Domain ID: " + r.domainId()); System.out.println("Subscription ID: " + r.subscriptionId()); System.out.println("Request ID: " + r.requestId()); }) .onError(e -> { System.err.println("Stream error: " + e.getMessage()); e.printStackTrace(); }) .onComplete(() -> { System.out.println("=== Stream completed successfully ==="); }) .subscriber(event -> { if (event instanceof MedicalScribeTranscriptEvent) { MedicalScribeTranscriptSegment segment = ((MedicalScribeTranscriptEvent) event).transcriptSegment(); if (segment != null && segment.content() != null) { System.out.printf("[%s][Channel %s] %s%n", segment.isPartial() ? "PARTIAL" : "FINAL", segment.channelId(), segment.content() ); } } }) .build(); } private static MedicalScribeConfigurationEvent getConfigurationEvent() { return MedicalScribeConfigurationEvent.builder() .postStreamActionSettings( MedicalScribePostStreamActionSettings.builder() .outputS3Uri(OUTPUT_S3_URI) .clinicalNoteGenerationSettings( ClinicalNoteGenerationSettings.builder() .noteTemplateSettings( NoteTemplateSettings.fromManagedTemplate( ManagedTemplate.builder() .templateType(ManagedNoteTemplate.SOAP) .build() ) ) .build() ) .build() ) .channelDefinitions(Arrays.asList( MedicalScribeChannelDefinition.builder() .channelId(0) .participantRole(MedicalScribeParticipantRole.CLINICIAN) .build(), MedicalScribeChannelDefinition.builder() .channelId(1) .participantRole(MedicalScribeParticipantRole.PATIENT) .build() )) .build(); } private static class AudioStreamPublisher implements Publisher<MedicalScribeInputStream> { private final InputStream audioInputStream; private final MedicalScribeConfigurationEvent configEvent; private final MedicalScribeInputStream endSessionEvent; private AudioStreamPublisher( AudioInputStream audioInputStream, MedicalScribeConfigurationEvent configEvent, MedicalScribeInputStream endSessionEvent) { this.audioInputStream = audioInputStream; this.configEvent = configEvent; this.endSessionEvent = endSessionEvent; } @Override public void subscribe(Subscriber<? super MedicalScribeInputStream> subscriber) { createAudioFlowable() .doOnComplete(() -> { try { audioInputStream.close(); } catch (IOException e) { throw new UncheckedIOException(e); } }) .subscribe(subscriber); } private Flowable<MedicalScribeInputStream> createAudioFlowable() { Flowable<MedicalScribeInputStream> configFlow = Flowable.just( MedicalScribeInputStream.fromConfigurationEvent(configEvent) ); Flowable<MedicalScribeInputStream> audioFlow = Flowable.create(emitter -> { byte[] buffer = new byte[CHUNK_SIZE_IN_BYTES]; int bytesRead; try { while (!emitter.isCancelled() && (bytesRead = audioInputStream.read(buffer)) > 0) { byte[] audioData = bytesRead < buffer.length ? Arrays.copyOfRange(buffer, 0, bytesRead) : buffer; MedicalScribeInputStream audioEvent = MedicalScribeInputStream.fromAudioEvent( MedicalScribeAudioEvent.builder() .audioChunk(SdkBytes.fromByteArray(audioData)) .build() ); emitter.onNext(audioEvent); } emitter.onComplete(); } catch (IOException e) { emitter.onError(e); } }, BackpressureStrategy.BUFFER); Flowable<MedicalScribeInputStream> endFlow = Flowable.just(endSessionEvent); return Flowable.concat(configFlow, audioFlow, endFlow); } } }

直播结束 WebSocket

WebSocket 支持允许您从 Web 浏览器或其他 WebSocket 客户端流式传输环境文档的音频。所有 WebSocket 连接都使用 TLS (wss://)。

WebSocket endpoint

连接到您使用环境文档的区域的 WebSocket 终端节点:

Region 端点

US-EAST-1

wss://streaming.health-agent.us-east-1.api.aws/medical-scribe-stream-websocket

US-WEST-2

wss://streaming.health-agent.us-west-2.api.aws/medical-scribe-stream-websocket

对连接进行身份验证 WebSocket

您可以使用预签名 URL 对 WebSocket 连接进行身份验证。要创建预签名 URL,请使用 AWS 签名版本 4 (Sigv4) 签署 WebSocket 终端节点GET请求,并将签名参数(X-Amz-Algorithm、、、X-Amz-CredentialX-Amz-DateX-Amz-ExpiresX-Amz-Signature、和X-Amz-SignedHeaders)和会话参数嵌入为查询字符串参数。建立连接后,该服务会验证预签名 URL。如果预签名 URL 无效、已过期或未授权,则服务会通过返回错误并关闭连接来拒绝会话。

的最大值X-Amz-Expires为 60 秒(1 分钟)。建立连接后,来自预签名 URL 的签名将成为用于对每个后续事件流帧进行签名的种子签名,从而为连接的生命周期提供持续的授权。

无需执行新的 IAM 操作 WebSocket。该服务使用与 HTTP/2 流媒体相同的health-agent:StartMedicalScribeListeningSession权限来授权 WebSocket 连接。

以下示例显示了预签名 WebSocket URL 的格式。为了便于阅读,添加了换行符。

wss://streaming.health-agent.us-west-2.api.aws/medical-scribe-stream-websocket ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=<access-key>/<date>/<region>/health-agent/aws4_request &X-Amz-Date=<ISO8601-datetime> &X-Amz-Expires=60 &X-Amz-Security-Token=<session-token> &X-Amz-SignedHeaders=host &X-Amz-Signature=<signature>

对事件流帧进行签名

升级后发送的每个事件流帧——配置、音频和会话控制——都必须单独签名。每帧带有两个事件流标头::date(签名时间戳)和:chunk-signature(帧签名)。帧签名形成一个链:每个签名都是根据前一帧的签名计算出来的,而第一帧是根据预签名 URL 中的X-Amz-Signature值计算出来的。

要对帧进行签名,请使用AWS4-HMAC-SHA256-PAYLOAD算法构建待签字符串,然后使用为请求日期、区域和服务派生的 Sigv4 签名密钥 HMAC-SHA256 对其进行计算。health-agent待签字符串的格式如下:

AWS4-HMAC-SHA256-PAYLOAD <date> # signing time, ISO 8601 basic format (YYYYMMDDTHHMMSSZ) <date-stamp>/<region>/health-agent/aws4_request <prior-signature> # hex; for the first frame, the X-Amz-Signature from the presigned URL <hashed-headers> # SHA-256 hex digest of the encoded :date header <hashed-payload> # SHA-256 hex digest of the frame payload

计算签名并将其附加到框架上:

  1. signature = HMAC-SHA256(signingKey, stringToSign),编码为十六进制字符串。

  2. :date:chunk-signature标题添加到帧中,然后发送。

  3. 将其存储起来,signature并在签署下一帧<prior-signature>时将其用作签名。

签名密钥的派生方式与任何 Sigv4 请求相同:从带有前缀的私有访问密钥开始,按日期戳、区域aws4_request、服务名称 (health-agent) 进行链接。 HMAC-SHA256 AWS4

通过发送音频 WebSocket

建立连接后,发送您的会话配置,然后将音频作为二进制音频事件进行流式传输。每个都binaryAudioEvent携带一块未处理的 PCM 或 FLAC 字节。该服务通过同一连接实时返回脚本事件。要结束会话,请发送END_OF_SESSION会话控制事件。

WebSocket 客户推荐

该服务通过发送闭合帧来发出会话 WebSocket 结束的信号。设计您的客户端,使其能够优雅地处理连接关闭:

  • 等待服务器关闭帧后再关闭连接。在您发送之后END_OF_SESSION,该服务会发送所有最终的笔录结果,然后发送一个闭合帧。如果发送失败或发生错误,则该服务可能会先发送结构化错误帧,然后发送一个闭合帧。立即关闭连接可能会丢弃这些最后一条消息,因此请等待服务器关闭连接。

  • 使用关闭状态代码来确定结果。关闭代码1000(正常关闭)表示会话成功完成。任何其他关闭代码都表示错误,关闭原因提供了更多详细信息。

  • 应用限定超时作为保护措施。为避免在连接无响应时无限期等待,如果没有收到服务器关闭帧,请在合理的宽限期后关闭连接。

AWS 软件开发工具包不支持 WebSocket 流式传输。要进行直播 WebSocket,请按照本节所述直接连接到终端节点。《Amazon Connect Health API 参考》记录了 API 操作及其请求和响应参数,这些参数适用于这两种传输。

仓储服务

必须在会话开始时指定 S3 存储位置。输出工件存储在以下基础位置:

s3://{customer-provided-uri}/health-agent-listening-session/{domainId}/{subscriptionId}/{sessionId}/post-stream-action/

临床记录存储在此基础位置的clinical-notes文件夹中。

患者背景

患者情境通过 encounterContext API 参数为代理人提供对话前的临床病史。该encounterContext对象包含字段unstructuredContext,该字段为每个会话最多接受 10 KB 的文本数据。当您包括患者背景时,工程师会使用它来丰富生成的文档,其中包含在就诊期间未明确讨论的背景信息。

患者背景可能包括:

  • 之前的相遇记录和访问摘要

  • 有效药物清单

  • 问题列表和诊断

  • 过敏和免疫接种

  • 相关的实验室和成像报告

  • 外科和家族史

  • 患者首选的代词,在生成的临床结果中提及患者时使用

当笔录中不存在必要的信息时,整个生成的笔记都使用上下文来提高特异性和准确性,并将证据映射到原始材料以供临床医生审查。

注意

以下示例仅出于说明目的使用虚构的患者数据。

患者背景示例

## Patient Information Name: Patricia Underwood Age: 28 years Sex: female Pronouns: she/her MEDICATIONS: Ondansetron 4mg PO PRN - Nausea/vomiting Dicyclomine 20mg PO BID PRN - Abdominal cramping Sertraline 50mg PO daily - Depression Ferrous sulfate 325mg PO TID - Iron deficiency anemia ALLERGIES: NKDA (No Known Drug Allergies) PAST MEDICAL HISTORY: Brainstem pilocytic astrocytoma diagnosed 04/2010 Posterior fossa craniotomy with gross total resection 05/12/2010 Hyperprolactinemia diagnosed 08/2013 Autoimmune hemolytic anemia diagnosed 12/2012 Splenomegaly secondary to autoimmune hemolytic anemia 01/2013 Major depressive disorder diagnosed 08/2012 Substance use disorder (heroin) in sustained remission since 04/2011 Tobacco use disorder, quit 09/15/2013 (10 pack-year history) Iron deficiency anemia diagnosed 01/2013 Gastroesophageal reflux disease diagnosed 05/2013 Appendectomy 07/23/2009 (uncomplicated laparoscopic) Wisdom teeth extraction 11/08/2008 FAMILY HISTORY: Maternal grandmother: Cervical cancer, ovarian cancer, dementia/Alzheimer's Maternal aunt: Cervical cancer Paternal grandfather: Type 2 diabetes, hypertension, kidney transplant Maternal great-grandfather: Colon cancer Multiple maternal great-uncles: Colon cancer No family history of breast, uterine, or cardiac disease SOCIAL HISTORY: Tobacco: Former smoker, quit 09/15/2013 (10 pack-year history) Alcohol: Not documented Illicit drugs: History of IV heroin use, abstinent since 04/2011, occasional marijuana use Sexual history: Single, sexually active, monogamous relationship since 05/2012 Previous relationship with military personnel ended 03/2012 Employment: Lives independently, employed Contraception: Not currently using Former plasma donor, discontinued 10/2013 due to positive syphilis screening PROBLEM LIST: History of brainstem pilocytic astrocytoma (C71.7) - Diagnosed 04/2010 with posterior fossa craniotomy and gross total resection 05/12/2010. Annual MRI surveillance shows post-surgical changes, no residual tumor. Most recent MRI 10/18/2013 normal. Followed by neurology with annual visits. Hyperprolactinemia (E22.1) - Diagnosed 08/2013 with prolactin 45.2 ng/mL (normal <25). Referred to neurology for pituitary evaluation. Recent MRI 10/18/2013 shows normal pituitary gland. Not currently on treatment. Neurology follow-up scheduled. Autoimmune hemolytic anemia with splenomegaly (D59.1) - Diagnosed 12/2012-01/2013. Positive direct Coombs test, elevated LDH 420 U/L, low haptoglobin <10 mg/dL, reticulocyte count 8.2%. Associated splenomegaly. Managed by primary care physician. On iron supplementation for concurrent iron deficiency. Major depressive disorder, mild (F32.0) - Diagnosed 08/2012. Started sertraline 50mg daily 09/08/2012 with good response. Stable mood, no current suicidal ideation. Continues on current regimen. Substance use disorder (heroin), in sustained remission (F11.21) - History of IV drug use, abstinent since 04/2011. Not currently in formal treatment program. Maintains abstinence, occasional marijuana use. Iron deficiency anemia (D50.9) - Diagnosed 01/2013 concurrent with autoimmune hemolytic anemia. Started ferrous sulfate 325mg TID 01/14/2013. Recent Hgb 9.8 g/dL, Hct 29%, MCV 102 fL. Gastroesophageal reflux disease (K21.9) - Diagnosed 05/2013. Managed with lifestyle modifications. Symptoms of nausea and vomiting, taking ondansetron and dicyclomine PRN. RECENT LABS (Various dates 2013): Prolactin: 45.2 ng/mL (08/22/2013, elevated) CBC: Hgb 9.8, Hct 29%, MCV 102 fL (10/28/2013) Direct Coombs: Positive (01/14/2013) LDH: 420 U/L, Haptoglobin <10 mg/dL (01/14/2013) MRI brain with contrast: Normal pituitary, post-surgical changes only (10/18/2013) Pap smear: Normal cytology, HPV negative (11/15/2012) Mammogram: BI-RADS 1, normal (02/28/2013)

临床记录模板

模板定义了代理在生成临床文档时遵循的结构、章节和格式规则。您必须通过在每个会话中将配置对象传递给 noteTemplateSettings API 参数来指定输出格式。Ambient 文档支持两种指定输出格式的方法:托管模板或自定义模板。

托管模板

环境文档提供了七个预先构建的笔记模板。托管模板的配置对象通过templateType参数指定模板。managedTemplate默认模板是 HISTORY_AND_PHYSICAL。

模板 说明 使用案例

历史记录和物理记录(默认)

关键临床文件章节摘要

一般身体健康遭遇

物理肥皂

以身体健康为重点的 SOAP 格式

使用 SOAP 结构遇到身体健康问题

行为肥皂

以行为健康为重点的 SOAP 格式

使用 SOAP 结构遇到行为健康问题

GIRPP

Progress-toward-goals 格式

行为健康-跟踪患者进展

BIRP

行为模式和反应格式

行为健康 — 记录行为模式

SIRP

治疗格式的情境背景

行为健康 — 强调情境背景

DAP

简化的临床文件格式

短暂或有针对性的接触

历史和物理部分

部分 说明

主诉

简要描述患者去看临床医生的原因

现病史

有关患者病情的信息,包括严重程度、发病时间、当前治疗方法和受影响区域

系统审查

Patient-reported 评估不同身体系统的症状

既往病史

既往的医疗状况、手术和治疗

过去的家族史

患者家属中常见的健康状况

过去的社会历史

影响健康的社交生活、习惯、职业和环境因素

体格检查

临床医生通过身体系统和生命体征检查得出的结果

诊断测试

实验室检查、影像学研究和其他诊断程序的结果和解释

评测

临床医生对患者健康状况的评估

计划

Clinician-recommended 药物治疗、生活方式调整和进一步预约

“物理肥皂” 和 “行为肥皂” 部分

部分 说明

主观资料

患者的目标、经历以及现有和过去的问题

目标

有关患者的数据和事实

评测

临床医生对患者情况的诊断

规划

Clinician-recommended 治疗的后续步骤,包括未来的干预措施和转诊

注意

PHYSICAL_SOAP 针对身体健康记录进行了优化。BEHAVIORAL_SOAP 针对行为健康文档进行了优化。两者共享相同的章节结构。

GIRPP 版块

部分 说明

Goal

通过治疗需要解决的问题、挑战或行为

干预措施

临床医生使用的具体治疗方法、方法或技术

响应

患者对干预措施的反应,包括参与程度和反馈

Progress

临床医生对实现治疗目标的评估

规划

Clinician-recommended 治疗的后续步骤,包括未来的干预措施、家庭作业和转诊

BIRP 版块

部分 说明

行为

患者出现的问题及其对治疗的反应

干预措施

临床医生使用的具体治疗方法、方法或技术

响应

患者对干预措施的反应

规划

治疗的后续步骤

SIRP 栏目

部分 说明

情况

患者提出的问题及其寻求治疗的目标

干预措施

临床医生使用的具体治疗方法、方法或技术

响应

患者对干预措施的反应

规划

Clinician-recommended 治疗的后续步骤

DAP 部分

部分 说明

数据

患者寻求治疗的原因和有关患者的信息

评测

临床医生对患者情况的诊断

规划

Clinician-recommended 治疗的后续步骤

自定义模板

环境文档使用双层自定义模型:基本和输出规范。这两个层是在一个配置对象中管理的customTemplatecustomTemplate配置对象包含两个参数:templateType设置基础模板和templateInstructions包含输出规范。

基础 (templateType) 设置对话期间检测到的临床事实的组织结构。支持以下基础模板:

Base 说明 使用案例

历史和物理

关键临床文件章节摘要

一般身体健康遭遇

行为肥皂

以行为健康为重点的 SOAP 格式

使用 SOAP 结构遇到行为健康问题

GIRPP

Progress-toward-goals 格式

行为健康-跟踪患者进展

BIRP

行为模式和反应格式

行为健康 — 记录行为模式

SIRP

治疗格式的情境背景

行为健康 — 强调情境背景

DAP

简化的临床文件格式

短暂或有针对性的接触

Output Specification 对象 (templateInstructions) 以指令数组的形式组织sectionHeader,其中定义了章节名称,并结合了sectionInstructions该部分的说明和模板。

自定义指令可以包括三种类型的指令:

  • 详细说明 — 控制内容的简洁性或详细程度。示例:“用 1 句或更短的句子描述主要投诉。”

  • 模板使用说明 — 指导代理如何处理模板与遭遇内容之间的不对齐情况。示例:“完全遵循模板:如果请求的数据不可用,请写入 “未找到信息”。

  • 风格说明-指定格式、术语和推理要求。示例:“在评估部分使用已编号的问题。”

模板可以作为带有占位符、结构化的 JSON 架构或示例之前的注释的文本形式提供。

方法 说明 使用场景

带占位符的文本模板

包含章节标题和占位符字段(例如<chief_complaint>)的模板,由代理在遭遇时填写

你想精确控制分区布局和内容放置

结构化 JSON 模板

定义字段、嵌套和按字段格式设置规则的 JSON 架构

您的电子健康纪录需要结构化数据输出,而不是散文

前面的注释示例

提供先前的临床记录作为所需格式和风格的参考

提供商想要与其现有文档模式相匹配的笔记

注意

该服务是无状态的。要使用之前的注释作为样式参考,您的应用程序必须将其包含在每个会话的说明中。代理不会在会话之间保留提供商首选项。

自定义说明示例

以下示例显示了使用customTemplate配置对象的 SOAP 注释的自定义指令。

{ "clinicalNoteGenerationSettings": { "noteTemplateSettings": { "customTemplate": { "templateType": "HISTORY_AND_PHYSICAL", "templateInstructions": [ { "sectionHeader": "Subjective", "sectionInstruction": "You will be generating a SOAP note one section at a time, starting with the `S` section. Please use this template when generating the `S` section:\n<template>\nSUBJECTIVE:\nChief Complaint: <Brief statement, in patient's own words, if available>\nHistory of Present Illness: <Narrative description of current symptoms, onset, duration, quality, severity, timing, context, modifying factors, associated symptoms.>\nReview of Systems:\n• Constitutional: <fever, chills, weight changes, fatigue>\n• Cardiovascular: <chest pain, palpitations, shortness of breath>\n• Respiratory: <cough, dyspnea, wheezing>\n• GI: <nausea, vomiting, diarrhea, constipation, abdominal pain>\n• GU: <dysuria, frequency, urgency, hematuria>\n• Musculoskeletal: <joint pain, muscle weakness, back pain>\n• Neurological: <headache, dizziness, numbness, weakness>\n• Psychiatric: <mood changes, anxiety, sleep disturbances>\n• All other systems negative unless noted above Past Medical History: <List chronic conditions>\nPast Surgical History: <List previous surgeries with dates>\nMedications: <Current medications with doses>\nAllergies: <Drug allergies and reactions, or NKDA>\nSocial History: <Tobacco, alcohol, drugs, occupation, living situation>\nFamily History: <Relevant family medical history>\n</template>" } ] } } } }

模板最佳实践

该代理通过精心设计的模板实现了 97.7% 的平均布局依从性。

  • 使用已命名的章节标题定义笔记结构。使用一致的分隔符,按名称列出所需笔记的每个部分。该模型使用这些标题作为结构锚点,将内容放置在正确的位置。

  • 使用描述性占位符来解释每个部分的内容。例如 Chief Complaint: <Brief statement in patient’s own words, if available>

  • 枚举多部分字段的预期小节。对于跨越多个类别(例如身体系统或问题列表)的章节,请使用代表性值明确列出它们以指示范围。

  • 优雅地处理缺失的信息。在占位符中使用诸如 “如果可用” 或 “如果适用” 之类的措辞来表示当遭遇不产生相关内容时,可以省略某个部分。

  • 跨访问类型测试模板。适用于后续就诊的模板可能不适合新患者见面或健康检查。在广泛部署之前,请根据具有代表性的遭遇样本验证您的模板。

输出

环境文档生成三个输出文件:

转录文件

笔录文件包含带有单词级时间戳的逐向转录。Amazon Connect Health 增加了参与者角色检测功能,将每位发言者标记为临床医生或患者。如果对话的每个类别中有多个参与者,则会为每个参与者分配一个数字(例如,CLINICIAN_0CLINICIAN_1)。

临床文件和证据映射文件

临床文档文件包含从患者与临床医生的对话中生成的结构化临床记录,以及将每份生成的陈述与对话记录或患者情境输入中的来源联系起来的部分。

该文件遵循会话开始时提供的托管模板或自定义说明。每个部分可以包含访问派生的内容(来自对话)和情境衍生的内容(来自患者情境输入)。支持多种输出格式: prose/free-text 和结构化 JSON,具体取决于模板配置。证据映射部分使临床医生能够验证任何 AI-generated 内容的来源。每个映射条目都包含生成的句子和源 transcript/context 引用。

After-visit 摘要文件

就诊后的摘要文件包含以通俗易懂的语言编写的面向患者的摘要,供临床医生审查和定稿。它包括对就诊的简单语言描述、当前药物的剂量和频率、临床医生的随访说明以及针对患者的行动项目。

摘要是根据临床文档文件生成的,而不是直接从笔录中生成的,从而确保了临床记录和面向患者的摘要之间的一致性。

有关完整的 API 参数详情、 request/response 架构和直播设置说明,请参阅 Amazon Connect Health API 参考