Главная / Статьи

Блогер с несколькими агентами без затрат на API на Mac: Gemma 4, Ollama и Google ADK

Создайте локальную систему агентов для планирования, написания текстов и проверки с использованием Apple Silicon и библиотеки Gemma 4 через Ollama, LiteLLM и Google ADK, без дополнительных платежей за использование моделей за каждый запрос.

Издатель: REACTAPP.TOP8 мин чтения1919 слов

Источники: No API Costs: Building a Local Multi-Agent AI System with Gemma 4, Ollama, and Google ADK

Агент для планирования и написания может полностью работать на ноутбуке. Все описанные ниже процессы выполняются на Mac с процессором Apple Silicon без дополнительных платежей за каждый запрос: Gemma 4, предоставляемая Ollama, инструмент Google Agent Development Kit (ADK) для управления агентами, а также LiteLLM, соединяющий их между собой.

Языковые модели выходят за рамки простых вопросов и ответов. Приложения, построенные на их основе, интерпретируют цель, составляют план, вызывают необходимые инструменты, оценивают результаты и передают задачи специализированным агентам. Многие учебные материалы по таким системам основаны на платных облачных API, что удобно, но влечет за собой оплату за использование, необходимость обработки API-ключей, ограничения по количеству запросов и вопросы относительно места хранения данных. Работа в локальной среде устраняет необходимость оплаты по токенам. Однако это не делает вычисления бесплатными, поскольку по-прежнему тратятся память, время процессора, хранилище и электроэнергия.

Система, которая создается

Проект планирует, пишет и ревизирует статью для технического блога. Получив тему, он определяет этапы работы, создаёт структурированный план, пишет текст и оценивает черновик. Это задействует две основные составляющие искусственного интеллекта-агента: рассуждение и действие. Для выполнения задач используются пять компонентов:

  • Агент-планировщик, который составляет план статьи.
  • Валидатор плана, проверяющий, соответствует ли он требованиям.
  • Агент-писатель, преобразующий утверждённый план в полноценную статью.
  • Валидатор статьи, оценивающий её структуру и техническую ясность.
  • Корневой агент, координирующий весь процесс.

Дизайн основан на собственном курсе Google «Build an AI Agent with Google ADK», с одним изменением: вместо хостинговой модели Gemini используется Gemma 4, запускаемая локально с помощью Ollama.

Выбор модели

Gemma 4 — это более новая серия открытых моделей от Google DeepMind, обеспечивающих поддержку мультимодальных входных данных, рассуждений, использования инструментов и программирования. Для работы этой системы используются:

gemma4:e4b

Обозначение E4B относится к фактическому количеству активных параметров одновременно; оно предназначено для обеспечения более высокой производительности без необходимости использования всех параметров для каждого входного сигнала. Размер версии Ollama составляет примерно 9,6 ГБ, и она должна работать на Mac с 16 ГБ объединенной памяти, хотя мало места останется для других приложений. Для устройств с ограниченными ресурсами существует более компактная версия:

gemma4:e2b

Он жертвует частью качества обработки в пользу скорости и меньшего потребления памяти.

Исходной машиной служил Apple M1 Pro с 10-ядерным процессором, 16 ГБ объединенной памяти, операционной системой macOS, Python 3.13, Homebrew и Ollama. Другие системы, поддерживаемые Ollama, также должны работать, хотя команды установки и скорость будут отличаться.

Шаг 1: установка Ollama

Ollama — это простой способ загрузки и запуска открытых моделей локально. С помощью Homebrew:

brew install ollama

Если оно уже установлено, обновите его:

brew update
brew upgrade ollama

Подтвердите установку:

ollama --version

Приложение для macOS с официального сайта Ollama является альтернативой.

Шаг 2: загрузка модели

Скачайте модель E4B. Это займет несколько минут, поскольку размер файла составляет несколько гигабайт:

ollama pull gemma4:e4b

Затем проверьте, что оно указано в списке:

ollama list

Запись должна выглядеть примерно так:

NAME            ID              SIZE
gemma4:e4b      ...             9.6 GB

Шаг 3: общение с моделью напрямую

Прежде чем добавлять ADK, убедитесь, что Gemma работает сама через Ollama:

ollama run gemma4:e4b

Попробуйте простой запрос:

Create an outline for an article explaining AI agents to beginners.

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

/bye

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

Шаг 4: проверка того, запущен ли Ollama

По умолчанию Ollama прослушивает на:

http://127.0.0.1:11434

Запуск сервера вручную может привести к ошибке:

