база знаний llmgw

Как пользоваться llmgw

Подробные инструкции по сценариям: повседневная работа с нейросетями, корпоративный чат и агенты, подключение IDE и SDK к OpenAI-compatible API.

Что понадобится в любом сценарии

Создайте API-ключ в личном кабинете. Дальше почти везде нужны только два параметра:

Base URLhttps://api.llmgw.ru/v1
API Keyключ из личного кабинета (формат sk-...)

Важно: не публикуйте ключ в чатах и открытых репозиториях. Если ключ утёк — отзовите его в кабинете и создайте новый.

01 · личное использование

Частным пользователям

Один ключ открывает доступ сразу ко многим нейросетям (GPT, Claude, DeepSeek и другим) — без зарубежных карт и VPN. Ниже — чаты, свой Telegram-бот, no-code и готовые промпты.

Способ 1. Готовые приложения-чаты

Проще всего пользоваться нейросетями через готовые приложения, которые поддерживают «свой API-ключ».

Chatbox (Windows, macOS, Linux, iOS, Android)

  1. Установите Chatbox с официального сайта или из магазина приложений.
  2. Настройки → Model Provider → Add Custom Provider (тип OpenAI API Compatible).
  3. Укажите:
    • API Host: https://api.llmgw.ru/v1
    • API Key: ваш ключ
    • Model: например gpt-4o (полный список — в личном кабинете)
  4. Готово — общайтесь с любой моделью, переключая её в шапке чата.

Аналогично настраиваются другие приложения с поддержкой custom API: PageAssist (расширение для браузера), LobeChat, NextChat и др. Везде принцип один: адрес + ключ + имя модели.

Способ 2. Свой бот в Telegram

Свой бот — это личный ChatGPT прямо в Telegram: на телефоне, без установки приложений. Создаётся за 15 минут.

Шаг 1. Создайте бота у BotFather

  1. В Telegram откройте @BotFather.
  2. Команда /newbot → придумайте имя и username бота.
  3. BotFather выдаст токен бота — сохраните его.

Шаг 2. Код бота (Python)

Установите зависимости:

pip install aiogram openai

Создайте файл bot.py:

import asyncio
from aiogram import Bot, Dispatcher, types
from openai import AsyncOpenAI

TELEGRAM_TOKEN = "ТОКЕН_ОТ_BOTFATHER"
LLMGW_KEY = "sk-ВАШ_КЛЮЧ_LLMGW"
MODEL = "gpt-4o"  # любая модель из каталога LLMGW

client = AsyncOpenAI(
    base_url="https://api.llmgw.ru/v1",
    api_key=LLMGW_KEY,
)

bot = Bot(token=TELEGRAM_TOKEN)
dp = Dispatcher()

# история диалога на каждого пользователя
histories: dict[int, list] = {}

@dp.message(lambda m: m.text == "/start")
async def start(message: types.Message):
    histories[message.from_user.id] = []
    await message.answer("Привет! Я нейросеть. Задай любой вопрос. /reset — очистить диалог.")

@dp.message(lambda m: m.text == "/reset")
async def reset(message: types.Message):
    histories[message.from_user.id] = []
    await message.answer("Диалог очищен.")

@dp.message()
async def chat(message: types.Message):
    uid = message.from_user.id
    history = histories.setdefault(uid, [])
    history.append({"role": "user", "content": message.text})

    response = await client.chat.completions.create(
        model=MODEL,
        messages=history[-20:],  # держим последние 20 сообщений
    )
    answer = response.choices[0].message.content
    history.append({"role": "assistant", "content": answer})

    await message.answer(answer)

async def main():
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

Шаг 3. Запуск

python bot.py

Напишите своему боту в Telegram — он ответит. Чтобы бот работал круглосуточно, запустите его на любом дешёвом VPS или домашнем мини-сервере.

Пример диалога:

Вы:  Составь список покупок для борща на 6 порций
Бот: Вот список: говядина на кости 600 г, свёкла 2 шт, капуста 300 г,
     картофель 4 шт, морковь 1 шт, лук 1 шт, томатная паста 2 ст.л. ...

Вы:  Замени говядину, жена не ест красное мясо
Бот: Тогда возьмите курицу (бёдра, 700 г) — бульон получится легче,
     варить 40 минут вместо полутора часов. Остальное без изменений.

