View a markdown version of this page

주변 설명서 - Amazon Connect Health

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

주변 설명서

주변 설명서는 환자-의사 대화를 실시간으로 캡처하고 공급자 검토를 위한 구조화된 임상 설명서를 생성합니다. 이 서비스는 음성 인식과 생성형 AI를 결합하여 임상 노트를 생성하고, 의학 용어를 추출하고, 화자 역할을 식별하고, 대화 세그먼트를 분류합니다.

중요

Amazon Connect Health 앰비언트 설명서는 확률적 결과를 생성합니다. 출력 정확도는 오디오 품질, 배경 노이즈, 화자 명확성, 의학 용어 복잡성 및 컨텍스트별 언어에 따라 달라집니다. 환자 진료에 사용하기 전에 훈련된 의료 전문가가 모든 출력의 정확성을 검토해야 합니다.

Amazon Connect Health 주변 설명서는 미국 동부(버지니아 북부)(us-east-1) 및 미국 서부(오레곤)(us-west-2) 리전에서 사용할 수 있습니다.

주변 설명서 작동 방식

주변 설명서는 HTTP/2 또는 WebSocket을 통한 실시간 오디오 스트리밍을 사용합니다. 워크플로에는 다음이 포함됩니다.

  1. 구독 생성 - 공급자를 주변 설명서 에이전트와 연결합니다. 구독은 활성화된 모드에서 자동으로 생성됩니다.

  2. 오디오 스트리밍 - 애플리케이션이 HTTP/2 또는 WebSocket을 통해 환자-클리니션 대화의 오디오를 Amazon Connect Health로 스트리밍합니다. 서비스는 오디오를 실시간으로 트랜스크립션하고 화자를 식별합니다.

  3. 설명서 생성 - 대화가 끝나면 서비스는 구성된 템플릿을 기반으로 구조화된 임상 노트, 증거 매핑 및 방문 후 요약을 생성합니다.

  4. 출력 검색 - 서비스는 구성된 Amazon S3 버킷에 트랜스크립트, 임상 설명서 및 방문 후 요약을 작성합니다.

기술 요구 사항

  • 지원되는 언어 - 미국 영어(en-US)

  • 지원되는 오디오 형식 - FLAC, PCM

  • 인코딩 - PCM 16비트

  • 샘플 속도 - 16,000Hz 이상

지원되는 의료 전문 분야

주변 설명서는 현재 다음 전문 분야를 지원합니다.

  • 알레르기 면역학

  • 심장학

  • 피부과학

  • 내분비학

  • 위장병학

  • 혈액학/종양학

  • 감염 질병

  • 신장병학

  • 신경학

  • 산부인과

  • 종양학

  • 안과학

  • 정형외과

  • 이비인후과

  • 통증 의학

  • 소아과학

  • 1차 의료

  • 정신의학

  • 호흡기학

  • 류마티스학

  • 외과

  • 비뇨기과

Amazon Connect Health 앰비언트 설명서는 AI를 사용하여 임상 대화를 실시간으로 캡처하고 트랜스크립션합니다. 이 기능은 보호 대상 건강 정보(PHI)를 포함할 수 있는 음성 통신을 기록하므로 고객과 다운스트림 통합자는 모든 해당 동의, 기록 및 개인 정보 보호법을 준수할 책임이 있습니다. 여기에는 환자 진료에 대한 주변 문서를 활성화하기 전에 모든 법적 필수 동의를 받는 것이 포함됩니다. AWS는 사용자를 대신하여 환자의 동의를 수집하지 않습니다.

주변 문서를 사용할 때는 각 환자 및 방에 있는 모든 사람으로부터 적절한 동의를 얻어야 합니다. 동의를 얻는 과정에서 AI 서비스 공급자는 방문을 기록하고 사용하여 임상 기록을 생성하고, 해당 정보를 서비스 공급자와 공유할 수 있으며, 진료에 영향을 주지 않고 거부할 수 있음을 환자에게 알려야 합니다. 고객과 통합자는 관련 주법 및 내부 보존 정책에 따라 환자 동의 기록을 유지해야 합니다. 고객은 조직의 개인 정보 보호 관행에 따라 동의를 얻어야 합니다.

샘플 언어:

“시작하기 전에 문서 작성을 돕기 위해 AI 서비스 공급자가 오늘의 방문을 기록하고 모니터링할 것임을 알려 드립니다. 계속 진행하는 데 동의하나요?"

