Использование 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 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, чтобы включить потоковую передачу ответа.
Пример
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 и т. д.) и отправлять запросы.
Пример
клиент = Клиент(
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, который подходит для сценариев, требующих параллелизма.
Пример
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, чтобы преобразовать его в асинхронный генератор для реализации этого.
Пример
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, чтобы перехватывать эти ошибки и обрабатывать их по мере необходимости.
Пример
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 модели, либо выполнить другую обработку.
Другие расширения