Блогер с несколькими агентами без затрат на API на Mac: Gemma 4, Ollama и Google ADK
Создайте локальную систему агентов для планирования, написания текстов и проверки с использованием Apple Silicon и библиотеки Gemma 4 через Ollama, LiteLLM и Google ADK, без дополнительных платежей за использование моделей за каждый запрос.
Источники: 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 без дополнительных затрат за каждый запрос. Работа в локальной среде также облегчает понимание того, как функционируют системы агентов за пределами интерфейса чата.
Основной урок заключается в том, что агент — это нечто большее, чем просто его языковая модель. Способный агент возникает в результате сочетания модели, инструкций, инструментов, состояния, механизмов оркестрации, проверки и защитных мер. Работа модели локально обеспечивает больший контроль над инфраструктурой, а проектирование системы вокруг нее определяет, приведет ли такой контроль к созданию чего-то полезного, надежного и ответственного.
Связанные материалы
- Практические заметки: Google ADK Explained: Создание многоагентных систем — Подробное руководство по использованию практических заметок: Google ADK Explained: Создание многоагентных систем, включающее контракты, проверки и готовые блоки кода для команд, использующих эту модель.