API Ollama против API OpenAI: эндпоинты и код
Вопрос Ollama API против OpenAI API сводится к двум форматам запросов и двум способам запуска модели. Ollama имеет собственный нативный API и также OpenAI-совместимый слой, поэтому переход на размещённый эндпоинт в стиле OpenAI может потребовать изменения базового URL и ключа.


Карта не нужна. После входа в систему получите $0,50 бесплатного пробного баланса в один клик (один раз на человека).
Получить API-ключКлючевые моменты
- Ollama имеет нативные маршруты в /api и слой совместимости с OpenAI в /v1; клиенты, написанные для OpenAI SDK, обычно работают с обоими.
- Ollama в нативном режиме потоково передает JSON, разделенный новой строкой, тогда как формат OpenAI потоково передает серверные события (SSE).
- Переход с локального на размещённый означает изменение базового URL, ключа и имени модели, а не вашего кода.
- Локальный режим сохраняет данные на вашем компьютере; хостинг снимает работу с оборудованием и добавляет оплату за каждый токен.
Краткая версия
Оба API просят вас отправить POST-запрос со списком сообщений и получить текст в ответ. Разница в структуре запроса, месте расположения сервера и том, кто платит за GPU. Ollama запускает модели на вашем собственном компьютере и слушает порт 11434. API OpenAI — это размещённый сервис со своими платными моделями. В сравнении Ollama API и OpenAI API люди часто упускают третий момент: Ollama также предоставляет маршруты, совместимые с OpenAI, поэтому два формата пересекаются.
Это пересечение делает миграцию дешёвой. Если ваше приложение уже использует OpenAI SDK, вы можете направить его на локальный Ollama сегодня и на размещённый OpenAI-совместимый URL завтра. Размещённый эндпоинт на этом сайте — один из таких. Он обслуживает единственную модель, uncensored, по адресу https://api.ollamansfw.com/v1, и не является официальным продуктом OpenAI, Meta или любой другой лаборатории.
Различия по эндпоинтам
| Задача | Нативный Ollama | В стиле OpenAI |
|---|---|---|
| Чат | POST /api/chat | POST /v1/chat/completions |
| Одиночный промпт | POST /api/generate | POST /v1/responses или chat completions |
| Список моделей | GET /api/tags | GET /v1/models |
| Аутентификация | По умолчанию нет | Authorization: Bearer key |
| Потоковая передача | JSON, разделенный новой строкой | Серверные события (SSE), завершающиеся маркером done |
| Имя модели | Любая скачанная вами модель, например llama3 | Что угодно, что перечисляет провайдер |
Ollama также предоставляет эндпоинт /v1/chat/completions и эндпоинт /v1/models на том же порту, что позволяет OpenAI-клиентам работать с ним. По умолчанию для нативных вызовов используется потоковая передача, поэтому установите stream: false, если вам нужен единый JSON-ответ.
Хостинг реализует POST /v1/chat/completions, POST /v1/responses и GET /v1/models, а также проверку баланса по адресу GET /v1/balance. Полный список см. в документации API.
Один запрос тремя способами
Нативный Ollama на Python:
import requests
r = requests.post(
"http://localhost:11434/api/chat",
json={
"model": "llama3",
"messages": [{"role": "user", "content": "Say hello in five words."}],
"stream": False,
},
)
print(r.json()["message"]["content"])OpenAI SDK с настройками для локального и хостинга рядом. Изменяется только закомментированная строка:
from openai import OpenAI
# Local Ollama through its OpenAI-compatible layer:
# client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
# Hosted endpoint, same code from here on:
client = OpenAI(base_url="https://api.ollamansfw.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored", # local would be e.g. "llama3"
messages=[{"role": "user", "content": "Say hello in five words."}],
)
print(resp.choices[0].message.content)И curl против хостинга с включенной потоковой передачей:
curl https://api.ollamansfw.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"uncensored","messages":[{"role":"user","content":"Hello"}],"stream":true}'Парсинг отличается на нативной стороне: каждая потоковая строка — это JSON-объект с message.content, а последняя содержит done: true. В формате OpenAI каждое событие начинается с data: , содержит фрагмент choices[0].delta.content, а поток завершается символом [DONE]. Используйте SDK, и вы не увидите ни того, ни другого.
Где каждый из них уместен
Локальный Ollama — правильный выбор, когда конфиденциальность стоит на первом месте, у вас есть GPU с достаточной памятью для нужной модели или вы экспериментируете с множеством моделей. Ничего не покидает вашу машину, и нет счёта за токен. Расходы проявляются в виде оборудования, электроэнергии и вашего времени. Наше руководство по использованию Ollama с графическим интерфейсом охватывает удобную сторону этого маршрута.
Хостинг с совместимостью с OpenAI лучше подходит, когда у вас нет оборудования, нужны параллельные запросы, вы запускаете бота или сервис для других людей или хотите стабильный URL, не зависящий от того, включен ли ваш ноутбук. Полный ключ позволяет 8 параллельных запросов и 300 запросов в минуту. Контекстное окно составляет 100 000 токенов, что больше, чем могут удержать в памяти многие локальные конфигурации.
Многие используют оба: локальный для экспериментов, размещённый для всего, что должно работать постоянно. Если вы рассматриваете другие локальные инструменты, прочитайте Альтернативы программному обеспечению Ollama.
Миграция с локального Ollama на хостинг
- Сначала переключитесь на формат OpenAI. Если ваш код вызывает
/api/chat, перенесите его в OpenAI SDK, указав маршрут/v1Ollama. Убедитесь, что он все еще работает локально. - Получите ключ. Зарегистрируйтесь и получите $0,50 пробного баланса на странице API-ключа. Оплата не требуется, срок действия — 7 дней.
- Измените три значения. Базовый URL на
https://api.ollamansfw.com/v1, ключ на ваш, модель наuncensored. - Проверьте параметры. Temperature, top_p, stop, seed и штрафы передаются напрямую. Локальные опции, такие как
num_ctxилиkeep_aliveOllama, не применяются; окно фиксировано на уровне 100 000 токенов. - Добавьте логику повтора. Хостинговый API возвращает 429 с
rate_limitedилиconcurrencyпри превышении лимита, а также 429 сRetry-After: 5при временной перегрузке. Локальные серверы редко так делают, поэтому существующий код может не обрабатывать это.
Если что-то сломается после переключения, статья о распространённых ошибках API Ollama охватывает частые причины, такие как неправильные порты и отсутствующие имена моделей.
Стоимость хостинга и его ограничения
Оплата по факту использования с предоплаченного баланса: $0,15 за 1 млн входных токенов и $0,50 за 1 млн выходных токенов. Один запрос в чате с 1 000 входными и 400 выходными токенами стоит $0,00015 + $0,0002 = $0,00035, поэтому $20 покрывает около 57 000 таких запросов. Неудачные или отклонённые запросы не оплачиваются, а баланс не сгорает. Пополнение от $20 до $500 с бонусами +5% от $50, +10% от $100 и +15% от $200. Оплата только криптовалютой (USDT в сети TRC20 или USDC в сети Base). Подробнее на странице с ценами.
Ограничения: только текст, поэтому нет эмбеддингов, генерации изображений или дообучения. Если вы полагаетесь на локальные эмбеддинги, оставьте их локальными. Модель настроена на ответы без отказов в контенте для законного использования взрослыми. Сексуальный контент с участием несовершеннолетних всегда запрещен. Промпты не используются для обучения.
Дополнительные руководства
Вопросы и ответы
Совместимо ли API Ollama с API OpenAI?
Частично. Ollama имеет встроенные маршруты под /api и также обслуживает маршруты в стиле OpenAI, такие как /v1/chat/completions, поэтому клиенты OpenAI SDK могут с ним работать.
Что нужно изменить при переходе с локального Ollama на хостинг?
Базовый URL, API-ключ и имя модели. Если ваш код уже использует OpenAI SDK, ничего больше менять не нужно.
Поддерживает ли хостинговый API эмбеддинги, как Ollama?
Нет. Это только генерация текста: chat completions и responses, без эмбеддингов, изображений или дообучения.
Является ли Ollama бесплатной?
Программное обеспечение бесплатное для загрузки и запуска. Вы всё равно платите за оборудование и электроэнергию, в то время как размещённый API взимает плату за каждый токен.