Бот помнит контекст диалога — можно уточнять и переспрашивать, как в обычной переписке.

Идеи доработок

  • Команда /model для переключения между моделями (GPT для текстов, DeepSeek для кода).
  • Ограничьте бота своим Telegram ID, чтобы им не пользовались посторонние:
  ALLOWED = {123456789}  # ваш ID — узнать можно у @userinfobot
  if message.from_user.id not in ALLOWED:
      return
  • Распознавание голосовых: скачивайте voice-сообщение и отправляйте в модель с поддержкой аудио.
Способ 3. Автоматизации без кода

Ключ LLMGW работает в популярных no-code сервисах — выбирайте OpenAI-совместимый провайдер и указывайте адрес https://api.llmgw.ru/v1:

  • n8n — свяжите Telegram-триггер с узлом AI Agent: получите бота вообще без программирования.
  • Таблицы и скрипты — вызывайте API из Google Apps Script или Python-скриптов для перевода, суммаризации, генерации описаний.
Повседневные сценарии — готовые промпты

Скопируйте и подставьте своё:

Тексты и переписка:

Напиши поздравление коллеге с юбилеем (50 лет), он инженер, любит рыбалку.
Тепло, с юмором, без пафоса, до 5 предложений.
Вот моё резюме [вставить] и вакансия [вставить].
Перепиши раздел «О себе» под требования вакансии, не выдумывая опыт.

Учёба и дети:

Объясни, почему самолёт летает, как для ребёнка 8 лет,
с примером из жизни.
Проверь сочинение по критериям ОГЭ, укажи ошибки и как исправить,
но не переписывай за меня: [текст]

Перевод:

Переведи на английский для деловой переписки с отелем — вежливо,
но настойчиво: «Мы бронировали номер с видом на море, а дали во двор.
Просим заменить номер или вернуть разницу».

Быт и финансы:

Составь меню на неделю на семью из 3 человек, бюджет 6000 ₽,
без рыбы, ужины не дольше 30 минут готовки. Плюс общий список покупок.
Вот тарифы трёх банков по вкладам [вставить условия].
Сравни таблицей: реальная доходность, подводные камни, что выбрать под сумму 300 000 ₽ на год.

Документы:

Перескажи этот договор аренды простыми словами: мои обязанности,
за что могут оштрафовать, как расторгнуть. Процитируй важные пункты: [текст]

Код и таблицы:

Нужна формула для Google Таблиц: в колонке A даты, в B суммы.
Посчитай сумму за текущий месяц.
Советы по экономии
  1. Для простых вопросов используйте недорогие модели — разница в цене между моделями достигает десятков раз.
  2. Очищайте историю диалога (/reset в боте), когда меняете тему: длинная история увеличивает расход токенов с каждым сообщением.
  3. Следите за расходом в личном кабинете llmgw.ru и поставьте лимит на ключ.
Безопасность ключа
  • Не публикуйте ключ в открытых репозиториях и чатах.
  • Если ключ «утёк» — отзовите его в личном кабинете и создайте новый: это делается в один клик и бесплатно.
02 · корпоративное использование

Бизнесу

Корпоративный ChatGPT на вашей инфраструктуре и раздельные ключи для агентов с контролем бюджета.

1. Корпоративный чат для сотрудников на базе OpenWebUI

OpenWebUI — открытая self-hosted платформа с интерфейсом в стиле ChatGPT: учётные записи сотрудников, группы, права доступа, история диалогов, работа с документами (RAG). В связке с LLMGW вы получаете корпоративный ChatGPT, развёрнутый на вашей инфраструктуре, с единым биллингом и контролем расходов через LLMGW.

Архитектура

Сотрудники → OpenWebUI (ваш сервер) → api.llmgw.ru → модели (GPT, Claude, DeepSeek, ...)

Данные диалогов хранятся у вас. Наружу уходят только запросы к API.

Требования

  • Сервер с Docker (2 CPU / 4 ГБ RAM достаточно для команды до ~100 человек — сами модели работают на стороне LLMGW).
  • API-ключ LLMGW (рекомендуем отдельный ключ на организацию или отдел).

Установка за 5 минут

