View a markdown version of this page

채팅 기록 관리 - Amazon Nova

채팅 기록 관리

Amazon Nova 2 Sonic 응답에는 사용자 음성과 어시스턴트 음성 모두에 대한 자동 음성 인식(ASR) 트랜스크립트가 포함됩니다. 채팅 기록 저장은 로깅 목적뿐만 아니라 예기치 않게 연결이 종료될 때 세션을 재개하는 경우에도 모범 사례입니다. 이를 통해 클라이언트가 컨텍스트를 다시 Nova Sonic으로 보내 대화를 원활하게 계속할 수 있습니다.

채팅 기록 관리에 대한 자세한 내용은 다음 리소스를 참조하세요.

채팅 기록 전송

시스템/음성 프롬프트 후 오디오 스트리밍이 시작되기 전에 한 번만 대화 기록을 포함할 수 있습니다. 전체 채팅 기록은 40KB보다 클 수 없습니다. 다음 다이어그램에서는 이벤트 수명 주기 동안 채팅 기록이 전달되는 시점을 보여줍니다.

각 기록 메시지에는 contentStart, textInput, contentEnd의 세 가지 이벤트가 필요합니다.

메시지당 이벤트 스키마:

  • contentStart - 메시지 역할 및 구성 정의

    { "event": { "contentStart": { "promptName": "<prompt-id>", "contentName": "<content-id>", "type": "TEXT", "interactive": true, "role": "ASSISTANT", "textInputConfiguration": { "mediaType": "text/plain" } } } }
  • textInput - 실제 메시지 콘텐츠를 포함합니다. 하나의 textInput은 1KB보다 클 수 없습니다. 그렇다면 동일한 콘텐츠 블록에서 여러 textInputs로 분할합니다. 대화가 40KB보다 큰 경우 전체 채팅 기록을 자릅니다.

    { "event": { "textInput": { "promptName": "<prompt-id>", "contentName": "<content-id>", "content": "Take your time, Don. I'll be here when you're ready." } } }
  • contentEnd - 메시지의 끝 표시

    { "event": { "contentEnd": { "promptName": "<prompt-id>", "contentName": "<content-id>" } } }

채팅 기록의 각 메시지에 대해 USER와 ASSISTANT 역할을 번갈아 이 세 가지 이벤트를 반복합니다.

중요 고려 사항:

  • 채팅 기록은 세션당 한 번만 포함할 수 있음

  • 채팅 기록은 시스템 프롬프트 이후오디오 스트리밍이 시작되기 전에 전송되어야 함

  • 오디오 스트리밍을 시작하기 전에 모든 기록 메시지를 전송해야 함

  • 각 메시지는 USER 또는 ASSISTANT 역할을 지정해야 함

  • textOutput 이벤트에서 저장된 트랜스크립트 콘텐츠를 textInput의 콘텐츠 값으로 사용

ASR 트랜스크립트 수신

대화 중에 Amazon Nova 2 Sonic은 출력 이벤트를 통해 ASR 트랜스크립트를 전송합니다. 각 트랜스크립트는 contentStart, textOutput, contentEnd의 세 가지 이벤트 시퀀스로 전달됩니다.

예제: 사용자 음성 트랜스크립트:

1. contentStart - 트랜스크립트의 시작을 나타냅니다.

{ "event": { "contentStart": { "additionalModelFields": "{\"generationStage\":\"FINAL\"}", "completionId": "<completion-id>", "contentId": "<content-id>", "promptName": "<prompt-id>", "role": "USER", "sessionId": "<session-id>", "textOutputConfiguration": { "mediaType": "text/plain" }, "type": "TEXT" } } }

2. textOutput - 실제 트랜스크립트 콘텐츠를 포함합니다.

{ "event": { "textOutput": { "completionId": "<completion-id>", "content": "hello how are you", "contentId": "<content-id>", "promptName": "<prompt-id>", "role": "USER", "sessionId": "<session-id>" } } }

3. contentEnd - 트랜스크립트의 끝을 표시합니다.

{ "event": { "contentEnd": { "completionId": "<completion-id>", "contentId": "<content-id>", "promptName": "<prompt-id>", "sessionId": "<session-id>", "stopReason": "PARTIAL_TURN", "type": "TEXT" } } }

USER 및 ASSISTANT 역할 모두에 동일한 세 가지 이벤트 패턴이 적용됩니다. textOutput 이벤트에서 content 필드를 추출하고 contentStart 이벤트에서 role 필드를 추출하여 채팅 기록을 작성합니다.

모범 사례

항상 채팅 기록을 저장하여 다음을 지원합니다.

  • 서로 다른 디바이스에서 세션 재개

  • 대화 로깅 및 감사

  • 후속 상호 작용을 위해 컨텍스트 보존

중요: 채팅 기록을 저장할 때 generationStage를 기반으로 텍스트 출력을 사용합니다.

  • 추측 - 오디오 합성이 시작되기 전에 생성되는, Nova 2 Sonic에서 말하려는 내용의 미리 보기

  • 최종 - 오디오 응답에서 말한 내용의 실제 문장 수준 트랜스크립션

대화의 정확한 레코드를 나타내므로 항상 채팅 기록에 최종 텍스트 출력을 저장합니다.

FINAL 출력 예제(채팅 기록에 저장):

ContentStart event: { "additionalModelFields": "{\"generationStage\":\"FINAL\"}", "completionId": "<completion-id>", "contentId": "<content-id>", "role": "ASSISTANT", "sessionId": "<session-id>", "type": "TEXT" }

SPECULATIVE 출력 예제(기록에 대해서가 아닌 선택적 미리 보기):

ContentStart event: { "additionalModelFields": "{\"generationStage\":\"SPECULATIVE\"}", "completionId": "<completion-id>", "contentId": "<content-id>", "role": "ASSISTANT", "sessionId": "<session-id>", "type": "TEXT" }