В этой статье
OpenAI-совместимый API принимает запросы в знакомом формате OpenAI, но может обслуживать модели другого поставщика или локальные модели. Для подключения обычно нужны три значения: базовый адрес, имя модели и ключ нужного сервиса. Совпадение формата не означает одинаковые модели, качество ответов или поддержку всех методов.
Например, Ollama прямо заявляет совместимость с частями OpenAI API, а DeepSeek публикует настройки для обращения к своим моделям через совместимые клиенты. Документация Ollama, первый запрос DeepSeek. Сведения проверены 10 сентября 2026 года.
Базовый адрес и endpoint — разные поля
Базовый адрес задаёт сервер и общий префикс. Endpoint добавляет путь конкретной операции. Для локального Ollama:
| Что настраиваете | Значение |
|---|---|
| Базовый адрес клиента | http://localhost:11434/v1 |
| Путь текстового чата | /chat/completions |
| Полный адрес POST-запроса | http://localhost:11434/v1/chat/completions |
Если приложение просит base URL, не вставляйте туда полный путь, когда клиент сам добавляет /chat/completions: получится повтор. Если поле просит полный endpoint, одного адреса сервера будет недостаточно. Сверьте смысл поля с документацией клиента. Пример базового адреса Ollama.
У DeepSeek в текущей инструкции указан базовый адрес https://api.deepseek.com и собственный API-ключ. Это отдельный сервис: ключ OpenAI не становится ключом DeepSeek только из-за совместимости протокола. Имена моделей тоже берутся у провайдера, например deepseek-v4-flash, а не подменяются названием GPT. Настройки DeepSeek.
Подготовьте локальный пример
Ниже используется уже установленный Ollama с локальной моделью и Python 3.10 или новее. Пример не требует сторонней Python-библиотеки; HTTP-запрос выполняет стандартный urllib.request.
- Запустите Ollama. Если используете сервер из командной строки, команда —
ollama serve. - Загрузите модель
ollama pull llama3.2либо выберите уже имеющуюся текстовую модель. - Командой
ollama lsпроверьте её точное имя. Оно должно совпадать с полемmodelв запросе.
Команды запуска и списка описаны в CLI Ollama; модель llama3.2 приведена в инструкции совместимости. Подбор модели по объёму памяти компьютера — отдельная задача; этот пример не обещает, что выбранная модель поместится на любом устройстве.
Локальный API Ollama по localhost:11434 не требует авторизации. Для облачных моделей и доступа к облачному API условия другие; не переносите отсутствие ключа на внешний сервер. Аутентификация Ollama.
Минимальный клиент на Python
Сохраните код в client.py. По умолчанию он обращается только к локальному Ollama. Если выбрали другую установленную модель, измените значение llama3.2 или задайте переменную среды LLM_MODEL.
import json
import os
import urllib.error
import urllib.request
base_url = os.environ.get("LLM_BASE_URL", "http://localhost:11434/v1")
model = os.environ.get("LLM_MODEL", "llama3.2")
api_key = os.environ.get("LLM_API_KEY")
headers = {"Content-Type": "application/json"}
if api_key:
headers["Authorization"] = "Bearer " + api_key
payload = {
"model": model,
"messages": [{"role": "user", "content": "Ответь одним словом: готово"}],
"stream": False,
}
request = urllib.request.Request(
base_url.rstrip("/") + "/chat/completions",
data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
headers=headers,
method="POST",
)
try:
with urllib.request.urlopen(request, timeout=180) as response:
result = json.load(response)
except urllib.error.HTTPError as error:
raise SystemExit(f"HTTP {error.code}: проверьте адрес, ключ и модель")
except urllib.error.URLError:
raise SystemExit("Не удалось подключиться к серверу")
try:
text = result["choices"][0]["message"]["content"]
except (KeyError, IndexError, TypeError):
raise SystemExit("Ответ не соответствует ожидаемому Chat Completions")
if not isinstance(text, str) or not text.strip():
raise SystemExit("Сервер не вернул непустой текст")
print(text)
Запустите из папки с файлом:
python -X utf8 client.py
Код отправляет один запрос без потоковой передачи и извлекает текст из choices[0].message.content. Эти поля соответствуют показанному Ollama формату Chat Completions. Для другого сервера задайте LLM_BASE_URL, LLM_MODEL и при необходимости LLM_API_KEY по его документации. Сначала убедитесь, что адрес принадлежит выбранному провайдеру: туда уйдут и сообщение, и ключ.
Как понять, что подключение работает
Проверяйте два разных результата:
- Транспорт и формат: сервер принял запрос, вернул ожидаемую структуру и непустой текст.
- Выполнение задачи: модель действительно ответила словом «готово», без лишнего текста.
Первый результат не доказывает второй. Например, ответ «Конечно, я готов помочь» может быть корректным ответом API и одновременно нарушать условие одного слова.
Этот клиент проверен на локальном HTTP-стенде с Python 3.13: корректный ответ вывел готово, HTTP 401 завершил программу с сообщением об ошибке, а JSON без choices был отклонён. Стенд также проверил путь запроса и передачу русского текста в UTF-8. Это проверка кода клиента; запуск модели Ollama и обращение к DeepSeek в неё не входили.
Если соединение не установлено, проверьте, запущен ли сервер и верен ли порт. При HTTP-ошибке сверяйте код с документацией конкретного провайдера. При несовпадении структуры убедитесь, что не отправили запрос на другой метод вместо /v1/chat/completions.
Что проверять перед переносом рабочего приложения
Начните с обычного текста, затем отдельно проверьте необходимые функции: потоковую выдачу, вызовы инструментов, изображения, формат JSON и продолжение разговора. У каждой проверки должны быть собственные входные данные и критерий принятия, а не только успешный HTTP-код.
Перед расширением интеграции полезно разобрать устройство GPT API и различие его методов.
Ollama добавила /v1/responses в версии 0.13.3, но документация описывает только вариант без серверного состояния — previous_response_id и conversation не поддерживаются. Клиент, зависящий от этих полей, нельзя считать перенесённым после смены адреса. Ограничения Responses в Ollama.
В карточке своей интеграции сохраните версию сервера, метод, имя модели и проверенные функции. Если завтра меняется модель или сервер, повторите именно эти проверки: надпись «OpenAI-compatible» сама по себе их не заменяет.
Проверить детали
Источники материала
- OpenAI compatibilityOllama
- First API CallDeepSeek
- AuthenticationOllama
- CLI ReferenceOllama
- urllib.requestPython
Функции и условия сервисов меняются. Дата сверки указана в начале статьи. Как подготовлен материал