Skip to content

Рассуждения

Продвинутые возможности рассуждения с Responses API

Responses API поддерживает продвинутые возможности рассуждения, позволяя моделям показать свой внутренний процесс рассуждения с настраиваемыми уровнями усилий.

Настройка рассуждений

Настройте поведение рассуждений используя параметр reasoning:

typescript
const response = await fetch('https://api.aitunnel.ru/v1/responses', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sk-aitunnel-xxx',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'o1-preview',
    input: 'В чем смысл жизни?',
    reasoning: {
      effort: 'high'
    },
    max_output_tokens: 9000,
  }),
});

const result = await response.json();
console.log(result);
python
import requests

response = requests.post(
    'https://api.aitunnel.ru/v1/responses',
    headers={
        'Authorization': 'Bearer sk-aitunnel-xxx',
        'Content-Type': 'application/json',
    },
    json={
        'model': 'o1-preview',
        'input': 'В чем смысл жизни?',
        'reasoning': {
            'effort': 'high'
        },
        'max_output_tokens': 9000,
    }
)

result = response.json()
print(result)
bash
curl -X POST https://api.aitunnel.ru/v1/responses \
  -H "Authorization: Bearer sk-aitunnel-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "o1-preview",
    "input": "В чем смысл жизни?",
    "reasoning": {
      "effort": "high"
    },
    "max_output_tokens": 9000
  }'

Уровни усилий рассуждения

Параметр effort контролирует, сколько вычислительных усилий модель вкладывает в рассуждение:

Уровень усилийОписание
minimalБазовое рассуждение с минимальными вычислительными усилиями
lowЛегкое рассуждение для простых проблем
mediumСбалансированное рассуждение для умеренной сложности
highГлубокое рассуждение для сложных проблем

Пример сложного рассуждения

Для сложных математических или логических задач:

typescript
const response = await fetch('https://api.aitunnel.ru/v1/responses', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sk-aitunnel-xxx',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'o1-preview',
    input: [
      {
        type: 'message',
        role: 'user',
        content: [
          {
            type: 'input_text',
            text: 'Был ли 1995 год 30 лет назад? Покажи свои рассуждения.',
          },
        ],
      },
    ],
    reasoning: {
      effort: 'high'
    },
    max_output_tokens: 9000,
  }),
});

const result = await response.json();
console.log(result);
python
response = requests.post(
    'https://api.aitunnel.ru/v1/responses',
    headers={
        'Authorization': 'Bearer sk-aitunnel-xxx',
        'Content-Type': 'application/json',
    },
    json={
        'model': 'o1-preview',
        'input': [
            {
                'type': 'message',
                'role': 'user',
                'content': [
                    {
                        'type': 'input_text',
                        'text': 'Был ли 1995 год 30 лет назад? Покажи свои рассуждения.',
                    },
                ],
            },
        ],
        'reasoning': {
            'effort': 'high'
        },
        'max_output_tokens': 9000,
    }
)

result = response.json()
print(result)

Рассуждения в контексте разговора

Включите рассуждения в многоходовые разговоры:

typescript
const response = await fetch('https://api.aitunnel.ru/v1/responses', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sk-aitunnel-xxx',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'o1-preview',
    input: [
      {
        type: 'message',
        role: 'user',
        content: [
          {
            type: 'input_text',
            text: 'Какой твой любимый цвет?',
          },
        ],
      },
      {
        type: 'message',
        role: 'assistant',
        id: 'msg_abc123',
        status: 'completed',
        content: [
          {
            type: 'output_text',
            text: "У меня нет любимого цвета.",
            annotations: []
          }
        ]
      },
      {
        type: 'message',
        role: 'user',
        content: [
          {
            type: 'input_text',
            text: 'Сколько Земель поместится на Марсе?',
          },
        ],
      },
    ],
    reasoning: {
      effort: 'high'
    },
    max_output_tokens: 9000,
  }),
});

const result = await response.json();
console.log(result);
python
response = requests.post(
    'https://api.aitunnel.ru/v1/responses',
    headers={
        'Authorization': 'Bearer sk-aitunnel-xxx',
        'Content-Type': 'application/json',
    },
    json={
        'model': 'o1-preview',
        'input': [
            {
                'type': 'message',
                'role': 'user',
                'content': [
                    {
                        'type': 'input_text',
                        'text': 'Какой твой любимый цвет?',
                    },
                ],
            },
            {
                'type': 'message',
                'role': 'assistant',
                'id': 'msg_abc123',
                'status': 'completed',
                'content': [
                    {
                        'type': 'output_text',
                        'text': "У меня нет любимого цвета.",
                        'annotations': []
                    }
                ]
            },
            {
                'type': 'message',
                'role': 'user',
                'content': [
                    {
                        'type': 'input_text',
                        'text': 'Сколько Земель поместится на Марсе?',
                    },
                ],
            },
        ],
        'reasoning': {
            'effort': 'high'
        },
        'max_output_tokens': 9000,
    }
)

result = response.json()
print(result)

Стриминговые рассуждения

Включите стриминг, чтобы видеть развитие рассуждений в реальном времени:

