상태

상태 (State)

공유 상태와 대화 자체에 대해 설명해 드릴게요 — 전체를 교체하거나, 패치로 수정합니다 — 1.0 기준이에요. 상태는 에이전트와 애플리케이션이 동기화 상태로 유지하는 값이에요 — 계획, 폼, 작성 중인 문서.

출처: 문서

본문

상태는 에이전트와 애플리케이션이 동기화 상태로 유지하는 값이에요 — 계획, 폼, 작성 중인 문서. 그것은 스냅샷–델타 패턴으로 여행해요; 이 페이지는 상태에 그리고 대화 자신의 스냅샷에 특정한 것을 추가합니다.

이벤트

STATE_SNAPSHOT

에이전트 상태를 전체적으로 교체해요. 델타가 그 변경을 표현할 수 없을 때, 또는 컨슈머를 재동기화하려 할 때 보내집니다. 컨슈머는 snapshot으로 자기 상태를 교체해야 해요(MUST) — 병합 없이.

STATE_DELTA

현재 상태를 RFC 6902 패치로 수정해요. 기준선은 컨슈머의 현재 상태예요: 실행 시작 시 입력의 state; 그 후로는 그 실행 자신의 스냅샷과 델타가 만든 무엇이든. 패턴이 패치에 대해 말하는 모든 것 — 원자 적용, 열린 연산, 실패 처리, 재동기화 — 이 바뀌지 않고 적용됩니다.

MESSAGES_SNAPSHOT

프로듀서가 소유하는 완전한 메시지 집합, 순서대로요.

그것은 대화 전체(conversation-wide)이지 단순 덮어쓰기가 아니에요, 컨슈머가 어떤 프로듀서도 추적하지 않는 자기 자신의 메시지를 들고 있을 수 있기 때문이에요. 조정(reconciliation):

  • 스냅샷의 메시지는 같은 id를 가진 컨슈머 사본을 교체합니다 — 제자리에서: 컨슈머는 이미 들고 있는 메시지에 대해 기존 위치를 유지해요. 컨슈머가 한 번도 본 적 없는 스냅샷 메시지는 스냅샷 순서로 추가됩니다. 그러므로 스냅샷의 순서는 오직 컨슈머가 처음 만나는 메시지에 대해서만 권위가 있고, 이미 가진 것을 재정렬하지 않아요.
  • 스냅샷에 없는 컨슈머 보유 메시지는 버려집니다 — 프로듀서가 완전한 집합을 선언하고 있거든요 — 단, 프로듀서가 알 수 없는 클라이언트 전용 자료는 제외합니다: 프로듀서로 절대 여행하지 않는 activity 메시지와, 대부분의 프로듀서가 추적하지 않는 추론 메시지.
  • 예외는 역할별이고 자가 취소(self-revoking)예요: 스냅샷 자체가 어떤 activity 메시지를 담으면 그것은 완전한 activity 집합을 선언하는 것이고, 그것에 없는 컨슈머의 activity 메시지는 다른 무엇이든 그러하듯 버려집니다. 추론 메시지에도 같은 규칙이 성립해요.

대화 전체이므로, 스냅샷은 자기 자신의 subagentRunId를 담지 않아요; 그것이 담는 메시지들을 통해 각 메시지의 소유를 확립합니다.

실행 간 동작

상태는 이벤트가 그것을 교체할 때까지 스레드 위의 실행들 사이에 지속되고, 다음 실행의 입력이 시작 값으로 그것을 되돌려 나릅니다 — 양쪽이 합의된 상태를 유지하는 루프예요. 메시지도 같은 방식으로 누적되고, MESSAGES_SNAPSHOT은 프로듀서가 그 누적을 노골적으로 다시 말하는 방식입니다.

메시지 흐름

sequenceDiagram
    participant Agent
    participant Application

    Agent->>Application: STATE_SNAPSHOT {"draft": {"sections": []}}
    Agent->>Application: STATE_DELTA (add /draft/sections/0)
    Agent->>Application: STATE_DELTA (replace /draft/sections/0/status)
    Agent->>Application: RUN_FINISHED
    Application->>Agent: next RunAgentInput (state: the current value)

데이터 타입

StateSnapshotEvent, StateDeltaEvent, MessagesSnapshotEvent는 schema reference로 정의되고, State는 의도적으로 제약이 없어요 — 객체뿐 아니라 임의의 JSON 값 — 그리고 델타는 JsonPatch로 정의됩니다.

오류 처리

구조적으로 형식이 잘못된 패치는 치명적이에요; 적용에 실패하는 잘 형성된 패치는 패턴에 따라 경고되고 건너뛰어집니다.

보안 고려사항

상태 이벤트는 애플리케이션 상태에 대한 원격 쓰기예요. 애플리케이션은 상태에서 읽은 것을 그것에 대해 행동하기 전에 — 렌더링, 실행, 그것 때문에 무언가 허용 — 검증해야 해요(MUST), 신뢰 경계를 건너는 어떤 다른 입력을 검증하듯 정확히요. 프로듀서는 차례로 상태에 비밀을 넣지 말아야 해요(SHOULD NOT): 그것은 매 실행에서 컨슈머를 왕복하고 돌아오니까요.

더 알아보기 (Learn more)