구독 관리

구독 생성

구독을 생성하려면 CreateSubscription API 작업을 호출합니다. 이렇게 subscriptionId하면 사용자에게 권한을 부여하고 스트리밍 세션을 시작하는 데 사용하는 고유한가 생성됩니다. 구독은 활성화된 모드에서 자동으로 생성됩니다.

작은 정보

사용자의 첫 번째 사용 시 구독을 생성하여 구독 시작을 실제 사용으로 조정합니다.

구독 비활성화

구독이 새 스트리밍 세션을 수락하지 못하도록 일시적으로 중지하려면 DeactivateSubscription API 작업을 호출합니다. 비활성화된 구독은 구성을 유지하며 나중에 다시 활성화할 수 있습니다. 진행 중인 스트림은 정상적으로 완료됩니다.

중요

구독을 비활성화하면 남은 무료 평가판 기간이 즉시 소멸됩니다. 무료 평가판 중에 비활성화된 구독이 나중에 다시 활성화되면 유료 구독으로 다시 활성화됩니다.

구독 재활성화

비활성화된 구독은를 사용하여 ActivateSubscription API 작업을 호출하여 다시 활성화할 수 있습니다subscriptionId. 유료 측정은 재활성화 즉시 시작됩니다.

스트리밍 오디오

주변 설명서는 스트리밍 연결을 통해 실시간으로 오디오를 처리합니다. 애플리케이션이 연결을 열고, 오디오 청크를 이벤트 인코딩 메시지로 전송하고, 대화가 진행됨에 따라 트랜스크립션 결과를 수신합니다. 주변 설명서는 HTTP/2와 WebSocket()이라는 두 가지 스트리밍 전송을 지원합니다wss://. 두 전송 모두 동일한 인증 및 권한 부여 요구 사항, 할당량 및 제한을 통해 동일한 기능을 제공합니다. 생성, 스트리밍 및 종료와 같은 세션 동작은 두 전송 모두에서 동일합니다.

참고

세션은 시작된 전송에 바인딩됩니다. 한 전송에서는 세션을 시작하고 다른 전송에서는 재개할 수 없습니다. 세션을 일시 중지하고 재개하는 경우 재개된 세션은 세션을 시작한 것과 동일한 전송을 사용해야 합니다.

오디오에 두 개의 채널이 있는 경우 채널 식별을 사용하여 각 채널의 스피치를 개별적으로 트랜스크립션할 수 있습니다. 주변 설명서는 현재 최대 2개의 채널이 있는 오디오를 지원합니다. 트랜스크립트에서 채널에는 ch_0ch_1 레이블이 지정됩니다.

채널 식별이 활성화된 요청은 표준 트랜스크립트 섹션(트랜스크립트 및 항목) 외에도 channel_labels 섹션을 포함합니다. 이 섹션에는 채널별로 그룹화된 각 발화 또는 구두점 및 관련 채널 레이블, 타임스탬프 및 신뢰도 점수가 포함되어 있습니다. 한 채널에 있는 사람이 별도의 채널에 있는 사람과 동시에 발언하는 경우 각 채널의 타임스탬프는 개인이 서로 말하는 동안 겹칩니다.

HTTP/2를 통한 스트리밍

HTTP/2는 AWS SDKs에서 사용하는 스트리밍 전송이며 서버 측 및 네이티브 애플리케이션에 적합합니다. 애플리케이션은 HTTP/2 연결을 설정하고, 오디오 청크와 제어 이벤트를 이벤트 스트림 메시지로 전송하고, 동일한 연결을 통해 트랜스크립트 이벤트를 실시간으로 수신합니다. AWS SDK를 사용하면 SDK가 연결 설정, 요청 서명 및 이벤트 스트림 인코딩을 처리합니다.

자세한 HTTP/2 스트리밍 설정 및 이벤트 스트림 인코딩은 Amazon Connect Health API 참조를 참조하세요.

AWS SDK 사용