typescript
const response = await fetch('https://api.aitunnel.ru/v1/responses', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sk-aitunnel-xxx',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'o1-preview',
    input: 'Реши пошагово: Если поезд едет со скоростью 60 км/ч в течение 2,5 часов, какое расстояние он преодолеет?',
    reasoning: {
      effort: 'medium'
    },
    stream: true,
    max_output_tokens: 9000,
  }),
});

const reader = response.body?.getReader();
const decoder = new TextDecoder();

while (true) {
  const { done, value } = await reader!.read();
  if (done) break;

  const chunk = decoder.decode(value);
  const lines = chunk.split('\n');

  for (const line of lines) {
    if (line.startsWith('data: ')) {
      const data = line.slice(6);
      if (data === '[DONE]') return;

      try {
        const parsed = JSON.parse(data);
        if (parsed.type === 'response.reasoning.delta') {
          console.log('Рассуждение:', parsed.delta);
        }
      } catch (e) {
        // Пропускаем невалидный JSON
      }
    }
  }
}
python
import requests
import json

response = requests.post(
    'https://api.aitunnel.ru/v1/responses',
    headers={
        'Authorization': 'Bearer sk-aitunnel-xxx',
        'Content-Type': 'application/json',
    },
    json={
        'model': 'o1-preview',
        'input': 'Реши пошагово: Если поезд едет со скоростью 60 км/ч в течение 2,5 часов, какое расстояние он преодолеет?',
        'reasoning': {
            'effort': 'medium'
        },
        'stream': True,
        'max_output_tokens': 9000,
    },
    stream=True
)

for line in response.iter_lines():
    if line:
        line = line.decode('utf-8')
        if line.startswith('data: '):
            data = line[6:]
            if data == '[DONE]':
                break
            
            try:
                parsed = json.loads(data)
                if parsed.get('type') == 'response.reasoning.delta':
                    print('Рассуждение:', parsed.get('delta'))
            except json.JSONDecodeError:
                continue

Ответ с рассуждениями

Когда рассуждения включены, ответ содержит информацию о рассуждениях:

json
{
  "id": "resp_1234567890",
  "object": "response",
  "created_at": 1234567890,
  "model": "o1-preview",
  "output": [
    {
      "type": "reasoning",
      "id": "rs_abc123",
      "encrypted_content": "gAAAAABotI9-FK1PbhZhaZk4yMrZw3XDI1AWFaKb9T0NQq7LndK6zaRB...",
      "summary": [
        "Сначала мне нужно определить текущий год",
        "Затем вычислить разность с 1995 годом",
        "Наконец, сравнить это с 30 годами"
      ]
    },
    {
      "type": "message",
      "id": "msg_xyz789",
      "status": "completed",
      "role": "assistant",
      "content": [
        {
          "type": "output_text",
          "text": "Да. В 2025 году 1995 год был 30 лет назад. Фактически, на сегодняшний день (31 августа 2025 года) прошло ровно 30 лет с 31 августа 1995 года.",
          "annotations": []
        }
      ]
    }
  ],
  "usage": {
    "input_tokens": 15,
    "output_tokens": 85,
    "output_tokens_details": {
      "reasoning_tokens": 45
    },
    "total_tokens": 100
  },
  "status": "completed"
}

Структура ответа с рассуждениями

  • reasoning - Объект с зашифрованным содержимым рассуждений
  • encrypted_content - Зашифрованный текст внутренних рассуждений модели
  • summary - Краткое изложение основных шагов рассуждения
  • reasoning_tokens - Количество токенов, использованных для рассуждений

Лучшие практики

  1. Выбирайте подходящие уровни усилий: Используйте high для сложных проблем, low для простых задач
  2. Учитывайте использование токенов: Рассуждения увеличивают потребление токенов
  3. Используйте стриминг: Для длинных цепочек рассуждений стриминг обеспечивает лучший пользовательский опыт
  4. Включайте контекст: Предоставляйте достаточный контекст для эффективного рассуждения модели

Совместимые модели

Рассуждения поддерживаются следующими моделями:

  • o1-preview - Основная модель для рассуждений
  • o1-mini - Облегченная версия для простых задач
  • o1-pro - Продвинутая модель для сложных рассуждений

Примеры использования

Математические задачи

python
response = requests.post(
    'https://api.aitunnel.ru/v1/responses',
    headers={
        'Authorization': 'Bearer sk-aitunnel-xxx',
        'Content-Type': 'application/json',
    },
    json={
        'model': 'o1-preview',
        'input': 'Найди площадь треугольника со сторонами 3, 4 и 5 см. Покажи все вычисления.',
        'reasoning': {
            'effort': 'medium'
        }
    }
)

Логические головоломки

python
response = requests.post(
    'https://api.aitunnel.ru/v1/responses',
    headers={
        'Authorization': 'Bearer sk-aitunnel-xxx',
        'Content-Type': 'application/json',
    },
    json={
        'model': 'o1-preview',
        'input': 'У тебя есть 12 шаров, один из которых тяжелее остальных. Как найти его за 3 взвешивания на весах?',
        'reasoning': {
            'effort': 'high'
        }
    }
)

Ограничения

  • Рассуждения доступны только для определенных моделей (o1 серии)
  • Увеличивают время ответа и стоимость запроса
  • Содержимое рассуждений зашифровано и недоступно для чтения
  • Качество рассуждений зависит от сложности задачи

Совет

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

AITUNNEL