텍스트 메시지

텍스트 메시지 (Text Messages)

에이전트에서 사용자로 대화 텍스트를 스트리밍 — 1.0 버전을 설명드릴게요.

출처: 문서

본문

텍스트 메시지는 대화 그 자체입니다: 사용자가 읽는 단어들이요. 프로듀서는 각 메시지를 생성되는 대로 스트리밍해서, UI가 메시지가 끝나기를 기다리지 않고 텍스트가 도착하는 대로 렌더링할 수 있게 해요.

사용자 상호작용 모델 (User Interaction Model)

텍스트 메시지는 일반적으로 채팅 트랜스크립트로 렌더링되며, 각 메시지는 콘텐츠가 스트리밍됨에 따라 점진적으로 나타나요. 프로토콜은 특정 프레젠테이션을 강제하지 않아요 — 소비자는 전체 메시지를 보여주기 전에 버퍼링하거나, 토큰별로 렌더링할 수 있어요(MAY).

이벤트 (Events)

텍스트 메시지는 스트리밍 패턴을 따르며 messageId로 매칭돼요. 패턴의 규칙 — 콘텐츠 전에 열고, 실행이 끝나기 전에 닫고, 열린 id를 다시 열지 않기 — 이 거기에 쓰여진 대로 적용돼요.

TEXT_MESSAGE_START

메시지를 열어요.

{
  "type": "TEXT_MESSAGE_START",
  "messageId": "msg-1",
  "role": "assistant"
}
  • role은 선택(OPTIONAL)이며; 부재한 role은 assistant를 뜻해요. role이 취할 수 있는 값은 스키마의 몫입니다.
  • name은 선택(OPTIONAL)이며 여러 화자를 구분하는 프로듀서를 위해 role 안에서 화자에 라벨을 붙여요.

TEXT_MESSAGE_CONTENT

열린 메시지를 확장해요. delta는 메시지 텍스트의 다음 조각을 담으며; 델타는 도착 순서대로 결합됩니다.

{
  "type": "TEXT_MESSAGE_CONTENT",
  "messageId": "msg-1",
  "delta": "Hello, world."
}

TEXT_MESSAGE_END

메시지를 닫아요. 닫힌 메시지는 밀봉된 것이 아니라 닫힌 것입니다: 프로듀서는 새 TEXT_MESSAGE_START로 같은 messageId를 다시 열 수 있고(MAY), 메시지는 계속되며, 추가 콘텐츠는 이미 있던 것에 이어붙어요. 다시 여는 TEXT_MESSAGE_START는 그것이 다시 여는 메시지와 일치해야 해요(MUST) — 같은 소유자, 같은 role, 같은 name; 메시지의 확립된 값이 유지되며, 소비자는 불일치를 감지할 필요가 없어요. 이후 MESSAGES_SNAPSHOT도 메시지를 전체적으로 재진술할 수 있어요(MAY). 어떤 이벤트도 닫힌 메시지의 콘텐츠를 다른 수단으로 변경할 수는 없어요.

실행 내에서, 다른 소유자로의 재개방은 서브에이전트 규칙이 이미 거부하는 귀속 불일치입니다. 실행을 가로질러서는 소비자의 소유권 추적이 리셋되어 있는데, 이것이 실행 간 불일치의 감지가 요구되지 않는 이유입니다 — 프로듀서의 의무는 어느 쪽이든 같아요.

TEXT_MESSAGE_CHUNK

간결한 철자예요. 소비자는 스트리밍 패턴이 명시하는 대로 청크를 위 세 이벤트로 확장해야 해요(MUST), 첫 청크 요구사항과 충돌 반복 규칙을 포함해서요.

메시지 흐름 (Message Flow)

sequenceDiagram
    participant Agent
    participant Client
    participant UI

    Agent->>Client: TEXT_MESSAGE_START (msg-1, assistant)
    Client->>UI: new message appears
    loop streaming
        Agent->>Client: TEXT_MESSAGE_CONTENT (delta)
        Client->>UI: text grows
    end
    Agent->>Client: TEXT_MESSAGE_END (msg-1)
    Client->>UI: message complete

데이터 타입 (Data Types)

이벤트 형태는 스키마 참조가 정의합니다: TextMessageStartEvent, TextMessageContentEvent, TextMessageEndEvent, TextMessageChunkEvent. 조립된 메시지는 role에 따라 대화 역사에 AssistantMessage, UserMessage, SystemMessage, DeveloperMessage 로 나타나요.

메시지의 어떤 이벤트의 메타데이터든 메타데이터 규칙 아래에서 메시지로 병합됩니다: 키별로, 마지막 쓰기가 이겨요.

오류 처리 (Error Handling)

열리지 않은 messageId에 대한 TEXT_MESSAGE_CONTENT 또는 TEXT_MESSAGE_END, 또는 열린 것에 대한 TEXT_MESSAGE_START는 잘못된 시퀀스이며 실행에 치명적이에요. 실행이 끝날 때 열린 채 남은 메시지도 위반입니다. 이것들은 스트리밍 패턴의 규칙이며; 텍스트 메시지에 대해 그것을 완화하는 것은 아무것도 없어요.

더 알아보기 (Learn more)