ollama serve
Error: listen tcp 127.0.0.1:11434: bind: address already in use

Эта ошибка не обязательно означает проблему. Обычно это значит, что Ollama уже запущен. Проверьте его, отправив запрос на конечную точку tags:

curl http://127.0.0.1:11434/api/tags

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

ollama ps

Второй сервер никогда не следует запускать на том же порту.

Шаг 5: создание проекта ADK

Создайте папку проекта в удобном для вас месте:

cd /Users/yourusername
mkdir bloggeragent
cd bloggeragent

Создайте файлы, необходимые проекту:

touch requirements.txt .env .gitignore __init__.py agent.py

Макет должен выглядеть вот так:

bloggeragent/
├── .env
├── .gitignore
├── __init__.py
├── agent.py
└── requirements.txt

Шаг 6: виртуальная среда

Виртуальная среда Python отделяет зависимости проекта от остальной части системы. Создайте её:

python3 -m venv .venv

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

source .venv/bin/activate

Теперь команда терминала должна начинаться с:

(.venv)

Проверьте, используется ли правильный интерпретатор:

which python

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

/Users/philipobiorah/bloggeragent/.venv/bin/python

Шаг 7: установка ADK с поддержкой локальных моделей

Добавьте зависимости в файл requirements.txt:

google-adk[extensions]==2.2.0
python-dotenv
litellm>=1.84

Затем установите их:

python -m pip install --upgrade pip
python -m pip install -r requirements.txt

Важна часть [extensions]. При стандартной установке ADK могут отсутствовать дополнительные пакеты, необходимые обертке LiteLlm, в результате чего приложение может выдать ошибку импорта:

ImportError: LiteLLM support requires:
pip install google-adk[extensions]

Если это появляется, установите дополнения явно:

python -m pip install --upgrade "google-adk[extensions]==2.2.0"
python -m pip install --upgrade "litellm>=1.84"

Кавычки предотвращают, чтобы интерпретаторы вроде Zsh рассматривали квадратные скобки как шаблон. Чтобы проверить интеграцию:

python -c "from google.adk.models.lite_llm import LiteLlm; print('LiteLLM connection ready')"

Ожидаемый результат:

LiteLLM connection ready

Шаг 8: настроить проект на Ollama

Добавьте локальный адрес в файл .env:

OLLAMA_API_BASE=http://127.0.0.1:11434

В отличие от версии Gemini, работающей на сервере, для локальной установки не требуется ключ API Google, поэтому эта переменная отсутствует:

GOOGLE_API_KEY

Локальная конфигурация по-прежнему требует защиты, поэтому добавьте эти записи в .gitignore:

.env
.venv/
__pycache__/
*.pyc

Хранение файла .env вне системы контроля версий является хорошей практикой, даже если в настоящее время в нем нет конфиденциальной информации.

Шаг 9: превращение папки в пакет

Добавьте одну строку в файл __init__.py, чтобы ADK мог импортировать определение агента из этого пакета:

from . import agent

Шаг 10: определение локальной модели

Откройте файл agent.py и начните с импортов:

import datetime
from dotenv import load_dotenv
from google.adk.agents import Agent, LoopAgent
from google.adk.models.lite_llm import LiteLlm
from google.adk.tools import agent_tool

Загрузка конфигурации среды:

load_dotenv()

Создайте соединение с локальной моделью:

MODEL = LiteLlm(
    model="ollama_chat/gemma4:e4b"
)

Google рекомендует использовать провайдер ollama_chat вместо обычного ollama. Интерфейс, предназначенный для чатов, лучше сохраняет контекст разговора и снижает вероятность ненужных повторных вызовов инструментов. При использовании более маленькой модели меняется только строка с указанием модели:

MODEL = LiteLlm(
    model="ollama_chat/gemma4:e2b"
)

Шаг 11: рабочий процесс с несколькими агентами

Полный код для работы с несколькими агентами взят из курса Google codelab, в разделе, посвящённом созданию блог-автора с использованием нескольких агентов. Предоставленный код помещается в файл agent.py. В нём определены следующие компоненты:

  • BlogPlanner формирует структуру статьи.
  • OutlineValidationChecker проверяет эту структуру.
  • RobustBlogPlanner выполняет планирование и проверку внутри цикла с фиксированным количеством итераций.
  • BlogWriter преобразует структуру в полную статью.
  • BlogPostValidationChecker анализирует готовый текст.
  • RobustBlogWriter связывает процесс написания со стадией анализа.
  • planner_tool и writer_tool представляют эти два рабочих процесса в виде инструментов, доступных для вызова.
  • root_agent координирует весь процесс от начала до конца.

