Во многих туториалах по LLM всё начинается с API-ключей, платных токенов и облачных сервисов. Это рабочий путь, но для первого знакомства он не самый удобный: нВо многих туториалах по LLM всё начинается с API-ключей, платных токенов и облачных сервисов. Это рабочий путь, но для первого знакомства он не самый удобный: н

Маленький LLM-чат на Python с Ollama и LiteLLM. Часть 1: ставим окружение и пишем первый запрос

2026/03/19 14:29
7м. чтение
Для обратной связи или замечаний по поводу данного контента, свяжитесь с нами по адресу crypto.news@mexc.com

Во многих туториалах по 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 --version

Если в ответ вы видите номер версии, значит Ollama установлена.

На Windows после запуска Ollama обычно появляется значок 🦙 в системном трее. Это хороший признак: программа работает в фоне и готова принимать запросы.


Шаг 2. Скачиваем первую модель

Сама Ollama — это ещё не модель, а оболочка для работы с моделями. Теперь нужно скачать конкретную LLM.

Для этой серии возьмём:

ollama run qwen2.5:3b

Почему именно qwen2.5:3b:

  • это сравнительно компактная модель;

  • она обычно неплохо работает на обычных ноутбуках;

  • у неё хороший компромисс между качеством, размером и удобством старта;

  • она нормально справляется с русским языком.

При первом запуске начнётся загрузка модели. Это разовая операция: модель скачается на диск и потом будет запускаться локально.

Когда загрузка завершится, у вас откроется простой интерфейс прямо в терминале. Напишите что-нибудь по-русски, например:

Привет! Расскажи в двух предложениях, что такое Python.

Если модель отвечает — отлично. Значит, самый важный технический барьер уже пройден: локальная LLM у вас работает.

Чтобы выйти из режима чата Ollama, используйте:

/bye

Если компьютер слабый

Если у вас немного оперативной памяти или модель работает слишком тяжело, попробуйте более лёгкий вариант:

ollama run qwen2.5:1.5b

Логика Python-кода дальше останется такой же. Поменяется только имя модели.


Шаг 3. Готовим Python-окружение

Теперь подключим Python к уже работающей локальной модели.

Создайте папку проекта и перейдите в неё:

mkdir llm-chat cd llm-chat

Создайте виртуальное окружение:

python -m venv venv

Активируйте его.

Windows:

venv\Scripts\activate

macOS / Linux:

source venv/bin/activate

Если всё прошло нормально, в начале строки терминала появится префикс (venv).

Теперь установим LiteLLM:

pip install litellm

На этом этапе у нас уже есть всё необходимое:

  • локальная модель через Ollama;

  • Python-проект;

  • отдельное окружение;

  • библиотека для вызова модели из кода.


Шаг 4. Пишем первый main.py

Создайте файл main.py и вставьте в него код:

from litellm import completion MODEL = "ollama_chat/qwen2.5:3b" API_BASE = "http://localhost:11434" def ask(question: str) -> str: response = completion( model=MODEL, messages=[ {"role": "user", "content": question} ], api_base=API_BASE, request_timeout=120, ) return response.choices[0].message.content answer = ask("Привет! Напиши одно короткое предложение о Python.") print(answer)

Теперь запустите:

python main.py

Если в консоли появился осмысленный ответ на русском языке — всё работает как надо.

И это уже важный момент: теперь модель живёт не отдельно в терминале Ollama, а встроена в ваш Python-код.


Разберём код

Здесь нет ничего лишнего — только минимальное ядро будущего приложения.

from litellm import completion

Импортируем функцию, которая делает вызов модели.

MODEL = "ollama_chat/qwen2.5:3b"

Здесь мы указываем, какую модель хотим использовать.
Префикс ollama_chat/ подсказывает LiteLLM, что запрос нужно отправить именно в Ollama.

Если вы скачали другую модель, строка может выглядеть, например, так:

MODEL = "ollama_chat/qwen2.5:1.5b"

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 проверьте значок 🦙 в трее. Также можно выполнить:

ollama list

Если команда отвечает, значит сервис доступен.


Проблема 2. Model not found

Почему возникает: модель не скачана или её имя в коде не совпадает с установленной.

Что сделать: посмотрите список моделей:

