Outcomes — это функция в режиме Research Preview. Запросите доступ, чтобы попробовать её.
outcome переводит сессию из режима разговора в режим работы. Вы определяете, как должен выглядеть конечный результат и как измерять качество. Агент работает в направлении этой цели, самостоятельно оценивая и итерируя до тех пор, пока результат не будет достигнут.
Когда вы определяете результат, система автоматически создаёт оценщика (grader) для проверки артефакта по рубрике. Для этого используется отдельное контекстное окно, чтобы избежать влияния решений основного агента.
Оценщик возвращает разбивку по каждому критерию: либо подтверждение того, что артефакт соответствует рубрике, либо конкретные расхождения между текущей работой и требованиями. Эта обратная связь передаётся агенту для следующей итерации.
Все запросы к Managed Agents API требуют бета-заголовка managed-agents-2026-04-01. Функции Research Preview дополнительно требуют managed-agents-2026-04-01-research-preview. SDK устанавливает эти бета-заголовки автоматически.
Рубрика — это markdown-документ, описывающий оценку по каждому критерию. Рубрика обязательна.
Пример рубрики:
# DCF Model Rubric
## Revenue Projections
- Uses historical revenue data from the last 5 fiscal years
- Projects revenue for at least 5 years forward
- Growth rate assumptions are explicitly stated and reasonable
## Cost Structure
- COGS and operating expenses are modeled separately
- Margins are consistent with historical trends or deviations are justified
## Discount Rate
- WACC is calculated with stated assumptions for cost of equity and cost of debt
- Beta, risk-free rate, and equity risk premium are sourced or justified
## Terminal Value
- Uses either perpetuity growth or exit multiple method (stated which)
- Terminal growth rate does not exceed long-term GDP growth
## Output Quality
- All figures are in a single .xlsx file with clearly labeled sheets
- Key assumptions are on a separate "Assumptions" sheet
- Sensitivity analysis on WACC and terminal growth rate is includedWas this page helpful?
Передайте рубрику как встроенный текст в 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. Агент немедленно начинает работу; дополнительное событие пользовательского сообщения не требуется.
# Create a session
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")
# Define the outcome — agent starts working on receipt
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
# or: "rubric": {"type": "file", "file_id": "$rubric_id"}
# "max_iterations" is optional; default 3, max 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 — первая оценка, 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/ внутри контейнера. После перехода сессии в состояние idle получите их через Files API с привязкой к сессии:
# List files produced by this session
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}'
# Download by 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.xlsx