В оригинальной версии эти агенты взаимодействуют с размещённой моделью Gemini. Архитектура остаётся прежней, меняется только конфигурация модели.

Как и в код-лабе, файл __init__.py содержит:

from . import agent

Это делает рабочий процесс агента доступным для запуска ADK. Далее скорректируйте импорты в файле agent.py код-лаба. Добавьте импорт LiteLlm:

from google.adk.models.lite_llm import LiteLlm

Эти два импорта не используются в предоставленном коде и могут быть удалены:

import sys
from pathlib import Path

Эти остаются:

import datetime
from dotenv import load_dotenv
from google.adk.agents import Agent, LoopAgent
from google.adk.tools import agent_tool

В кодлабе модель определяется путем поиска в среде:

MODEL = os.getenv("MODEL", "gemini-flash-latest")

Замените эту строку на местный соединитель:

MODEL = LiteLlm(
    model="ollama_chat/gemma4:e4b"
)

В верхней части файла agent.py должно быть следующее содержимое:

import datetime
from dotenv import load_dotenv
from google.adk.agents import Agent, LoopAgent
from google.adk.models.lite_llm import LiteLlm
from google.adk.tools import agent_toolload_dotenv()MODEL = LiteLlm(
    model="ollama_chat/gemma4:e4b"
)

Определения планировщика, автора, верификаторов, LoopAgent, AgentTool и root_agent остаются точно такими, какими они представлены в кодлабе. Каждый агент уже содержит:

model=MODEL

Изменение единственной общей переменной MODEL приводит к перенаправлению всей системы с хостингового API Gemini на Gemma 4, работающую через Ollama.

Что отрабатывается

В этом небольшом проекте сочетаются несколько концепций агентов:

  • Размышление: Gemma интерпретирует цель и выбирает подход.
  • Планирование: агент-планировщик составляет план действий.
  • Действие: главный агент запускает специализированные рабочие процессы.
  • Использование инструментов: планирование и написание текста реализованы как инструменты агента.
  • Общее состояние: результаты передаются от планировщика к автору и проверщикам.
  • Проверка: специальные агенты-проверщики анализируют каждый промежуточный результат.
  • Оркестрация: главный агент решает, что и когда выполнять.
  • Итерация: циклы с границами позволяют вносить изменения.
  • Локальный вывод: Ollama запускает Gemma 4 на Mac.

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

Запуск готовой версии

Полная реализация, включающая планировщик, генератор текста, проверщики, конфигурацию локальной Gemma 4 и основного агента, опубликована в репозитории GitHub под названием bloggeragent. Чтобы использовать её, склонируйте его:

git clone https://github.com/philipobiorah/bloggeragent.git
cd bloggeragent

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

python3 -m venv .venv
source .venv/bin/activate

Установите зависимости:

python -m pip install -r requirements.txt

Это полная локальная адаптация примера написания блогов от Google, настроенная с использованием Gemma 4, Ollama и LiteLLM вместо хостингового API Gemini.

Вывод

Для работы ИИ-агента не всегда требуется платный API модели. Благодаря Gemma 4, Ollama, LiteLLM и Google ADK приложение с несколькими агентами может планировать статью, проверять этот план, писать черновик, редактировать его и возвращать результат на компьютере с процессором Apple Silicon без дополнительных затрат за каждый запрос. Работа в локальной среде также облегчает понимание того, как функционируют системы агентов за пределами интерфейса чата.

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

Связанные материалы

  • Безголовой двухагентный цикл программирования с OpenCode и Ollama — Как разделить процессы планирования и проверки между двумя агентами в OpenCode с использованием Ollama, включая настройку прав доступа, навыков, правил редактирования, скриншотов и коммитов, доступных только для людей.
  • Headroom: сокращение затрат на токены агентов с помощью обратимого сжатия контекста — Как Headroom сжимает логи, фрагменты данных RAG и результаты работы инструментов перед их передачей модели с использованием CacheAligner, ContentRouter, CCR, режима прокси и осознанных компромиссов.
  • Модель объемом 270 млн параметров для вопросов с несколькими этапами обработки: потери точности и локальные преимущества — Тонко настроенная версия Gemma-3-270M выбирает первый вариант поиска для вопросов с несколькими этапами обработки, показав результат 81 из 95. Она уступает более крупным моделям по уровню точности, но превосходит их по затратам, защите приватности и возможности использования в офлайн-режиме.