Написать в Telegram

Ollama и Python: как собрать локального ИИ-агента без облака и API-ключей. Пошагово

Содержание
  1. Что получится в итоге
  2. Из чего состоит агент
  3. Что понадобится
  4. Если вы работаете из России
  5. Ограничения и риски перед стартом
  6. Шаг 1. Устанавливаем Ollama
  7. Шаг 2. Выбираем модель под свою память
  8. Шаг 3. Скачиваем модель и проверяем
  9. Шаг 4. Проверяем скорость модели
  10. Шаг 5. Создаём проект и ставим библиотеку Pydantic
  11. Шаг 6. Подключаем модель
  12. Шаг 7. Пишем инструменты
  13. Шаг 8. Собираем агента
  14. Шаг 9. Пишем главный цикл
  15. Шаг 10. Запускаем и проверяем
  16. Что делать дальше

Чтобы попробовать ИИ-агента, обычно нужны подписка, ключ доступа к облачной модели и готовность отправлять свои данные на чужой сервер. Для компании это сразу три вопроса: сколько стоит, кто увидит документы и что будет, если сервис станет недоступен.

Есть другой путь: агент, который целиком работает на вашем компьютере. Модель стоит рядом, ключи не нужны. Для этого хватает бесплатной программы Ollama и небольшого скрипта на Python. Это хороший способ понять, из чего вообще состоит агент, прежде чем покупать готовые платформы. Разбираем по шагам.

Что получится в итоге

Консольный помощник, с которым можно разговаривать в терминале. Он помнит ход беседы и умеет пользоваться инструментами: узнавать текущее время, считать выражения, сохранять заметки в файл и читать их обратно. Всё это работает на локальной модели, а ответы приходят за секунды.

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

Из чего состоит агент

  • Модель. Языковая модель, которая понимает запрос и решает, что делать. Здесь она локальная.
  • Инструменты. Обычные функции на Python. Модель может их вызывать.
  • Инструкция. Короткий текст, который задаёт роль и манеру ответов.
  • Цикл общения. Код, который принимает ваш запрос, передаёт его агенту вместе с историей беседы и печатает ответ.

Модель запускает Ollama. Агента из модели, инструментов и инструкции собирает библиотека Pydantic. Но подход не привязан к ней: по тому же плану можно собрать агента на другом фреймворке.

Что понадобится

  • Компьютер с Python. В примере стоит Python 3.13, редактор VS Code, но подойдёт любой редактор.
  • Ollama. Бесплатная программа, которая скачивает модели и запускает их на вашей машине.
  • Свободная память. Модель должна поместиться в память видеокарты (VRAM). На Mac и других устройствах с общей памятью смотрите на объём оперативной памяти. В примере видеокарта с 24 ГБ VRAM, но маленькие модели пойдут и на обычных современных компьютерах.
  • Библиотека Pydantic. Ставится одной командой, о ней ниже.

Если вы работаете из России

Здесь ограничений меньше, чем у облачных агентов. Ollama работает на вашем компьютере, модель запускается локально, а ключи не нужны. Облачные модели, которые недоступны из России напрямую, для этой схемы не требуются.

В примере используются открытые модели Qwen. Если каталог моделей Ollama у вас не открывается, смотрите в документации Ollama, как подключить модель из файла. Если нужна замена Qwen, ищите другие открытые модели или российские модели с открытыми весами в формате для Ollama. Главное условие: модель должна уметь вызывать инструменты. В каталоге Ollama у таких моделей есть пометка tools, как на странице Qwen 3.

Ограничения и риски перед стартом

  • Модель должна влезть в память. Если взять слишком большую, ответы будут очень медленными или модель не запустится. Начните с маленькой.
  • Маленькая модель слабее облачной. Она может путаться в сложных запросах и хуже следовать инструкциям. Для первого знакомства это нормально, для рабочих задач берите модель побольше.
  • Агент действует на вашем компьютере. Он пишет в файл и вызывает функции, которые вы ему дали. В примере калькулятор считает выражение функцией eval, но сначала проверяет, что в строке только цифры и знаки арифметики. Любой новый инструмент давайте агенту осознанно: подумайте, что случится, если модель вызовет его неудачно.
  • Первая загрузка требует времени и места. В примере модель на 3,4 ГБ скачивалась со скоростью около 11 МБ/с, программа обещала почти пять минут.

Шаг 1. Устанавливаем Ollama

Скачайте Ollama с официального сайта и установите. Затем откройте терминал или командную строку и введите:

ollama

Если программа вывела список команд, установка прошла успешно и можно ставить модель.

Шаг 2. Выбираем модель под свою память

Ollama это не модель, а инструмент, который скачивает и запускает разные модели. Какую брать, зависит от вашего железа. Правило простое: выбирайте модель, которая поместится в VRAM или в оперативную память. Можно взять самую сильную из подходящих, а можно маленькую и быструю, чтобы просто повторить пример.

Для примера подойдут малые модели семейства Qwen 3.5 или Qwen 3. На странице каталога у каждой указан размер, и его нужно сравнить со своей памятью. В каталоге Qwen 3.5 есть такие варианты:

  • 0.8b. 1 ГБ.
  • 2b. 2,7 ГБ.
  • 4b. 3,4 ГБ.
  • 9b. 6,6 ГБ.

У Qwen 3 малые размеры: 0.6b, 1.7b и 4b. Если нужна рекомендация для старта, это Qwen 3.5 на 4 миллиарда параметров. Позже модель можно поменять.

Каталог моделей Qwen 3.5: у каждого размера указан объём, 4b занимает 3,4 ГБ
Каталог моделей Qwen 3.5: у каждого размера указан объём, 4b занимает 3,4 ГБ