ollama list

И затем убедитесь, что в коде указано точное имя модели.


Проблема 3. Ответ генерируется слишком долго

Почему возникает: первый запуск часто самый медленный, потому что модель загружается в память. Либо модель тяжеловата для вашего компьютера.

Что сделать: сначала просто подождите дольше, закройте тяжёлые программы, попробуйте модель полегче — например qwen2.5:1.5b.


Проблема 4. ModuleNotFoundError: No module named 'litellm'

Почему возникает: вы запускаете скрипт не из того окружения, где установлен пакет.

Что проверить: перед запуском убедитесь, что окружение активировано и в терминале есть (venv).


Проблема 5. В PowerShell отображаются "кракозябры"

Иногда это связано с кодировкой терминала. Попробуйте выполнить:

$OutputEncoding = [System.Text.Encoding]::UTF8

А затем снова запустить скрипт.


Вывод

В этой части мы сделали самый важный первый шаг: связали локальную модель и Python-код.

Пока это ещё не чат. Наш скрипт просто отправляет один вопрос и получает один ответ. Но это уже не игрушка и не теория: у нас есть рабочее ядро будущего приложения.

Именно с этого момента LLM перестаёт быть "чем-то из чужих демо" и становится частью вашей программы.


Что дальше

Сейчас у нас есть один запрос и один ответ. Это хороший старт, но полноценного общения ещё нет.

В следующей части превратим этот минимальный пример в маленький консольный чат:

  • добавим цикл общения;

  • будем принимать вопросы от пользователя в реальном времени;

  • введём команду выхода;

  • подготовим основу для дальнейшего добавления памяти и контекста.


Продолжение

Это первая часть практического цикла по созданию небольшого LLM-приложения на Python.
Ждем часть 2

Источник

Возможности рынка
Логотип Ucan fix life in1day
Ucan fix life in1day Курс (1)
$0.0003356
$0.0003356$0.0003356
+10.14%
USD
График цены Ucan fix life in1day (1) в реальном времени
Отказ от ответственности: Статьи, размещенные на этом веб-сайте, взяты из общедоступных источников и предоставляются исключительно в информационных целях. Они не обязательно отражают точку зрения MEXC. Все права принадлежат первоисточникам. Если вы считаете, что какой-либо контент нарушает права третьих лиц, пожалуйста, обратитесь по адресу crypto.news@mexc.com для его удаления. MEXC не дает никаких гарантий в отношении точности, полноты или своевременности контента и не несет ответственности за любые действия, предпринятые на основе предоставленной информации. Контент не является финансовой, юридической или иной профессиональной консультацией и не должен рассматриваться как рекомендация или одобрение со стороны MEXC.

Вам также может быть интересно

Прогноз цены Ethereum на 2026 год и далее: ETH нацелен на фазу расширения, DeepSnitch AI взрывается на 197% и объявляет о TGE 31 марта, в то время как Pippin резко падает

Прогноз цены Ethereum на 2026 год и далее: ETH нацелен на фазу расширения, DeepSnitch AI взрывается на 197% и объявляет о TGE 31 марта, в то время как Pippin резко падает

Наслаждайтесь любимыми видео и музыкой, загружайте оригинальный контент и делитесь им с друзьями, семьей и всем миром на YouTube.
Поделиться
Blockchainreporter2026/03/20 06:30
Эксперт по культам описывает унизительные «клятвы верности» Трампа

Эксперт по культам описывает унизительные «клятвы верности» Трампа

Привычка президента Дональда Трампа дарить неподходящую обувь членам Кабинета служит продуманным ритуалом унижения, призванным укрепить авторитарный контроль
Поделиться
Rawstory2026/03/20 06:05
EUR/USD держится стабильно: критический уровень 1,1470 тестируется перед важным решением ЕЦБ по монетарной политике

EUR/USD держится стабильно: критический уровень 1,1470 тестируется перед важным решением ЕЦБ по монетарной политике

BitcoinWorld EUR/USD остается стабильным: критический уровень 1,1470 тестируется перед важным решением ЕЦБ по денежно-кредитной политике Валютная пара EUR/USD демонстрирует осторожную устойчивость
Поделиться
bitcoinworld2026/03/20 06:05