docker run -d \
  --name open-webui \
  -p 3000:8080 \
  -e OPENAI_API_BASE_URL="https://api.llmgw.ru/v1" \
  -e OPENAI_API_KEY="sk-ВАШ_КЛЮЧ" \
  -v open-webui:/app/backend/data \
  --restart always \
  ghcr.io/open-webui/open-webui:main

Откройте http://ваш-сервер:3000. Первый зарегистрированный пользователь становится администратором.

Вариант с docker-compose

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      - OPENAI_API_BASE_URL=https://api.llmgw.ru/v1
      - OPENAI_API_KEY=sk-ВАШ_КЛЮЧ
      - WEBUI_NAME=Чат «Название компании»
      - ENABLE_SIGNUP=false          # регистрация только через админа
      - DEFAULT_USER_ROLE=user
    volumes:
      - open-webui:/app/backend/data
    restart: always

volumes:
  open-webui:

Настройка после установки

  1. Модели. Admin Panel → Settings → Connections — проверьте, что подключение к LLMGW активно. В разделе Models скройте лишние модели и задайте модель по умолчанию.
  2. Пользователи и группы. Admin Panel → Users. Отключите свободную регистрацию (ENABLE_SIGNUP=false), заводите сотрудников вручную или подключите SSO (OpenWebUI поддерживает OAuth/OIDC — Keycloak, Google Workspace и др.).
  3. Права доступа. Группам можно выдавать разные наборы моделей: например, дорогие модели — только аналитикам, базовые — всем.
  4. Работа с документами (RAG). Сотрудники загружают документы прямо в чат или в общие «Knowledge»-коллекции — модель отвечает с опорой на них. Регламенты, база знаний, шаблоны договоров.
  5. Системные промпты. Задайте корпоративный системный промпт (тон, запрет на выдумывание фактов, требования к оформлению) на уровне моделей или рабочих пространств.

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

Продажи:

Вот переписка с клиентом [вставить]. Составь ответ на возражение
«у конкурентов дешевле»: без давления, с акцентом на стоимость владения.

HR:

Составь текст вакансии инженера данных: удалёнка, стек Python/Airflow/ClickHouse,
зарплатная вилка не указывается. Тон — живой, без канцелярита.

Юристы (с загруженным документом):

[прикреплён договор.docx]
Найди в договоре пункты с рисками для нас как исполнителя:
штрафы, односторонние права заказчика, неограниченная ответственность.
Процитируй каждый пункт и объясни риск.

Маркетинг:

Из этого пресс-релиза сделай: пост для Telegram (до 800 знаков),
пост для VK, короткий анонс для email-рассылки. Сохрани факты, убери воду.

Пример: база знаний компании (RAG)

  1. Admin Panel → Knowledge → создайте коллекцию «Регламенты».
  2. Загрузите PDF/DOCX: правила отпусков, командировок, ИТ-политики.
  3. Сотрудник в чате пишет #Регламенты и задаёт вопрос:
   #Регламенты Сколько дней согласовывается командировка и кто утверждает?
  1. Модель отвечает с опорой на загруженные документы и указывает источник.

Так снимается значительная часть однотипных вопросов к HR и офис-менеджеру.

Контроль расходов

Выдавайте OpenWebUI отдельный ключ LLMGW с месячным бюджетом — расходы всей платформы будут видны одной строкой в личном кабинете и не смешаются с другими интеграциями. При необходимости заведите по ключу на отдел: тогда видно, кто сколько потребляет.

2. Токены для ИИ-агентов

Агенты (автоматизации, боты, пайплайны) — это программы, которые обращаются к API без участия человека, поэтому к их ключам другие требования:

Правила выдачи ключей агентам

  1. Один агент — один ключ. Никогда не переиспользуйте личный ключ разработчика в продакшн-агенте.
  2. Бюджетные лимиты. Ставьте на ключ агента месячный бюджет и rate limit — зациклившийся агент не сожжёт бюджет компании за ночь.
  3. Ограничение моделей. Если агент должен работать только на одной модели — ограничьте ключ этой моделью в личном кабинете.
  4. Ротация. Держите ключи в секрет-менеджере (Vault, переменные окружения CI/CD), не коммитьте в репозитории.

Все агентские ключи создаются в личном кабинете LLMGW: Ключи → Создать ключ → тип «Сервисный», там же задаются бюджет, лимиты и список разрешённых моделей.

Интеграция с инструментами разработки агентов

Везде используется одна пара параметров: base_url = https://api.llmgw.ru/v1 и ключ.