Шаг 3. Скачиваем модель и проверяем

Команда ollama pull скачивает модель. После неё пишется название из каталога:

ollama pull qwen3.5:4b

В терминале появится полоса загрузки с объёмом, скоростью и оценкой времени.

Загрузка модели в терминале: объём, скорость и время до конца
Загрузка модели в терминале: объём, скорость и время до конца

Когда загрузка закончится, проверьте, что модель на месте:

ollama list

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

Список установленных моделей Ollama и команда запуска модели
Список установленных моделей Ollama и команда запуска модели

Шаг 4. Проверяем скорость модели

Прежде чем писать код, убедитесь, что модель отвечает достаточно быстро. Запустите её в терминале:

ollama run qwen3.5:2b

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

Чем больше модель, тем лучше ответы, но тем медленнее они появляются. Если ждать приходится слишком долго, возьмите модель поменьше.

Шаг 5. Создаём проект и ставим библиотеку Pydantic

Откройте папку проекта в редакторе и создайте файл agent.py. Затем в терминале установите библиотеку командой pip install, как на скриншоте ниже. Точное название пакета смотрите в документации Pydantic.

Если вам привычнее менеджер пакетов uv, можно поставить через него.

Файл agent.py в VS Code и команда установки библиотеки в терминале
Файл agent.py в VS Code и команда установки библиотеки в терминале

Шаг 6. Подключаем модель

Первым делом в agent.py нужно связать код с Ollama. Для этого подключаются два класса из Pydantic: модель Ollama и провайдер Ollama. В примере они задают название модели и адрес.

Название берите из ollama list. Если у вас другая модель, поменяйте строку. Адрес провайдера: http://localhost:11434/v1. Он работает потому, что Ollama сама запускает на вашем компьютере локальный сервер. К нему можно обратиться из любого кода так же, как к облачному интерфейсу.

Код подключения модели: импорты Pydantic, название qwen3.5:2b и адрес localhost:11434
Код подключения модели: импорты Pydantic, название qwen3.5:2b и адрес localhost:11434

Шаг 7. Пишем инструменты

Инструмент это обычная функция Python. Модель сможет её вызвать, если передать функцию агенту. Pydantic сам определяет типы аргументов по аннотациям функции. В примере их четыре:

  • Текущее время. Возвращает дату и время.
  • Калькулятор. Считает простое арифметическое выражение, но сначала проверяет, что в нём нет ничего кроме цифр и знаков действий.
  • Сохранить заметку. Дописывает строку в файл notes.txt.
  • Прочитать заметки. Отдаёт содержимое этого файла или сообщает, что заметок пока нет.

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

Код инструментов: время, калькулятор, сохранение и чтение заметок
Код инструментов: время, калькулятор, сохранение и чтение заметок

Шаг 8. Собираем агента

Агент это три составляющие в одном объекте: модель, список инструментов и инструкция. В списке инструментов просто перечисляются названия функций, которые вы написали выше.

Инструкция в примере короткая, по смыслу такая:

Ты полезный личный помощник, который работает полностью локально. Используй инструменты, когда они помогают ответить на вопрос. Отвечай коротко и дружелюбно.

Вы можете написать свою, например про роль сотрудника отдела или про формат ответа.

Шаг 9. Пишем главный цикл

Последняя часть кода это функция main. Она хранит историю всех сообщений и работает в цикле:

  • Запрос. Спрашивает у пользователя ввод.
  • Выход. Если введено quit или exit, цикл прерывается.
  • Вызов агента. Иначе отправляет агенту запрос вместе с историей.
  • История. Обновляет историю по результату.
  • Ответ. Печатает ответ агента.

История нужна, чтобы агент помнил, о чём вы говорили раньше. Без неё каждый запрос был бы для него первым.

Агент с моделью, инструментами и инструкцией, ниже главный цикл с историей сообщений
Агент с моделью, инструментами и инструкцией, ниже главный цикл с историей сообщений

Шаг 10. Запускаем и проверяем

Запустите файл. В терминале появится надпись о том, что локальный агент готов. Дальше проверьте по очереди:

Привет, как дела?

Агент отвечает обычным текстом, и ответ приходит почти сразу.

Первый разговор с агентом: приветствие и ответ
Первый разговор с агентом: приветствие и ответ

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

Сохрани заметку: «Привет, мир».

Агент вызывает функцию сохранения, и в папке проекта появляется файл notes.txt. Затем попросите:

Что сейчас в моём файле заметок?

Агент читает файл и отвечает, что заметка одна. Дальше:

Какие сегодня дата и время?

Агент вызывает инструмент времени и называет текущие дату и час. Для выхода введите quit. Скорость ответов хорошо заметна: всё считается на вашем компьютере, без пересылки по сети.

Агент прочитал заметку и назвал дату и время, дальше команда quit
Агент прочитал заметку и назвал дату и время, дальше команда quit

Что делать дальше

Этот агент намеренно простой. Чтобы сделать его полезным в работе, меняйте две вещи.

  • Инструменты. Добавьте функции под свою задачу: поиск по папке с документами, разбор таблицы, черновик письма. Каждая функция расширяет то, что агент умеет делать сам.
  • Модель. Если ответов не хватает, берите модель крупнее. Её можно поменять в одной строке кода, главное, чтобы она влезала в память.

Фреймворк тоже не обязателен: схема из модели, инструментов, инструкции и цикла работает и с другими библиотеками.

Мы в Агентехе учим сотрудников собирать агентов под задачи своего отдела, выбирать для них модели и инструменты и безопасно давать им доступ к данным. Как устроено обучение.

Написать в Telegram