Блогер із кількома агентами без витрат на 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’s 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 багатоагентна програма може спланувати статтю, перевірити план, написати чернетку, її переглянути та надати результат на Mac з процесором Apple Silicon без додаткових зборів за кожен запит. Робота в локальному режимі також полегшує розуміння того, як працюють системи агентів під інтерфейсом чату.
Основний урок полягає у тому, що агент — це більше, ніж просто його модель мови. Здатний агент формується внаслідок поєднання моделі, інструкцій, інструментів, стану, механізмів оркестрації, перевірки та захисних заходів. Робота моделі локально забезпечує більший контроль над інфраструктурою, а проектування системи навколо неї визначає, чи призведе цей контроль до створення чогось корисного, надійного та відповідального.
Пов’язана література
- Практичні нотатки: Google ADK пояснено: створення багатоагентних систем — Детальний огляд Практичних нотаток: Google ADK пояснено: створення багатоагентних систем, включаючи контракти, перевірки та шаблони коду для команд, які використовують цю модель.