Интеграция Ollama с Python: примеры REST API и Python-клиента

+ Конкретные примеры использования мыслящих ЛЛМ

Содержимое страницы

В этой статье мы рассмотрим два способа подключения вашего Python-приложения к Ollama: 1. Через HTTP REST API; 2. Через официальную библиотеку Ollama для Python.

Мы рассмотрим оба варианта вызовов: чат и генерация, а затем обсудим, как эффективно использовать “модели мышления”.

ollama and python

Ollama быстро стал одним из самых удобных способов запуска больших языковых моделей (LLM) локально. Чтобы узнать, как Ollama сравнивается с vLLM, Docker Model Runner, LocalAI и облачными провайдерами — включая когда выбирать каждый — см. Хостинг LLM: локальный, самоуправляемый и облачная инфраструктура сравниваются. С его простым интерфейсом и поддержкой популярных открытых моделей, таких как Llama 3, Mistral, Qwen2.5, а также вариантов “мышления”, таких как qwen3, легко внедрить возможности ИИ непосредственно в ваши Python-проекты — без необходимости полагаться на внешние облачные API.


🧩 Предварительные требования

Прежде чем начать, убедитесь, что у вас есть:

  • Ollama установлен и запущен локально (ollama serve)
  • Python 3.9+
  • Требуемые зависимости:
pip install requests ollama

Подтвердите, что Ollama работает, выполнив:

ollama list

Вы должны увидеть доступные модели, такие как llama3, mistral или qwen3.


⚙️ Вариант 1: Использование REST API Ollama

REST API идеален, когда вам нужна максимальная гибкость или когда вы интегрируетесь с фреймворками, которые уже обрабатывают HTTP-запросы.

Пример 1: Chat 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: Generate 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: Chat 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: Generate 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 делает ее идеальной для безопасных, оффлайн или конфиденциальных приложений ИИ. Будь то создание интерактивного чат-бота или фоновой службы обогащения данных, вы можете без проблем интегрировать LLM в ваш рабочий процесс Python — с полным контролем над моделями, задержками и данными. Для более широкого сравнения Ollama с другими локальными и облачными инфраструктурами LLM см. наше Хостинг LLM: локальный, самоуправляемый и облачная инфраструктура сравниваются.

Полезные ссылки