Интеграция Ollama с Python: примеры REST API и клиента на Python
+ Конкретные примеры использования мыслящих ЛЛМ
В этой статье мы рассмотрим два способа подключения вашего Python-приложения к Ollama: 1. Через HTTP REST API; 2. Через официальную библиотеку Ollama для Python.
Мы рассмотрим оба варианта вызовов: чат и генерация, а затем обсудим, как эффективно использовать «модели мышления».
Ollama быстро стал одним из самых удобных способов запуска больших языковых моделей (LLM) локально. С его простым интерфейсом и поддержкой популярных открытых моделей, таких как Llama 3, Mistral, Qwen2.5, а также «мыслительных» вариантов, таких как qwen3, легко внедрять возможности ИИ непосредственно в ваши Python-проекты — без необходимости полагаться на внешние облачные API.
🧩 Предварительные требования
Прежде чем начать, убедитесь, что Ollama у вас установлена:
pip install requests ollama
Подтвердите что Ollama работает, выполнив:
ollama list
Вы должны увидеть доступные модели, такие как llama3
, mistral
или qwen3
.
⚙️ Вариант 1: Использование REST API Ollama
REST API идеален, когда вам нужна максимальная гибкость или когда вы интегрируетесь с фреймворками, которые уже обрабатывают HTTP-запросы.
Пример 1: Чат API
import requests
import json
url = "http://localhost:11434/api/chat"
payload = {
"model": "llama3.1",
"messages": [
{"role": "system", "content": "Вы — помощник по Python."},
{"role": "user", "content": "Напишите функцию, которая переворачивает строку."}
]
}
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
if line:
data = json.loads(line)
print(data.get("message", {}).get("content", ""), end="")
👉 REST API Ollama передает ответы построчно (похоже на потоковый API OpenAI). Вы можете накапливать содержимое или отображать его в реальном времени для чат-ботов или инструментов командной строки.
Пример 2: Генерация API
Если вам не нужны контекст чата или роли, используйте более простой конечный пункт /api/generate
:
import requests
url = "http://localhost:11434/api/generate"
payload = {
"model": "llama3.1",
"prompt": "Объясните рекурсию в одном предложении."
}
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
if line:
print(line.decode("utf-8"))
Этот конечный пункт отлично подходит для одноразовых задач генерации текста — резюме, фрагментов кода и т.д.
🐍 Вариант 2: Использование библиотеки Ollama для Python
Клиент Ollama для Python предоставляет более чистый интерфейс для разработчиков, которые предпочитают полностью оставаться в Python.
Пример 1: Чат API
import ollama
response = ollama.chat(
model="llama3.1",
messages=[
{"role": "system", "content": "Вы — помощник по коду."},
{"role": "user", "content": "Сгенерируйте Python-скрипт, который перечисляет все файлы в директории."}
]
)
print(response['message']['content'])
Это возвращает окончательное сообщение в виде словаря. Если вы хотите потоковую передачу, вы можете итерировать по потоку чата:
stream = ollama.chat(
model="llama3.1",
messages=[
{"role": "user", "content": "Напишите хайку о рекурсии."}
],
stream=True
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
Пример 2: Генерация API
import ollama
output = ollama.generate(
model="llama3.1",
prompt="Суммируйте концепцию декораторов в Python."
)
print(output['response'])
Или передавайте результат по потоку:
stream = ollama.generate(
model="llama3.1",
prompt="Перечислите три преимущества использования Python для проектов по ИИ.",
stream=True
)
for chunk in stream:
print(chunk['response'], end='', flush=True)
🧠 Работа с «мыслительными» моделями
Ollama поддерживает «мыслительные модели», такие как qwen3, предназначенные для отображения промежуточных шагов рассуждений. Эти модели производят структурированный вывод, часто в формате:
<think>
Шаги рассуждений здесь...
</think>
Окончательный ответ здесь.
Это делает их полезными для:
- Отладки рассуждений модели
- Исследований в области интерпретируемости
- Создания инструментов, которые отделяют мышление от вывода
Пример: Использование мыслительной модели
import ollama
response = ollama.chat(
model="qwen3",
messages=[
{"role": "user", "content": "Какой столицей Австралии?"}
]
)
content = response['message']['content']
# По желанию извлеките часть "мышления"
import re
thinking = re.findall(r"<think>(.*?)</think>", content, re.DOTALL)
answer = re.sub(r"<think>.*?</think>", "", content, flags=re.DOTALL)
print("🧠 Процесс мышления:\n", thinking[0].strip() if thinking else "N/A")
print("\n✅ Окончательный ответ:\n", answer.strip())
Когда использовать мыслительные модели
Случай использования | Рекомендуемая модель | Почему |
---|---|---|
Интерпретируемость / Отладка | qwen3 |
Просмотр следов рассуждений |
Приложения, чувствительные к производительности | qwen3 non-thinking mode |
Быстрее, менее многословно |
Образовательные / Объяснительные | qwen3 |
Показывает логику шаг за шагом |
✅ Итог
Задача | REST API | Клиент Python |
---|---|---|
Простая генерация текста | /api/generate |
ollama.generate() |
Конверсионный чат | /api/chat |
ollama.chat() |
Поддержка потоковой передачи | Да | Да |
Работает с мыслительными моделями | Да | Да |
Ollama’s локальный дизайн делает его идеальным для безопасных, офлайн или конфиденциальных приложений ИИ. Будь то создание интерактивного чат-бота или фоновой службы обогащения данных, вы можете без проблем интегрировать LLMs в ваш рабочий процесс Python — с полным контролем над моделями, задержками и данными.
Полезные ссылки
- https://pypi.org/project/ollama/
- Шпаргалка по Ollama
- Шпаргалка по Python
- Установка и настройка Ollama
- Ограничение LLMs с помощью структурированного вывода: Ollama, Qwen3 & Python или Go
- Сравнение структурированного вывода среди популярных поставщиков LLM - OpenAI, Gemini, Anthropic, Mistral и AWS Bedrock
- Проблемы структурированного вывода Ollama GPT-OSS
- Как Ollama обрабатывает параллельные запросы
- Тест: распределение памяти и планирование моделей в новой версии Ollama - v0.12.1