4장 여러 에이전트가 공유할 작업 봉투를 만든다
긴 대화를 다른 에이전트에게 복사하면 목표, 제한, 완료 조건이 흐려진다. 대신 입력 AgentTask와 출력 AgentResult를 JSON 계약으로 고정한다.
{
"taskId": "BP-01",
"role": "research",
"objective": "중국 개인정보 처리 고지의 공식 근거 3개를 수집한다.",
"allowedTools": ["web"],
"constraints": ["정부·법령 원문 우선", "법률 자문 금지"],
"outputSchema": "evidence-card.v1.json",
"acceptanceCriteria": ["URL", "원문 인용", "한국어 요약", "확인일"]
}
결과에는 provider, runId, artifacts, errors가 반드시 있다. 실패도 결과다. 조용히 빈 배열을 반환하는 것이 가장 위험하다. src/contracts.mjs의 assertAgentTask와 assertAgentResult는 형식이 다른 산출물을 통합 전에 막는다.
실패를 직접 보라
objective를 조사로 줄이고 테스트를 실행한다. TASK_OBJECTIVE_INVALID가 나와야 한다. 이어 provider를 지우면 RESULT_PROVENANCE_MISSING이어야 한다. 계약은 좋은 답을 보장하지 않지만, 누가 어떤 조건에서 만든 답인지 모르는 상태를 막는다.