다음 코드 예제에서는 Java 2.x용 AWS SDK를 사용하여 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 지원을 사용하면 웹 브라우저 또는 기타 WebSocket 클라이언트에서 주변 설명서용 오디오를 스트리밍할 수 있습니다. 모든 WebSocket 연결은 TLS(wss://)를 사용합니다.

WebSocket 엔드포인트

주변 설명서를 사용하는 리전의 WebSocket 엔드포인트에 연결합니다.

리전 엔드포인트

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-Credential, X-Amz-Date, X-Amz-Signature, X-Amz-ExpiresX-Amz-SignedHeaders)와 세션 파라미터를 쿼리 문자열 파라미터로 포함합니다. 이 서비스는 연결이 설정될 때 미리 서명된 URL을 검증합니다. 미리 서명된 URL이 유효하지 않거나 만료되었거나 승인되지 않은 경우 서비스는 오류를 반환하고 연결을 닫아 세션을 거부합니다.

의 최대값은 60초(1분)X-Amz-Expires입니다. 연결이 설정되면 미리 서명된 URL의 서명은 각 후속 이벤트 스트림 프레임에 서명하는 데 사용되는 시드 서명이 되어 연결 수명 동안 지속적인 권한을 제공합니다.

WebSocket에는 새 IAM 작업이 필요하지 않습니다. 서비스는 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 알고리즘을 사용하여 서명할 문자열을 빌드한 다음 요청 날짜, 리전 및 health-agent 서비스에 대해 파생된 SigV4 서명 키를 사용하여 그 위에 HMAC-SHA256을 계산합니다. 서명할 문자열의 형식은 다음과 같습니다.

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), 16진수 문자열로 인코딩됩니다.

  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 SDKs는 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 객체에는 각 세션에 대해 최대 10KB의 텍스트 데이터를 unstructuredContext허용하는 필드가 포함되어 있습니다. 환자 컨텍스트를 포함하면 에이전트는 이를 사용하여 생성된 설명서를 방문 중에 명시적으로 설명되지 않은 배경 정보로 보강합니다.

환자 컨텍스트에는 다음이 포함될 수 있습니다.

  • 이전 대면 정보 및 방문 요약

  • 활성 약물 목록

  • 문제 목록 및 진단

  • 알러지 및 예방 주사

  • 관련 랩 및 영상 보고서

  • 수술 및 가족력

  • 생성된 임상 출력에서 환자를 참조할 때 사용되는 환자가 선호하는 대명사

컨텍스트는 트랜스크립트에만 필요한 정보가 없는 경우 임상의 검토를 위해 소스 자료에 대한 증거 매핑과 함께 생성된 노트 전체에서 특이도와 정확도를 개선하는 데 사용됩니다.

참고

다음 예제에서는 가상의 환자 데이터를 설명 목적으로만 사용합니다.

환자 컨텍스트 예

## 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 파라미터에 전달하여 출력 형식을 지정해야 합니다. 주변 설명서는 출력 형식을 지정하는 두 가지 방법, 즉 관리형 템플릿 또는 사용자 지정 템플릿을 지원합니다.

관리형 템플릿

주변 설명서는 7개의 사전 빌드된 노트 템플릿을 제공합니다. 관리형 템플릿의 구성 객체인는 templateType 파라미터를 통해 템플릿을 managedTemplate지정합니다. 기본 템플릿은 HISTORY_AND_PHYSICAL입니다.

템플릿 설명 사용 사례:

HISTORY_AND_PHYSICAL(기본값)

주요 임상 문서 섹션 요약

일반적인 신체 건강 문제

PHYSICAL_SOAP

물리적 상태 중심 SOAP 형식

SOAP 구조를 사용한 물리적 상태 확인

BEHAVIORAL_SOAP

동작 상태 중심 SOAP 형식

SOAP 구조를 사용한 동작 상태 확인

GIRPP

Progress-toward-goals 형식

행동 상태 - 환자 진행 상황 추적

BIRP

동작 패턴 및 응답 형식

동작 상태 - 동작 패턴 문서화

SIRP

치료 형식의 상황 컨텍스트

행동 상태 - 상황 컨텍스트 강조

DAP

간소화된 임상 문서 형식

짧거나 집중적인 대면

HISTORY_AND_PHYSICAL 섹션

섹션 설명

주요 불편 사항

환자의 임상의 방문 이유에 대한 간략한 설명

현재 질병의 이력

심각도, 발생, 시기, 현재 치료 및 영향을 받는 영역을 포함하여 환자의 질병에 대한 정보

신체 증상

다양한 신체 계통의 증상 환자 보고 평가

과거 병력

이전 의학적 상태, 수술 및 치료

과거 가족력

환자 가족에서 실행되는 건강 상태

과거 사회 기록

사회생활, 습관, 직업 및 건강에 영향을 미치는 환경적 요인