LangChain / LangGraph (Python)

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="gpt-4o",
    base_url="https://api.llmgw.ru/v1",
    api_key="sk-КЛЮЧ_АГЕНТА",
    temperature=0,
)

Для LangGraph этот же объект llm передаётся в узлы графа — дополнительной настройки не требуется.

OpenAI Agents SDK (Python)

from openai import AsyncOpenAI
from agents import set_default_openai_client, set_default_openai_api

client = AsyncOpenAI(
    base_url="https://api.llmgw.ru/v1",
    api_key="sk-КЛЮЧ_АГЕНТА",
)
set_default_openai_client(client)
set_default_openai_api("chat_completions")

CrewAI

from crewai import LLM

llm = LLM(
    model="openai/gpt-4o",
    base_url="https://api.llmgw.ru/v1",
    api_key="sk-КЛЮЧ_АГЕНТА",
)

LlamaIndex

from llama_index.llms.openai_like import OpenAILike

llm = OpenAILike(
    model="gpt-4o",
    api_base="https://api.llmgw.ru/v1",
    api_key="sk-КЛЮЧ_АГЕНТА",
    is_chat_model=True,
)

Полный пример: агент-классификатор обращений в поддержку

from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field

class Ticket(BaseModel):
    category: str = Field(description="billing | technical | sales | other")
    urgency: str = Field(description="low | medium | high")
    summary: str = Field(description="суть обращения одной фразой")

llm = ChatOpenAI(
    model="gpt-4o",
    base_url="https://api.llmgw.ru/v1",
    api_key="sk-КЛЮЧ_АГЕНТА",
    temperature=0,
).with_structured_output(Ticket)

email = """Здравствуйте! Третий день не приходят чеки об оплате,
бухгалтерия требует закрывающие документы до конца недели, горим!"""

ticket = llm.invoke(f"Классифицируй обращение клиента:\n\n{email}")
print(ticket)
# category='billing' urgency='high' summary='Не приходят чеки, нужны закрывающие документы до конца недели'

Дальше результат уходит в CRM или назначается на нужный отдел — уже обычным кодом.

n8n (no-code автоматизации)

  1. Credentials → New → OpenAI.
  2. API Key: ключ агента.
  3. Base URL: https://api.llmgw.ru/v1.
  4. Используйте узлы OpenAI / AI Agent как обычно — они пойдут через LLMGW.

Пример workflow «Дайджест почты» в n8n:

Gmail Trigger (новое письмо)
   → OpenAI: «Определи: спам / требует ответа / информационное.
      Если требует ответа — составь черновик в деловом тоне»
   → IF (требует ответа)
      → Gmail: сохранить черновик ответа
   → Telegram: отправить менеджеру сводку письма и категорию

Собирается из четырёх узлов без единой строки кода.

Vercel AI SDK (TypeScript)

import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
import { generateText } from "ai";

const llmgw = createOpenAICompatible({
  name: "llmgw",
  baseURL: "https://api.llmgw.ru/v1",
  apiKey: process.env.LLMGW_API_KEY,
});

const { text } = await generateText({
  model: llmgw("gpt-4o"),
  prompt: "Составь план запуска рассылки",
});

Dify / Flowise и другие low-code платформы

В настройках провайдера моделей выберите OpenAI-API-compatible, укажите base URL https://api.llmgw.ru/v1, ключ и имена моделей из каталога /v1/models.

Типовая схема для компании

ПотребительКлючОграничения
OpenWebUI (чат сотрудников)sk-...-webuiбюджет N ₽/мес, все разрешённые модели
Агент поддержки (n8n)sk-...-supportодна модель, rate limit, бюджет
Пайплайн аналитики (LangChain)sk-...-analyticsмощная модель, бюджет
Разработчики (IDE)личные ключибюджет на человека

Такое разделение даёт прозрачный учёт расходов по направлениям и позволяет мгновенно отозвать ключ скомпрометированной интеграции, не задев остальные.

Условия для юридических лиц →

03 · разработка

Разработчикам

Любой инструмент с поддержкой OpenAI API подключается к llmgw заменой Base URL и ключа. Имена моделей берите из GET /v1/models.

Параметры подключения

ПараметрЗначение
Base URLhttps://api.llmgw.ru/v1
API Keyключ из личного кабинета (sk-...)

