Во многих туториалах по LLM всё начинается с API-ключей, платных токенов и облачных сервисов. Это рабочий путь, но для первого знакомства он не самый удобный: нужно регистрироваться, разбираться с биллингом и постоянно помнить, что каждый эксперимент что-то стоит.
Здесь пойдём проще. В этой серии мы соберёммаленький LLM-чат на Python, который сначала будет работатьлокально: модель запускается черезOllama, а Python-код общается с ней черезLiteLLM.
Это хороший стартовый маршрут по трём причинам:
- не нужны API-ключи;
- не нужен интернет для каждого запроса;
- вы сразу видите, как LLM становится частью обычной Python-программы.
В первой части мы не будем строить полноценный чат. Наша задача скромнее и важнее:поднять локальную модель, подключить её к Python и получить первый осмысленный ответ из своего кода.
Серия статей
- Часть 1.Ставим окружение и пишем первый запрос ← вы здесь
- Часть 2. Делаем маленький консольный чат
- Часть 3. Разбираем структуру ответа и метаданные
- Часть 4. Добавляем историю сообщений и контекст
- Часть 5. Ошибки и таймауты: делаем код устойчивее
- Часть 6. Что дальше: локальные и облачные модели, развитие проекта
Что сделаем в этой части
В этой статье мы:
- установимOllama;
- скачаем локальную модель;
- проверим, что она отвечает прямо в терминале;
- создадим чистое Python-окружение;
- установимLiteLLM;
- напишем первыйmain.py, который отправляет запрос локальной модели.
Почему для старта удобно идти локально
Когда модель работает у вас на компьютере, путь данных становится очень прозрачным:
ваш Python-код → LiteLLM → Ollama → локальная модель → ответ
Это не "магия AI", а обычный программный поток.Ваш скрипт формирует запрос, LiteLLM отправляет его в Ollama, Ollama передаёт его модели, а потом ответ возвращается обратно в код.
Для обучения это почти идеальный вариант. Вы не отвлекаетесь на инфраструктуру и сразу видите базовую механику интеграции.
Где здесь Ollama, а где LiteLLM
На старте эти инструменты легко перепутать, поэтому сразу разделим роли.
Ollama— это инструмент, который запускает локальные модели и даёт к ним удобный доступ.
LiteLLM— это Python-библиотека, которая позволяет вызывать модель через единый интерфейс. Сегодня мы идём в локальную модель через Ollama, а позже ту же общую логику можно будет перенести и на облачные провайдеры с минимальными изменениями.
То есть роли такие:
- Ollamaподнимает локальную модель;
- LiteLLMпомогает обратиться к ней из Python;
- наш кодсобирает вокруг этого приложение.
Шаг 1. Устанавливаем Ollama
Перейдите на сайт Ollama и скачайте установщик под свою систему.
- Windows— установщик.exe
- macOS—.dmg
- Linux— команда установки с сайта
После установки проверьте, что всё прошло нормально:
Если в ответ вы видите номер версии, значит Ollama установлена.
На Windows после запуска Ollama обычно появляется значок 🦙 в системном трее. Это хороший признак: программа работает в фоне и готова принимать запросы.
Шаг 2. Скачиваем первую модель
Сама Ollama — это ещё не модель, а оболочка для работы с моделями. Теперь нужно скачать конкретную LLM.
Для этой серии возьмём:
Почему именноqwen2.5:3b:
- это сравнительно компактная модель;
- она обычно неплохо работает на обычных ноутбуках;
- у неё хороший компромисс между качеством, размером и удобством старта;
- она нормально справляется с русским языком.
При первом запуске начнётся загрузка модели. Это разовая операция: модель скачается на диск и потом будет запускаться локально.
Когда загрузка завершится, у вас откроется простой интерфейс прямо в терминале. Напишите что-нибудь по-русски, например:
Если модель отвечает — отлично. Значит, самый важный технический барьер уже пройден:локальная LLM у вас работает.
Чтобы выйти из режима чата Ollama, используйте:
Если компьютер слабый
Если у вас немного оперативной памяти или модель работает слишком тяжело, попробуйте более лёгкий вариант:
Логика Python-кода дальше останется такой же. Поменяется только имя модели.
Шаг 3. Готовим Python-окружение
Теперь подключим Python к уже работающей локальной модели.
Создайте папку проекта и перейдите в неё:
Создайте виртуальное окружение:
Активируйте его.
macOS / Linux:
Если всё прошло нормально, в начале строки терминала появится префикс(venv).
Теперь установим LiteLLM:
На этом этапе у нас уже есть всё необходимое:
- локальная модель через Ollama;
- Python-проект;
- отдельное окружение;
- библиотека для вызова модели из кода.
Шаг 4. Пишем первый main.py
Создайте файлmain.pyи вставьте в него код:
Теперь запустите:
Если в консоли появился осмысленный ответ на русском языке — всё работает как надо.
И это уже важный момент: теперь модель живёт не отдельно в терминале Ollama, австроена в ваш Python-код.
Разберём код
Здесь нет ничего лишнего — только минимальное ядро будущего приложения.
from litellm import completion
Импортируем функцию, которая делает вызов модели.
MODEL = "ollama_chat/qwen2.5:3b"
Здесь мы указываем, какую модель хотим использовать.Префиксollama_chat/подсказывает LiteLLM, что запрос нужно отправить именно в Ollama.
Если вы скачали другую модель, строка может выглядеть, например, так:
API_BASE = "http://localhost:11434"
Это локальный адрес, по которому Ollama принимает запросы.По умолчанию Ollama работает именно на этом порту.
messages=[{"role": "user", "content": question}]
Это уже очень важная часть.
Большинство современных LLM API работают не с одной строкой текста, а сосписком сообщений. Даже если у нас пока только один вопрос, он всё равно передаётся в виде структуры с ролями.
Сейчас в этом списке всего одно сообщение:
- role="user"— это вопрос пользователя;
- content=question— сам текст вопроса.
Позже именно этот список превратится висторию диалога.То есть уже в первой статье мы закладываем фундамент будущего чата.
response.choices[0].message.content
Из полного объекта ответа мы достаём только текст, который сгенерировала модель.
Пока нам этого достаточно. В следующих частях мы разберём, что ещё приходит в ответе, кроме самого текста.
Что у нас получилось
На этом этапе у нас уже есть:
- установленнаяOllama;
- скачанная локальная модель;
- рабочее Python-окружение;
- установленныйLiteLLM;
- первый скрипт, который отправляет запрос локальной модели и получает ответ.
То есть теперь локальная LLM — это не абстрактная технология "где-то там", а компонент вашей программы, к которому можно обращаться из Python.
Это и есть главное достижение первой части.
Частые проблемы на этом этапе
Проблема 1.Connection refusedилиFailed to connect
Почему возникает: Ollama не запущена.
Что проверить: убедитесь, что Ollama действительно работает. На Windows проверьте значок 🦙 в трее. Также можно выполнить:
Если команда отвечает, значит сервис доступен.
Проблема 2.Model not found
Почему возникает: модель не скачана или её имя в коде не совпадает с установленной.
Что сделать: посмотрите список моделей:
И затем убедитесь, что в коде указано точное имя модели.
Проблема 3. Ответ генерируется слишком долго
Почему возникает: первый запуск часто самый медленный, потому что модель загружается в память. Либо модель тяжеловата для вашего компьютера.
Что сделать: сначала просто подождите дольше, закройте тяжёлые программы, попробуйте модель полегче — напримерqwen2.5:1.5b.
Проблема 4.ModuleNotFoundError: No module named 'litellm'
Почему возникает: вы запускаете скрипт не из того окружения, где установлен пакет.
Что проверить: перед запуском убедитесь, что окружение активировано и в терминале есть(venv).
Проблема 5. В PowerShell отображаются "кракозябры"
Иногда это связано с кодировкой терминала. Попробуйте выполнить:
А затем снова запустить скрипт.
В этой части мы сделали самый важный первый шаг:связали локальную модель и Python-код.
Пока это ещё не чат. Наш скрипт просто отправляет один вопрос и получает один ответ. Но это уже не игрушка и не теория: у нас есть рабочее ядро будущего приложения.
Именно с этого момента LLM перестаёт быть "чем-то из чужих демо" и становится частью вашей программы.
Что дальше
Сейчас у нас есть один запрос и один ответ. Это хороший старт, но полноценного общения ещё нет.
В следующей части превратим этот минимальный пример вмаленький консольный чат:
- добавим цикл общения;
- будем принимать вопросы от пользователя в реальном времени;
- введём команду выхода;
- подготовим основу для дальнейшего добавления памяти и контекста.
Продолжение
Это первая часть практического цикла по созданию небольшого LLM-приложения на Python.Дальше - >