신체 검사

신체 계통 및 생체 징후에 대한 신체 검사의 임상의 결과

진단 테스트

실험실 검사, 영상 검사 및 기타 진단 절차의 결과 및 해석

평가

임상의의 환자 건강 평가

PLAN

임상의 권장 의학적 치료, 생활 방식 조정 및 추가 예약

PHYSICAL_SOAP 및 BEHAVIORAL_SOAP 섹션

섹션 설명

주관적 정보

환자의 목표, 경험, 기존 및 과거 문제

목표

환자 데이터 및 사실

평가

환자의 상황에 대한 임상의의 진단

계획

향후 개입 및 추천을 포함하여 임상의가 권장하는 다음 치료 단계

참고

PHYSICAL_SOAP는 물리적 상태 설명서에 최적화되어 있습니다. BEHAVIORAL_SOAP는 동작 상태 설명서에 최적화되어 있습니다. 둘 다 동일한 섹션 구조를 공유합니다.

GIRPP 섹션

섹션 설명

Goal

처리를 통해 해결해야 할 식별된 문제, 문제 또는 동작

개입

임상의가 사용하는 특정 치료, 방법 또는 기법

응답

참여 수준 및 피드백을 포함하여 환자가 개입에 반응한 방식

Progress

치료 목표를 향한 임상의의 움직임 평가

계획

향후 개입, 숙제 및 추천을 포함하여 임상의가 권장하는 다음 치료 단계

BIRP 섹션

섹션 설명

동작

환자가 제기하는 문제와 치료에 대한 환자의 응답

개입

임상의가 사용하는 특정 치료, 방법 또는 기법

응답

환자가 중재에 반응한 방식

계획

처리의 다음 단계

SIRP 섹션

섹션 설명

상황

환자가 제기하는 문제와 치료 목적

개입

임상의가 사용하는 특정 치료, 방법 또는 기법

응답

환자가 중재에 반응한 방식

계획

임상의가 권장하는 다음 치료 단계

DAP 섹션

섹션 설명

데이터

환자의 치료 요청 이유 및 환자 정보

평가

환자의 상황에 대한 임상의의 진단

계획

임상의가 권장하는 다음 치료 단계

사용자 지정 템플릿

주변 설명서는 기본 및 출력 사양이라는 두 계층으로 구성된 사용자 지정 모델을 사용합니다. 이 두 계층은 구성 객체인에서 관리됩니다customTemplate. customTemplate 구성 객체에는 기본 템플릿을 templateType 설정하고 출력 사양을 templateInstructions 포함하는 두 가지 파라미터가 있습니다.

기본(templateType)은 대화 중에 감지된 임상 사실의 조직 구조를 설정합니다. 지원되는 기본 템플릿은 다음과 같습니다.

기본 설명 사용 사례:

기록_AND_PHYSICAL

주요 임상 문서 섹션 요약

일반적인 신체 건강 문제

BEHAVIORAL_SOAP

동작 상태 중심 SOAP 형식

SOAP 구조를 사용한 동작 상태 확인

GIRPP

Progress-toward-goals 형식

행동 상태 - 환자 진행 상황 추적

BIRP

동작 패턴 및 응답 형식

동작 상태 - 동작 패턴 문서화

SIRP

치료 형식의 상황 컨텍스트

행동 상태 - 상황 컨텍스트 강조

DAP

간소화된 임상 문서 형식

짧거나 집중적인 대면

출력 사양 객체(templateInstructions)는 섹션 이름을 sectionHeader 정의하고 해당 섹션의 지침과 템플릿을 sectionInstructions 결합하는를 사용하여 지침 배열로 구성됩니다.

사용자 지정 지침에는 다음 세 가지 유형의 명령이 포함될 수 있습니다.

  • 세부 정보 지침 - 콘텐츠 간결성 또는 세부 정보를 제어합니다. 예: "주요 불만 사항을 1개 이하의 문장으로 설명하십시오."

  • 템플릿 사용 지침 - 에이전트가 템플릿과 대면 콘텐츠 간의 정렬 오류를 처리하는 방법을 지시합니다. 예: “템플릿을 정확히 따르세요. 요청된 데이터를 사용할 수 없는 경우 정보를 찾을 수 없습니다.”

  • 스타일 지침 - 형식, 용어 및 추론 요구 사항을 지정합니다. 예: "평가 섹션에서 번호가 매겨진 문제 사용"

