Дата публикации
ai_products

llm 0.32a2: переход на OpenAI Responses API и тонкая настройка рассуждений

Что нового

Свежий релиз llm 0.32a2 приносит главное изменение: поддержка OpenAI Responses API и новый способ работы с «рассуждающими» моделями уровня GPT‑5.

Ключевые обновления:

  • Поддержка эндпоинта /v1/responses вместо /v1/chat/completions для большинства моделей с развитым рассуждением.
  • Новые классы Responses и AsyncResponses для работы с Responses API.
  • Старые классы Chat и AsyncChat продолжают работать без изменений — плагины, которые их импортируют, не ломаются.
  • По умолчанию через Responses API теперь ходят модели:
    • o1
    • o3-mini
    • o3
    • o4-mini
    • gpt-5
    • gpt-5-mini
    • gpt-5-nano
    • gpt-5.1
    • gpt-5.2
    • gpt-5.4
    • gpt-5.4-mini
    • gpt-5.4-nano
    • gpt-5.5
    • и их «прикреплённые по дате» варианты.
  • Возможность откатиться на старый путь /v1/chat/completions для любой из этих моделей флагом CLI: -o chat_completions 1.
  • Зашифрованные элементы рассуждений сохраняются как provider_metadata на объектах ReasoningPart и передаются обратно в OpenAI в следующих ходах диалога.
  • Режим «видимых рассуждений» теперь запрашивается через "summary": "auto", чтобы текст рассуждений стримился, когда модель его выдаёт.
  • Новый CLI-флаг: llm -m <model> --options — показывает список доступных опций для конкретной модели.
  • Опция -R/--no-reasoning переименована в -R/--hide-reasoning.
  • В Python-API появился параметр hide_reasoning=True у:
    • model.prompt()
    • conversation.prompt()
    • model.chain()
    • conversation.chain()
    • и их асинхронных версий.
  • Этот же флаг доступен плагинам через prompt.hide_reasoning — они могут решать, запрашивать ли «видимые» резюме рассуждений у провайдеров.
  • Новый параметр options=dict у:
    • Model.prompt()
    • Conversation.prompt()
    • Response.reply()
    • и их async-эквивалентов — по тому же паттерну, который уже использует .chain().
  • Старый формат **kwargs для настройки моделей пока работает для обратной совместимости, но больше не документируется и в будущем исчезнет.

Цифр по скорости, стоимости токена или размеру контекста в релизе нет. Основной упор — на API и управляемость рассуждений.

Как это работает

Переезд на /v1/responses

OpenAI перевела «рассуждающие» модели уровня GPT‑5 на новый эндпоинт /v1/responses. Он позволяет модели:

  • делать несколько вызовов инструментов внутри одного ответа;
  • чередовать текст и вызовы инструментов;
  • возвращать детальные шаги рассуждения, если это разрешено настройками.

llm 0.32a2 добавляет для этого отдельные классы Responses и AsyncResponses. Они инкапсулируют логику работы с новым API. При этом:

  • если вы или плагины продолжаете использовать Chat / AsyncChat, всё остаётся как раньше;
  • при работе с перечисленными моделями (o1, линейка o3, o4-mini, вся серия GPT‑5) llm по умолчанию выбирает Responses API.

При необходимости можно принудительно вернуть старый путь:

llm -m gpt-5 -o chat_completions 1 "Ваш промпт"

Здесь -o chat_completions 1 говорит llm: используй /v1/chat/completions, а не /v1/responses.

Работа с рассуждениями

Модели с расширенным reasoning часто генерируют не только финальный ответ, но и внутренние шаги рассуждения. В llm 0.32a2 это оформлено аккуратнее:

  • Зашифрованные части рассуждений (то, что OpenAI не показывает в открытом виде) сохраняются как provider_metadata на объектах ReasoningPart.
  • При следующем запросе к той же беседе llm отправляет эти данные обратно в OpenAI. Это помогает модели «помнить» структуру рассуждений между ходами.

Запрос резюме рассуждений теперь идёт с параметром:

"summary": "auto"

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

Если вы не хотите видеть ход мыслей модели, используйте:

  • в CLI: -R или --hide-reasoning;
  • в Python: hide_reasoning=True.

Новый параметр options в Python-API

Раньше дополнительные настройки модели чаще всего передавали через **kwargs. Теперь llm выравнивает интерфейс под .chain() и вводит явный параметр options:

response = model.prompt(
    "Напиши краткое резюме",
    options={
        "temperature": 0.2,
        "max_tokens": 512,
    },
)

Тот же подход теперь работает и для:

  • Conversation.prompt()
  • Response.reply()
  • их асинхронных версий.