Список моделей:

curl https://api.llmgw.ru/v1/models \
  -H "Authorization: Bearer sk-ВАШ_КЛЮЧ"

В примерах ниже — условные имена (gpt-4o, claude-sonnet-4-6, deepseek-v3). Подставьте актуальные из каталога.

Быстрая проверка ключа

curl https://api.llmgw.ru/v1/chat/completions \
  -H "Authorization: Bearer sk-ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "Привет!"}]
  }'

Пример ответа:

{
  "id": "chatcmpl-9f3a...",
  "object": "chat.completion",
  "model": "gpt-4o",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Привет! Чем могу помочь?"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 8,
    "total_tokens": 17
  }
}

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

Cursor
  1. Откройте Cursor Settings → Models.
  2. В разделе OpenAI API Key вставьте ваш ключ LLMGW.
  3. Включите переключатель Override OpenAI Base URL и укажите https://api.llmgw.ru/v1.
  4. Нажмите Verify — Cursor проверит соединение.
  5. В списке моделей отключите модели, которых нет в LLMGW, и добавьте нужные через Add model (имя должно точно совпадать с именем из /v1/models).

Особенности Cursor:

  • При включённом custom base URL работают чат и inline-редактирование (Cmd+K). Часть фирменных функций Cursor (Tab-автодополнение) использует собственные модели Cursor и через сторонний API не работает.
  • Если Verify выдаёт ошибку — проверьте, что в списке не осталось включённых моделей, отсутствующих в LLMGW: Cursor валидирует ключ по первой активной модели.
Cline (VS Code)
  1. Установите расширение Cline из маркетплейса VS Code.
  2. Откройте настройки Cline (шестерёнка в панели Cline).
  3. API Provider: выберите OpenAI Compatible.
  4. Заполните поля:
    • Base URL: https://api.llmgw.ru/v1
    • API Key: sk-ВАШ_КЛЮЧ
    • Model ID: имя модели, например claude-sonnet-4-6
  5. Сохраните. Cline готов к работе.

Рекомендация: для агентных задач Cline активно расходует токены — заведите под него отдельный ключ с бюджетным лимитом (см. раздел про токены в документации для бизнеса).

Примеры задач для Cline:

Найди в проекте все места, где пароль логируется в открытом виде, и исправь их.
Добавь в API эндпоинт POST /users/{id}/avatar: загрузка файла до 5 МБ,
валидация типа (jpg/png), сохранение в S3, тесты.
Прочитай README и docker-compose.yml, подними проект локально
и скажи, что нужно поправить, чтобы он завёлся на macOS.

Cline сам прочитает файлы, внесёт изменения и покажет diff перед применением.

Roo Code (VS Code)

Настраивается аналогично Cline:

  1. Установите расширение Roo Code.
  2. В настройках профиля выберите API Provider → OpenAI Compatible.
  3. Base URL: https://api.llmgw.ru/v1, ключ и Model ID — как выше.
  4. Roo Code поддерживает несколько профилей — удобно завести отдельные профили под разные модели (быстрая для рутины, мощная для сложных задач).
OpenCode

OpenCode настраивается через конфигурационный файл ~/.config/opencode/opencode.json (или opencode.json в корне проекта):

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "llmgw": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "LLMGW",
      "options": {
        "baseURL": "https://api.llmgw.ru/v1",
        "apiKey": "{env:LLMGW_API_KEY}"
      },
      "models": {
        "gpt-4o": { "name": "GPT-4o" },
        "claude-sonnet-4-6": { "name": "Claude Sonnet" },
        "deepseek-v3": { "name": "DeepSeek V3" }
      }
    }
  }
}

Ключ передавайте через переменную окружения:

export LLMGW_API_KEY="sk-ВАШ_КЛЮЧ"
opencode

Внутри OpenCode выберите провайдера и модель командой /models.

Continue (VS Code / JetBrains)

Отредактируйте ~/.continue/config.yaml:

models:
  - name: LLMGW GPT-4o
    provider: openai
    model: gpt-4o
    apiBase: https://api.llmgw.ru/v1
    apiKey: sk-ВАШ_КЛЮЧ
    roles: [chat, edit, apply]

  - name: LLMGW DeepSeek
    provider: openai
    model: deepseek-v3
    apiBase: https://api.llmgw.ru/v1
    apiKey: sk-ВАШ_КЛЮЧ
    roles: [chat, autocomplete]

