Галоўная / Артыкулы

Шматагентны блогер на Mac без выдаткаў на API: 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 (ADK), які керуе агентамі, і LiteLLM, які ўз’еднвае іх.

Мадэлі мов пераходзяць за межы фармата запыт-адказ. Аплікацыі, створаныя на ўсіх іх, аналізуюць цэль, складаюць план, запускаюць інструменты, оцінююць рэзультаты і перадаюць заведамення спецыялізаваным агентам. Большасць інструкцый для такіх сістэм апыляецца на платныя хмарныя API, што ўдобна, але прыносіць платы за выкарыстанне, неабходнасць керавання ключамі API, ліміты на выкарыстанне і пытанні пра тое, куды ідуць даны. Выкарыстанне локальных рашэнняў усунуе платаў на аснове токенаў. Аднак цэлкам не робіць вычысленні безкоштовным, адколі все ўсё такі ж вітрачаецца памяць, час працэсара, прыемліванне дадзеных і электрэчнасць.

Сістэма, якая ствараецца

Праект плануе, пішчырае і адзначае артыкул для тэхнічнага блогу. Пры заданым тэме ён вырахоўвае крокі, стварае структураваны план, пішчырае матэрыял і адзначае чэрнавік. Гэта розвівае два базовыя аспекты агентнага ІІ: разумаванне і дзеянне. Для выканання задачы вікорыстоўваецца пяць компонентаў:

  • Агент-планавальнік, які стварае план статты.
  • Агент-пераканальнік плану, які пераканаецца, чы рэалізаваны план адпавядае трэбаванням.
  • Агент-пішчыраец, які ператварае затверджаны план у цэлую артыкул.
  • Агент-адзначальнік статты, які адзначае структуру і тэхнічную яснасць.
  • Корневы агент, які коордынуе весь працэс.

Дызайн створаны на адной з методыкаў Google — Build an AI Agent with Google ADK codelab, з аднай змянай: мадэль 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 ужо запусцены. Пераканайцеся, выканаўшы запіт да канцэнтра паўнакоў:

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, якая розмешчана на серверах, не трэба ключа Google API, таму ў локальнай наладзе гэтая змянная не выкарыстоўваецца:

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 runner-у. Далей скорэктавайце імпорты ў 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 Mac без дагадковых збораў за кожны запіт. Работа локальна таксама дапамагае легчэй разумець, як працуюць сістэмы агентаў пад інтэрфейсам чату.

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