템플릿은 자리 표시자, 구조화된 JSON 스키마 또는 예제 이전 참고 사항이 포함된 텍스트로 제공할 수 있습니다.

방법 설명 사용 상황

자리 표시자가 있는 텍스트 템플릿

에이전트가 대면에서 채우는 섹션 헤더 및 자리 표시자 필드(예: <chief_complaint>)가 있는 템플릿

섹션 레이아웃 및 콘텐츠 배치를 정확하게 제어하려는 경우

구조화된 JSON 템플릿

필드, 중첩 및 필드별 형식 지정 규칙을 정의하는 JSON 스키마

EHR에는 prose가 아닌 구조화된 데이터 출력이 필요합니다.

이전 참고 사항의 예

원하는 형식 및 스타일에 대한 참조로 제공된 이전 임상 노트

공급자가 기존 설명서 패턴과 일치하는 메모를 원함

참고

서비스는 상태 비저장입니다. 이전 메모를 스타일 참조로 사용하려면 애플리케이션이 각 세션의 지침에 이를 포함해야 합니다. 에이전트는 세션 간에 공급자 기본 설정을 유지하지 않습니다.

사용자 지정 지침 예제

다음 예제에서는 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>입니다.

  • 멀티파트 필드의 예상 하위 섹션을 열거합니다. 여러 범주(예: 본문 시스템 또는 문제 목록)에 걸쳐 있는 섹션의 경우 대표 값과 함께 명시적으로 나열하여 범위를 나타냅니다.

  • 누락된 정보를 정상적으로 처리합니다. 자리 표시자 내에서 "사용 가능한 경우" 또는 "해당하는 경우"와 같은 표현을 사용하여 대면에서 관련 콘텐츠를 생성하지 않을 때 섹션을 생략할 수 있음을 알립니다.

  • 방문 유형 전반에서 템플릿을 테스트합니다. 후속 진료에 사용되는 템플릿은 새 환자 진료 또는 건강 검사에 적합하지 않을 수 있습니다. 광범위하게 배포하기 전에 대표적인 대면 샘플과 비교하여 템플릿을 검증합니다.

출력

주변 설명서는 세 개의 출력 파일을 생성합니다.

트랜스크립트 파일

트랜스크립트 파일에는 단어 수준 타임스탬프가 있는 turn-by-turn 트랜스크립션이 포함되어 있습니다. Amazon Connect Health는 참가자 역할 감지를 추가하여 각 화자를 CLINICIAN 또는 PATIENT로 레이블을 지정합니다. 대화의 각 범주에 참가자가 두 명 이상인 경우 각 참가자에게 번호가 할당됩니다(예: , CLINICIAN_0CLINICIAN_1).

임상 문서 및 증거 매핑 파일

임상 문서 파일에는 환자-클리니션 대화에서 생성된 구조화된 임상 노트와 생성된 각 문을 대화 기록 또는 환자 컨텍스트 입력의 소스에 다시 연결하는 섹션이 포함되어 있습니다.

파일은 세션 시작 시 제공된 관리형 템플릿 또는 사용자 지정 지침을 따릅니다. 각 섹션에는 방문 파생 콘텐츠(대화에서)와 컨텍스트 파생 콘텐츠(환자 컨텍스트 입력에서)가 포함될 수 있습니다. 템플릿 구성에 따라 prose/free-text 및 구조화된 JSON 등 여러 출력 형식이 지원됩니다. 증거 매핑 섹션에서는 임상의가 AI 생성 콘텐츠의 출처를 확인할 수 있습니다. 각 매핑 항목에는 생성된 문장과 소스 트랜스크립트/콘텍스트 참조가 포함됩니다.

방문 후 요약 파일

방문 후 요약 파일에는 임상의의 검토 및 마무리를 위해 액세스 가능한 언어로 작성된 환자 대상 요약이 포함되어 있습니다. 여기에는 방문, 용량 및 빈도가 있는 현재 약물, 임상의의 후속 지침 및 환자의 조치 항목에 대한 일반 언어 설명이 포함됩니다.

요약은 트랜스크립트가 아닌 임상 문서 파일에서 생성되므로 임상 기록과 환자 대상 요약 간의 일관성을 보장합니다.

전체 API 파라미터 세부 정보, 요청/응답 스키마 및 스트리밍 설정 지침은 Amazon Connect Health API 참조를 참조하세요.