결과(Outcomes)는 리서치 프리뷰 기능입니다. 사용해 보려면 액세스를 요청하세요.
outcome은 세션을 대화에서 작업으로 격상시킵니다. 최종 결과물이 어떤 모습이어야 하는지, 품질을 어떻게 측정할지를 정의합니다. 에이전트는 그 목표를 향해 작업하며, 결과가 충족될 때까지 자체 평가하고 반복합니다.
결과를 정의하면, 하니스는 자동으로 *채점자(grader)*를 프로비저닝하여 아티팩트를 루브릭에 대해 평가합니다. 채점자는 메인 에이전트의 구현 선택에 영향을 받지 않도록 별도의 컨텍스트 창을 활용합니다.
채점자는 기준별 분석 결과를 반환합니다: 아티팩트가 루브릭을 충족한다는 확인, 또는 현재 작업과 요구사항 사이의 구체적인 차이점입니다. 해당 피드백은 다음 반복을 위해 에이전트에게 전달됩니다.
모든 Managed Agents API 요청에는 managed-agents-2026-04-01 베타 헤더가 필요합니다. 리서치 프리뷰 기능에는 추가로 managed-agents-2026-04-01-research-preview가 필요합니다. SDK는 이러한 베타 헤더를 자동으로 설정합니다.
루브릭은 기준별 채점을 설명하는 마크다운 문서입니다. 루브릭은 필수입니다.
루브릭 예시:
# DCF 모델 루브릭
## 매출 예측
- 최근 5 회계연도의 과거 매출 데이터 사용
- 최소 5년 이상의 매출 예측
- 성장률 가정이 명시적으로 기술되고 합리적임
## 비용 구조
- 매출원가와 영업비용이 별도로 모델링됨
- 마진이 과거 추세와 일치하거나 편차가 정당화됨
## 할인율
- WACC가 자기자본비용 및 부채비용에 대한 명시된 가정으로 계산됨
- 베타, 무위험 이자율, 주식 위험 프리미엄이 출처 또는 정당화됨
## 터미널 밸류
- 영구 성장 또는 출구 배수 방법 중 하나를 사용(명시됨)
- 터미널 성장률이 장기 GDP 성장률을 초과하지 않음
## 출력 품질
- 모든 수치가 명확하게 레이블된 시트가 있는 단일 .xlsx 파일에 있음
- 주요 가정이 별도의 "가정" 시트에 있음
- WACC 및 터미널 성장률에 대한 민감도 분석이 포함됨루브릭을 user.define_outcome의 인라인 텍스트로 전달하거나(다음 섹션에 표시됨), 세션 간 재사용을 위해 Files API를 통해 업로드하세요:
베타 헤더 files-api-2025-04-14가 필요합니다.
rubric=$(curl -fsSL https://api.anthropic.com/v1/files \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01,files-api-2025-04-14" \
-F file=@/path/to/pr_review_rubric.md)
rubric_id=$(jq -r '.id' <<<"$rubric")
printf 'Uploaded rubric: %s\n' "$rubric_id"세션을 생성한 후, user.define_outcome 이벤트를 전송하세요. 에이전트는 즉시 작업을 시작합니다; 추가적인 사용자 메시지 이벤트는 필요하지 않습니다.
# 세션 생성
session=$(curl -fsSL https://api.anthropic.com/v1/sessions \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01-research-preview" \
--json @- <<EOF
{
"agent": "$agent_id",
"environment_id": "$environment_id",
"title": "Financial analysis on Costco"
}
EOF
)
session_id=$(jq -r '.id' <<<"$session")
# 결과 정의 — 수신 즉시 에이전트가 작업 시작
curl -fsSL "https://api.anthropic.com/v1/sessions/$session_id/events" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01-research-preview" \
--json @- >/dev/null <<EOF
{
"events": [
{
"type": "user.define_outcome",
"description": "Build a DCF model for Costco in .xlsx",
"rubric": {"type": "text", "content": "# DCF Model Rubric\n..."},
"max_iterations": 5
}
]
}
EOF
# 또는: "rubric": {"type": "file", "file_id": "$rubric_id"}
# "max_iterations"는 선택 사항; 기본값 3, 최대 20결과 지향 세션의 진행 상황은 이벤트 스트림에 표시됩니다.
agent.* 이벤트(메시지, 도구 사용 등)는 결과를 향한 진행 상황을 보여줍니다.span.outcome_evaluation_* 이벤트는 결과 지향 세션에서만 발생하며, 반복 루프 수와 채점자의 피드백 프로세스를 보여줍니다.user.message 이벤트를 전송하여 진행 중인 에이전트의 작업을 지시할 수도 있지만, 이는 필수적이지 않습니다; 에이전트는 반복을 모두 소진하거나 결과를 달성할 때까지 작업한다는 것을 알고 있습니다.user.interrupt 이벤트는 현재 결과에 대한 작업을 일시 중지하고 span.outcome_evaluation_end.result를 interrupted로 표시하여, 새로운 결과를 시작할 수 있게 합니다.한 번에 하나의 결과만 지원되지만, 결과를 순서대로 연결할 수 있습니다. 이를 위해 이전 결과의 터미널 이벤트 이후에 새로운 user.define_outcome 이벤트를 전송하세요.
이것은 결과를 시작하기 위해 전송하는 이벤트입니다. 수신 시 processed_at 타임스탬프와 outcome_id를 포함하여 에코백됩니다.
{
"type": "user.define_outcome",
"description": "Build a DCF model for Costco in .xlsx",
"rubric": { "type": "file", "file_id": "file_01..." },
"max_iterations": 5
}하나의 반복 루프에 대해 채점자가 평가를 시작하면 발생합니다. iteration 필드는 0 인덱스 수정 카운터입니다: 0은 첫 번째 평가, 1은 첫 번째 수정 후 재평가 등입니다.
{
"type": "span.outcome_evaluation_start",
"id": "sevt_01def...",
"outcome_id": "outc_01a...",
"iteration": 0,
"processed_at": "2026-03-25T14:01:45Z"
}채점자가 실행되는 동안 발생하는 하트비트입니다. 채점자의 내부 추론은 불투명합니다: 작업 중임은 알 수 있지만, 무엇을 생각하는지는 알 수 없습니다.
{
"type": "span.outcome_evaluation_ongoing",
"id": "sevt_01ghi...",
"outcome_id": "outc_01a...",
"processed_at": "2026-03-25T14:02:10Z"
}채점자가 하나의 반복 평가를 마친 후 발생합니다. result 필드는 다음에 일어날 일을 나타냅니다.
| 결과 | 다음 |
|---|---|
satisfied | 세션이 idle로 전환됩니다. |
needs_revision | 에이전트가 새로운 반복 사이클을 시작합니다. |
max_iterations_reached | 추가 평가 사이클이 없습니다. 에이전트는 세션이 idle로 전환되기 전에 최종 수정을 한 번 더 실행할 수 있습니다. |
failed | 세션이 idle로 전환됩니다. 루브릭이 작업과 근본적으로 일치하지 않을 때 반환됩니다. 예를 들어 설명과 루브릭이 서로 모순될 때입니다. |
interrupted | outcome_evaluation_start가 인터럽트 전에 이미 발생한 경우에만 발생합니다. |
{
"type": "span.outcome_evaluation_end",
"id": "sevt_01jkl...",
"outcome_evaluation_start_id": "sevt_01def...",
"outcome_id": "outc_01a...",
"result": "satisfied",
"explanation": "All 12 criteria met: revenue projections use 5 years of historical data, WACC assumptions are stated, sensitivity table is included...",
"iteration": 0,
"usage": {
"input_tokens": 2400,
"output_tokens": 350,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 1800
},
"processed_at": "2026-03-25T14:03:00Z"
}span.outcome_evaluation_end에 대한 이벤트 스트림을 수신하거나, GET /v1/sessions/:id를 폴링하여 outcome_evaluations[].result를 읽을 수 있습니다:
session=$(curl -fsSL "https://api.anthropic.com/v1/sessions/$session_id" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01-research-preview")
jq -r '.outcome_evaluations[] | "\(.outcome_id): \(.result)"' <<<"$session"
# outc_01a...: satisfied에이전트는 컨테이너 내부의 /mnt/session/outputs/에 출력 파일을 씁니다. 세션이 유휴 상태가 되면, 세션 범위의 Files API를 통해 파일을 가져오세요:
# 이 세션에서 생성된 파일 목록
curl -fsSL "https://api.anthropic.com/v1/files?scope_id=$session_id" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: files-api-2025-04-14,managed-agents-2026-04-01-research-preview" \
| jq '.data[] | {id, filename, size_bytes}'
# file_id로 다운로드
curl -fsSL "https://api.anthropic.com/v1/files/$file_id/content" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: files-api-2025-04-14" \
-o costco_dcf.xlsxWas this page helpful?