Использование Ollama с Python

Ollama предоставляет Python SDK, который позволяет нам взаимодействовать с локально запущенными моделями в среде Python.

С помощью Python SDK Ollama вы можете легко интегрировать задачи обработки естественного языка в проекты Python, выполнять различные операции, такие как генерация текста, генерация диалогов и управление моделями, без ручного вызова командной строки.

Установка Python SDK

Сначала нам нужно установить Python SDK Ollama.

Вы можете установить его с помощью pip:

pip install ollama

Убедитесь, что в вашей среде установлен Python 3.x и что ваша сетевая среда может получить доступ к локальному сервису Ollama.

Запуск локального сервиса

Перед использованием Python SDK убедитесь, что локальный сервис Ollama запущен.

Вы можете запустить его с помощью инструмента командной строки:

ollama serve

После запуска локального сервиса Python SDK будет взаимодействовать с локальным сервисом для выполнения таких задач, как инференс модели.

Использование Python SDK Ollama для инференса

После установки SDK и запуска локального сервиса мы можем взаимодействовать с Ollama через код Python.

Сначала импортируйте chat и ChatResponse из библиотеки ollama:

from ollama import chat
from ollama import ChatResponse

Через Python SDK вы можете отправлять запросы к указанной модели для генерации текста или диалогов:

Пример

from ollama import chat
from ollama import ChatResponse

response: ChatResponse = chat(model='qwen3.5', messages=[
  {
    'role': 'user',
    'content': 'Who are you?',
  },
])
# Вывод содержимого ответа
print(response['message']['content'])

# Или прямое обращение к полям объекта ответа
#print(response.message.content)

При выполнении приведённого выше кода вывод будет следующим:

你好!我是 Qwen3.5,是通义千问系列中最新推出的大语言模型。我具备强大的语言理解与生成能力,能协助你完成多种任务!

Ollama SDK также поддерживает потоковые ответы. При отправке запроса можно установитьstream=True, чтобы включить потоковую передачу ответа.

Пример

from ollama import chat

stream = chat(
    model='qwen3.5',
    messages=[{'role': 'user', 'content': 'Who are you?'}],
    stream=True,
)

# Вывод содержимого ответа по частям
for chunk in stream:
    print(chunk['message']['content'], end='', flush=True)

Пользовательский клиент

Вы также можете создать пользовательский клиент, чтобы более точно управлять конфигурацией запросов, например задавать пользовательские заголовки или указывать URL локальной службы.

Создание пользовательского клиента

С помощью Client вы можете настраивать параметры запросов (например, заголовки запросов, URL и т. д.) и отправлять запросы.

Пример

from ollama import Client

клиент = Клиент(
    host='http://localhost:11434',
    headers={'x-some-header': 'some-value'}
)

response = client.chat(model='qwen3.5', messages=[
    {
        'role': 'user',
        'content': 'Who are you?',
    },
])
print(response['message']['content'])

Асинхронный клиент

Если вы хотите выполнять запросы асинхронно, вы можете использовать класс AsyncClient, который подходит для сценариев, требующих параллелизма.

Пример

import asyncio
from ollama import AsyncClient

async def chat():
    message = {'role': 'user', 'content': 'Кто ты?'}
    response = await AsyncClient().chat(model='qwen3.5', messages=[message])
    print(response['message']['content'])

asyncio.run(chat())
различный

Асинхронный клиент поддерживает ту же функциональность, что и традиционные синхронные запросы; единственное отличие заключается в том, что запросы выполняются асинхронно, что может повысить производительность, особенно в сценариях с высокой конкурентностью.

Асинхронный потоковый ответ

Если вам нужно обрабатывать потоковые ответы асинхронно, вы можете установитьstream=True, чтобы преобразовать его в асинхронный генератор для реализации этого.

Пример

import asyncio
from ollama import AsyncClient

async def chat():
    message = {'role': 'user', 'content': 'Кто ты?'}
    async for part in await AsyncClient().chat(model='qwen3.5', messages=[message], stream=True):
        print(part['message']['content'], end='', flush=True)

asyncio.run(chat())

Здесь ответ возвращается асинхронно по частям, и каждую часть можно обработать немедленно.


Общие методы API

Ollama Python SDK предоставляет некоторые общие методы API для работы с моделями и управления ими.

1. Метод chat

Выполняет генерацию диалога с моделью, отправляя сообщения пользователя и получая ответы модели:

ollama.chat(model='llama3.2', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}])

2. Метод generate

Используется для задач генерации текста. Похож на метод chat, но требует только параметр prompt:

ollama.generate(model='llama3.2', prompt='Why is the sky blue?')

3. Метод list

Выводит список всех доступных моделей:

ollama.list()

4. Метод show

Показывает подробную информацию об указанной модели:

ollama.show('llama3.2')

5. Метод create

Создаёт новую модель из существующей модели:

ollama.create(model='example', from_='llama3.2', system="You are Mario from Super Mario Bros.")

6. Метод copy

Копирует модель в другое расположение:

ollama.copy('llama3.2', 'user/llama3.2')

7. Метод delete

Удаляет указанную модель:

ollama.delete('llama3.2')

8. Метод pull

Загружает модель из удалённого репозитория:

ollama.pull('llama3.2')

9. Метод push

Отправляет локальную модель в удалённый репозиторий:

ollama.push('user/llama3.2')

10. Метод embed

Генерирует текстовые эмбеддинги:

ollama.embed(model='llama3.2', input='The sky is blue because of rayleigh scattering')

11. Метод ps

Просматривает список запущенных моделей:

ollama.ps()

Обработка ошибок

Ollama SDK выбрасывает ошибки, когда запрос завершается неудачей или когда во время потоковой передачи ответа возникают проблемы.

Мы можем использовать конструкции try-except, чтобы перехватывать эти ошибки и обрабатывать их по мере необходимости.

Пример

model = 'does-not-yet-exist'

try:
    response = ollama.chat(model)
except ollama.ResponseError as e:
    print('Error:', e.error)
    if e.status_code == 404:
        ollama.pull(model)

В приведённом выше примере, если модель does-not-yet-exist не существует, выбрасывается ResponseError. После его перехвата вы можете либо выполнить pull модели, либо выполнить другую обработку.

Другие расширения