0Pricing
AI Agents · Урок

Возврат результатов модели

Форматируйте вывод инструментов как сообщения с ролью инструмента, чтобы модель могла прочитать их и продолжить диалог.

«Возврат результатов модели» — бесплатный урок AI Agents на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.

Сообщение с результатом инструмента

После выполнения инструмента сообщите модели результат с помощью сообщения инструмента:

messages.append({
    'role': 'tool',
    'tool_call_id': tool_call.id,    # MUST match the assistant's tool_call.id
    'content': json.dumps(result)
})

Содержимое должно быть строкой

OpenAI ожидает, что content будет строкой. Сериализуйте объекты с помощью json.dumps:

# Bad — will error
messages.append({'role': 'tool', 'tool_call_id': id, 'content': {'temp': 18}})

# Good
messages.append({'role': 'tool', 'tool_call_id': id, 'content': '{"temp": 18}'})

Формат Anthropic

Anthropic использует блок содержимого внутри сообщения пользователя:

messages.append({
    'role': 'user',
    'content': [{
        'type': 'tool_result',
        'tool_use_id': 'toolu_abc',
        'content': json.dumps(result)
    }]
})

Возврат ошибок

Если инструмент завершился с ошибкой, верните ошибку — не притворяйтесь, что всё прошло успешно. Модель может восстановиться после ошибки:

try:
    result = run_tool(...)
    content = json.dumps({'ok': True, 'data': result})
except Exception as e:
    content = json.dumps({'ok': False, 'error': str(e)})

messages.append({'role': 'tool', 'tool_call_id': id, 'content': content})

Принцип нескольких результатов

Для параллельных вызовов инструментов добавляйте каждый результат с соответствующим ID:

for tc in message.tool_calls:
    result = dispatch(tc)
    messages.append({
        'role': 'tool',
        'tool_call_id': tc.id,
        'content': json.dumps(result)
    })

Большие выводы: суммирование

Если инструмент возвращает 100 КБ HTML, отправка всего содержимого модели расходует токены и рассеивает её внимание. Сначала суммируйте или усеките результат:

def truncate(text, max_chars=4000):
    if len(text) <= max_chars:
        return text
    return text[:max_chars] + f'\n...[truncated, {len(text)-max_chars} more chars]'

sample = "x" * 4500
result = truncate(sample, max_chars=50)
print(result)

Стабильная схема

Даже если результаты различаются (успех / ошибка / не найдено), сохраняйте стабильную схему вывода. При согласованной структуре модель работает надёжнее:

from typing import TypedDict, Literal, Optional, Any

class ToolResult(TypedDict):
    status: Literal['ok', 'not_found', 'error']
    data: Optional[Any]
    error: Optional[str]

def make_result(status, data=None, error=None) -> ToolResult:
    return {'status': status, 'data': data, 'error': error}

print(make_result('ok', data={'temp': 72}))
print(make_result('not_found', error='city not found'))

Добавление подсказок в метаданные

Помогите модели интерпретировать результаты, добавив подсказки в содержимое:

content = json.dumps({
    'data': rows,
    'note': 'Returned 50 rows (most recent first). There may be more matches.'
})

Двоичные данные

Не встраивайте большие двоичные данные в сообщения инструментов в формате base64. Вместо этого сохраните их в хранилище и верните URL или ID:

result = {
    'image_path': '/tmp/chart-abc.png',
    'thumbnail_url': 'https://...',
    'caption': 'Sales by quarter, 2024'
}
for k, v in result.items():
    print(f"{k}: {v}")

Повторный вызов модели

После добавления всех результатов инструментов снова вызовите модель — она либо создаст окончательный ответ, либо вызовет дополнительные инструменты:

class Msg:
    def __init__(self, tool_calls=None, content=None):
        self.tool_calls = tool_calls or []
        self.content = content

class ToolCall:
    def __init__(self, name, args):
        self.name = name
        self.args = args

def call_model(messages, tools):
    if len(messages) < 4:
        return Msg(tool_calls=[ToolCall('get_weather', {'city': 'Paris'})])
    return Msg(content='It is sunny in Paris.')

messages = [{'role': 'user', 'content': 'Weather in Paris?'}]
tools = ['get_weather']
message = call_model(messages, tools)

while message.tool_calls:
    for tc in message.tool_calls:
        result = f'Result of {tc.name}({tc.args})'
        messages.append({'role': 'tool', 'name': tc.name, 'content': result})
        print('Tool call:', tc.name, '->', result)
    message = call_model(messages, tools)

print('Final answer:', message.content)

Аудит выводов инструментов

Записывайте каждый набор (tool_call_id, args, result) для отладки. Если агент делает что-то странное, журнал результатов инструментов — первое место, которое следует проверить.

Формат результата инструмента

На что указывает tool_call_id в сообщении инструмента?

Итоги

Теперь Вы полностью владеете циклом вызова инструмента. Следующий курс: память — третья основа агентов.

Часто задаваемые вопросы

Урок «Возврат результатов модели» бесплатный?

Да — полный текст урока «Возврат результатов модели» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.

Чему я научусь в уроке «Возврат результатов модели»?

Форматируйте вывод инструментов как сообщения с ролью инструмента, чтобы модель могла прочитать их и продолжить диалог. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Agents?

Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Возврат результатов модели»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Agents?

Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Как работает вызов функций
  2. Определение схем инструментов (JSON Schema)
  3. Выбор инструментов во время выполнения
  4. Возврат результатов модели
← Назад к AI Agents