Was this page helpful?
Outcomes — это функция Research Preview. Запросите доступ, чтобы попробовать её.
outcome повышает сеанс с разговора на работу. Вы определяете, как должен выглядеть конечный результат и как измерить качество. Агент работает над этой целью, самооценивается и итерирует, пока результат не будет достигнут.
Когда вы определяете результат, система автоматически подготавливает оценщика для оценки артефакта по рубрике. Он использует отдельное контекстное окно, чтобы не быть подверженным влиянию выборов реализации основного агента.
Оценщик возвращает разбор по критериям: либо подтверждение того, что артефакт соответствует рубрике, либо конкретные пробелы между текущей работой и требованиями. Эта обратная связь передаётся агенту для следующей итерации.
Все запросы Managed Agents API требуют заголовка бета-версии managed-agents-2026-04-01. Функции Research Preview дополнительно требуют managed-agents-2026-04-01-research-preview. SDK автоматически устанавливает эти заголовки бета-версии.
Рубрика — это документ markdown, описывающий оценку по критериям. Рубрика обязательна.
Пример рубрики:
# Рубрика модели DCF
## Прогнозы доходов
- Использует исторические данные о доходах за последние 5 финансовых лет
- Прогнозирует доход как минимум на 5 лет вперед
- Предположения о темпе роста явно указаны и разумны
## Структура затрат
- COGS и операционные расходы моделируются отдельно
- Маржа соответствует историческим тенденциям или отклонения обоснованы
## Ставка дисконтирования
- WACC рассчитывается с указанными предположениями для стоимости капитала и стоимости долга
- Бета, безрисковая ставка и премия за риск акций указаны или обоснованы
## Терминальная стоимость
- Использует либо метод вечного роста, либо метод выхода (указано какой)
- Темп терминального роста не превышает долгосрочный рост ВВП
## Качество вывода
- Все цифры находятся в одном файле .xlsx с четко обозначенными листами
- Ключевые предположения находятся на отдельном листе «Assumptions»
- Включен анализ чувствительности по WACC и темпу терминального ростаПередайте рубрику как встроенный текст на user.define_outcome (показано в следующем разделе) или загрузите её через Files API для повторного использования в разных сеансах:
Требует заголовок бета-версии files-api-2025-04-14.
После создания сеанса отправьте событие user.define_outcome. Агент начинает работу немедленно; дополнительное событие пользовательского сообщения не требуется.
Прогресс в сеансе, ориентированном на результаты, отображается в потоке событий.
agent.* (сообщения, использование инструментов и т. д.) показывают прогресс в достижении результата.span.outcome_evaluation_* выпускаются только для сеансов, ориентированных на результаты, и показывают количество циклов итерации и процесс обратной связи оценщика.user.message events в сеанс, ориентированный на результаты, чтобы направить работу агента по мере её выполнения, но это не так необходимо; агент знает, что нужно работать, пока он не исчерпает свои итерации или не достигнет результата.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:
Агент записывает выходные файлы в /mnt/session/outputs/ внутри контейнера. После того как сеанс переходит в режим ожидания, получите их через Files API в области сеанса:
from pathlib import Path
rubric = client.beta.files.upload(file=Path("/path/to/pr_review_rubric.md"))
print(f"Uploaded rubric: {rubric.id}")# Create a session
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
title="Financial analysis on Costco",
)
# Define the outcome — agent starts working on receipt
client.beta.sessions.events.send(
session_id=session.id,
events=[
{
"type": "user.define_outcome",
"description": "Build a DCF model for Costco in .xlsx",
"rubric": {"type": "text", "content": RUBRIC},
# or: "rubric": {"type": "file", "file_id": rubric.id},
"max_iterations": 5, # optional; default 3, max 20
}
],
)session = client.beta.sessions.retrieve(session.id)
for outcome in session.outcome_evaluations:
print(f"{outcome.outcome_id}: {outcome.result}")
# outc_01a...: satisfiedfiles = client.beta.files.list(scope_id=session.id)
for f in files.data:
print(f"{f.id}: {f.filename} ({f.size_bytes} bytes)")
content = client.beta.files.download(files.data[0].id)
content.write_to_file("costco_dcf.xlsx")