**kwargs всё ещё принимаются, но это временная мера. В будущем этот путь уберут, так что лучше уже сейчас переходить на options=dict.

Что это значит для вас

Если вы пользуетесь llm из CLI

Для вас появились три практичные вещи:

  1. Контроль над рассуждениями

    • Хотите видеть, как GPT‑5 приходит к ответу — оставляете поведение по умолчанию.
    • Не хотите засорять вывод промежуточными шагами — запускаете:
    llm -m gpt-5 -R "Сделай техрезюме релиза"
    

    или

    llm -m gpt-5 --hide-reasoning "Сделай техрезюме релиза"
    
  2. Быстрая проверка возможностей модели

    Новый флаг:

    llm -m gpt-5 --options
    

    покажет, какие опции llm поддерживает для этой модели. Удобно, если вы не помните точные имена параметров или хотите увидеть весь список.

  3. Выбор между Responses API и старым Chat Completions

    Если ваш пайплайн завязан на предсказуемое поведение /v1/chat/completions, можно принудительно откатиться:

    llm -m gpt-5 -o chat_completions 1 "Старый привычный режим"
    

    Это полезно, если вы:

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

Если вы пишете плагины или используете Python-API

Релиз заметно упрощает жизнь разработчикам:

  • Тонкая настройка рассуждений

    Теперь вы можете явно уважать выбор пользователя: хочет он видеть reasoning или нет. Внутри плагина у вас есть prompt.hide_reasoning:

    def my_model_plugin(prompt):
        if prompt.hide_reasoning:
            # Не запрашиваем видимое резюме рассуждений у провайдера
            request_summary = False
        else:
            request_summary = True
        ...
    
  • Единый способ передавать опции

    Вместо россыпи **kwargs — один словарь:

    response = model.prompt(
        "Сгенерируй план статьи",
        options={
            "temperature": 0.7,
            "max_tokens": 800,
        },
        hide_reasoning=True,
    )
    

    Такой же паттерн работает для цепочек:

    async for chunk in conversation.chain(
        "Разбей задачу на шаги",
        options={"temperature": 0.3},
        hide_reasoning=False,
    ):
        print(chunk, end="")
    
  • Работа с зашифрованными рассуждениями

    Вам не нужно вручную хранить и прокидывать служебные данные reasoning. llm сам кладёт их в provider_metadata на ReasoningPart и отправляет обратно в OpenAI. Это снижает риск сломать контекст, если вы строите сложные цепочки запросов.

Где это полезно

  • Аналитика и сложные цепочки инструментов

    Если вы строите пайплайны, где GPT‑5 вызывает несколько инструментов подряд, новый Responses API делает это естественным. llm уже умеет с ним работать, вам не нужно вручную собирать запросы.

  • Отладка промптов и агентных систем

    Видимые рассуждения удобно использовать для отладки: вы видите, где модель «съезжает» с логики. Когда всё стабилизировалось, можно включить hide_reasoning.

  • Продукты с жёсткими требованиями к UX

    Если вы интегрируете GPT‑5 в пользовательский интерфейс, где нельзя показывать «внутреннюю кухню», флаг hide_reasoning позволяет жёстко зафиксировать поведение.

Геоблокировок и требований VPN в релизе llm не описано, но сам llm зависит от доступности API OpenAI. Если OpenAI ограничивает доступ из России, придётся решать это на сетевом уровне (VPN, прокси, вынос запросов на бэкенд в другой юрисдикции).

Место на рынке

llm 0.32a2 — это не конкурент GPT‑5 или Claude 3.5. Это обвязка вокруг разных моделей, в том числе GPT‑5 и линейки o1/o3/o4, с удобным CLI и Python-API.

На фоне других клиентов к OpenAI и аналогичных обвязок релиз делает два акцента:

  • Полноценная поддержка нового Responses API для целой линейки моделей OpenAI.
  • Чёткий контроль над reasoning-токенами и единый интерфейс опций через options=dict.

Чисел по скорости запросов через Responses API относительно старого Chat Completions, сравнений с прямой работой через HTTP или SDK других компаний в релизе нет. Делать выводы о производительности и стоимости можно только по своей практике.

Если вы уже используете llm как основной инструмент для работы с GPT‑5 и другими моделями OpenAI, обновление до 0.32a2 имеет смысл почти всегда: оно не ломает старый код, но даёт больше контроля и доступ к Responses API. Если вы только выбираете обвязку, это релиз показывает, что llm успевает за изменениями в API OpenAI и делает упор на прозрачное управление рассуждениями и настройками моделей.


Читайте также