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

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

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

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

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

ollama и python

Ollama быстро стал одним из самых удобных способов запуска больших языковых моделей (LLM) локально. С его простым интерфейсом и поддержкой популярных открытых моделей, таких как Llama 3, Mistral, Qwen2.5, а также «мыслительных» вариантов, таких как qwen3, легко внедрять возможности ИИ непосредственно в ваши Python-проекты — без необходимости полагаться на внешние облачные API.


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

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

  • Ollama и запущена локально (ollama serve)
  • Python 3.9+
  • Необходимые зависимости:
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 — с полным контролем над моделями, задержками и данными.

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