Перезапустите Continue — модели появятся в выпадающем списке.

Aider

Aider работает через переменные окружения:

export OPENAI_API_BASE="https://api.llmgw.ru/v1"
export OPENAI_API_KEY="sk-ВАШ_КЛЮЧ"

aider --model openai/gpt-4o

Префикс openai/ обязателен — он говорит Aider использовать OpenAI-совместимый протокол.

Для постоянной конфигурации создайте ~/.aider.conf.yml:

openai-api-base: https://api.llmgw.ru/v1
openai-api-key: sk-ВАШ_КЛЮЧ
model: openai/gpt-4o

Пример сессии:

$ cd my-project
$ aider app.py tests/test_app.py
────────────────────────────────────────
> Добавь кэширование ответов в get_user() через functools.lru_cache
  и обнови тесты

Aider внесёт правки в оба файла и сам сделает git-коммит
с осмысленным сообщением.
Zed

В settings.json Zed (Cmd+, → Open Settings):

{
  "language_models": {
    "openai_compatible": {
      "LLMGW": {
        "api_url": "https://api.llmgw.ru/v1",
        "available_models": [
          {
            "name": "gpt-4o",
            "display_name": "GPT-4o (LLMGW)",
            "max_tokens": 128000
          },
          {
            "name": "claude-sonnet-4-6",
            "display_name": "Claude Sonnet (LLMGW)",
            "max_tokens": 200000
          }
        ]
      }
    }
  }
}

API-ключ Zed запросит при первом обращении к провайдеру (панель Agent → настройки провайдера LLMGW).

JetBrains IDE (IntelliJ, PyCharm и др.)

Встроенный JetBrains AI Assistant не поддерживает сторонние endpoints. Используйте плагины с поддержкой OpenAI-совместимых API:

  • ProxyAI (бывший CodeGPT): Settings → Tools → ProxyAI → Providers → Custom OpenAI → укажите URL https://api.llmgw.ru/v1/chat/completions, ключ и модель.
  • Continue: см. раздел выше — плагин доступен и для JetBrains.
Собственный код (SDK)

Python (openai)

from openai import OpenAI

client = OpenAI(
    base_url="https://api.llmgw.ru/v1",
    api_key="sk-ВАШ_КЛЮЧ",
)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Напиши функцию сортировки на Python"}],
)
print(response.choices[0].message.content)

Node.js / TypeScript

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.llmgw.ru/v1",
  apiKey: process.env.LLMGW_API_KEY,
});

const response = await client.chat.completions.create({
  model: "gpt-4o",
  messages: [{ role: "user", content: "Привет!" }],
});
console.log(response.choices[0].message.content);

Стриминг (Python)

stream = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Объясни, как работает asyncio"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Function calling (Python)

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Получить погоду в городе",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "Название города"}
            },
            "required": ["city"],
        },
    },
}]

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Какая погода в Барнауле?"}],
    tools=tools,
)

tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.function.name)       # get_weather
print(tool_call.function.arguments)  # {"city": "Барнаул"}

Structured outputs (Python)

import json

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "Отвечай только валидным JSON без пояснений."},
        {"role": "user", "content": "Извлеки данные: 'Иванов Пётр, +7 900 123-45-67, Москва'. Поля: name, phone, city."},
    ],
    response_format={"type": "json_object"},
)
data = json.loads(response.choices[0].message.content)
# {"name": "Иванов Пётр", "phone": "+7 900 123-45-67", "city": "Москва"}

Vision (отправка изображений) работает штатно через content с блоками image_url — как в обычном OpenAI API, если модель поддерживает изображения.

Частые проблемы

СимптомПричина и решение
401 UnauthorizedКлюч указан без префикса Bearer или с опечаткой. Проверьте ключ в личном кабинете.
404 model not foundИмя модели не совпадает с каталогом. Сверьтесь с GET /v1/models.
Инструмент «не видит» моделиВ инструменте включён список моделей по умолчанию (OpenAI). Добавьте модели вручную с точными именами.
Обрыв длинных ответовУвеличьте max_tokens в настройках инструмента.
429 Rate limitДостигнут лимит ключа. Проверьте лимиты в личном кабинете или запросите повышение.

Документация API → Поддержка