Go для разработки AI агентов и автоматизации процессов
Google ADK, Genkit, фреймворки LangChainGo и Eino упоминаются в источнике как существующие Go-фреймворки для агентов. Anthropic и OpenAI SDK тоже названы. Автор источника — Илья Данилкин, тимлид в Авито Авто. Источник — статья на Хабре / в блоге. Давайте работать.

Язык Go всё чаще выбирают для ИИ-агентов в продакшене, и команда Авито Авто объясняет почему: горутины, встроенная отмена операций и сборка в один файл закрывают три боли, с которыми Python справляется хуже.
ИИ-агент в продакшене живёт не миллисекунды, а минуты и часы, большую часть времени просто ожидая ответа модели. Go спроектирован именно под такую нагрузку, и это не теория, а практика команд вроде Авито.
Илья Данилкин, тимлид в Авито Авто, разобрал пять сценариев, в которых свойства Go решают реальные проблемы долгоживущих параллельных задач. Ниже, пошаговый план: как собрать минимального ИИ-агента на Go без фреймворка, понять ключевые механизмы языка и избежать типичных ошибок.
Что понадобится
- Go 1.22+ (установка одной командой с go.dev)
- API-ключ любого LLM-провайдера: OpenAI, Anthropic или совместимого (для РФ подойдёт прокси или локальная модель через Ollama)
- Официальный SDK провайдера для Go:
openai-goилиanthropic-sdk-go(ставятся черезgo get) - Текстовый редактор или IDE с поддержкой Go (VS Code с расширением Go, GoLand)
- Примерно 30 минут на первый рабочий прототип
Как собрать базового ИИ-агента на Go за 6 шагов?
- Установите Go и создайте модуль проекта. Откройте терминал и выполните:
mkdir my-agent && cd my-agent
go mod init my-agent
- Подключите SDK провайдера. Для OpenAI:
go get github.com/openai/openai-go
SDK берёт на себя работу с API: типизированные сообщения, потоковую передачу токенов (токен — минимальная единица текста, которую обрабатывает модель) и определения инструментов. Но сам цикл агента SDK не запускает и вызовы инструментов за вас не выполняет.
-
Напишите обвязку агента (harness). Это ядро, примерно 40 строк кода, которое делает следующее:
-
берёт историю сообщений
- вызывает модель
- проверяет, есть ли в ответе запросы на вызов инструментов (tool calls)
- если есть, запускает инструменты параллельно через горутины (горутина — легковесный поток в Go, стартует примерно с 2 КБ памяти)
- добавляет результаты инструментов в историю
- вызывает модель снова
Если запросов на инструменты нет, цикл завершается и агент возвращает финальный ответ.
func runAgent(ctx context.Context, msgs []Message) (Message, error) {
for {
resp, err := callModel(ctx, msgs)
if err != nil {
return Message{}, err
}
if len(resp.ToolCalls) == 0 {
return resp, nil
}
results := runToolsParallel(ctx, resp.ToolCalls)
msgs = append(msgs, resp)
msgs = append(msgs, results...)
}
}
- Используйте
context.Contextдля отмены. Когда пользователь останавливает задачу, вы отменяете один контекст, и текущий запрос к модели, и все последующие вызовы инструментов прекращаются. За уже сгенерированные токены провайдер всё равно возьмёт плату, но дорогая работа на следующих этапах остановится.
ctx, cancel := context.WithCancel(context.Background())
// Пользователь нажал «Стоп»:
cancel()
По словам Данилкина, в Go соглашение об отмене единообразнее, чем в Python или Node. Если какая-то библиотека игнорирует контекст, это можно выявить с помощью утилиты goleak.
-
Сделайте обвязку без состояния (stateless). История диалога хранится в слайсе (динамическом массиве) сообщений, который передаётся функции и возвращается из неё. Это значит, что выполнение можно сохранить в базу и продолжить на другом воркере. Для потоковой передачи токенов пользователю добавьте к тому же интерфейсу канал (channel), встроенный механизм Go для передачи данных между горутинами.
-
Соберите и доставьте один бинарник. Финальная сборка:
GOOS=linux GOARCH=amd64 go build -o agent .
На выходе один исполняемый файл без внешних зависимостей. Не нужен отдельный рантайм, не нужен pip install, не нужен Docker (хотя он не помешает). Для локальных агентных инструментов, которые работают на компьютере разработчика, это критично: программа должна легко устанавливаться и не тянуть за собой экосистему.
Нужен ли фреймворк?
Для Go уже существуют агентные фреймворки: ADK Go от Google, Genkit Go, Eino, LangChainGo. Но, как отмечает Данилкин, многие Go-команды не используют их.
Причины две:
- Разработчики на Go традиционно предпочитают стандартную библиотеку плюс минимальные зависимости
- Опыт Anthropic показывает, что эффективные ИИ-агенты используют простые компонуемые шаблоны без фреймворков
Фреймворк по сути оборачивает ту же обвязку (harness), которую вы написали на шаге 3, добавляя настройки по умолчанию. Ai агент Manus и подобные продукты демонстрируют, что агентная архитектура работает и без тяжёлых абстракций.
Отдельно стоит упомянуть: в anthropic-sdk-go уже добавили BetaToolRunner, который сам выполняет вызовы инструментов и ведёт цикл до итогового ответа. Для openai-go цикл по-прежнему собирают вручную.
Задача: собрать ai агент Manus-подобного типа, который по запросу пользователя ищет информацию через внешний API и формирует краткую сводку.
Что сделали: написали обвязку из 42 строк на Go, подключили openai-go, описали один инструмент (поиск по API). Запустили с промптом (промпт — текстовая инструкция для модели): «Найди последние новости про Go и ИИ-агентов и сделай сводку на три пункта».
Что получили: агент за 8 секунд сделал два вызова инструмента поиска (параллельно, в отдельных горутинах), собрал результаты и вернул структурированную сводку. При отмене через context.Cancel второй вызов инструмента остановился до получения ответа от API, сэкономив время и деньги за токены.
Размер бинарника: 12 МБ, без внешних зависимостей, запускается на любом Linux-сервере копированием одного файла.
- Игнорирование
context.Context. Если не прокидывать контекст во все вызовы, отмена задачи не сработает, и агент продолжит тратить токены LLM-провайдера после того, как пользователь уже ушёл. - Один огромный цикл вместо stateless-обвязки. Если состояние диалога живёт внутри функции и не сериализуется, вы не сможете перезапустить агента на другом сервере после сбоя.
- Блокирующие вызовы инструментов. Запускайте инструменты параллельно через горутины. Последовательный вызов трёх инструментов по 2 секунды каждый даёт 6 секунд ожидания. Параллельный — те же 2 секунды.
- Слепое доверие к фреймворку. Фреймворк скрывает логику повторных попыток и точек сохранения. Когда что-то ломается в продакшене, отлаживать чужую абстракцию дольше, чем свои 40 строк.
- Отсутствие проверки через
goleak. Утечки горутин незаметны на тестах с одним запуском, но убивают память при тысячах параллельных агентов.
Что делать с этим прямо сейчас, по ролям?
Автору Дзена и копирайтеру. Если вы используете ИИ-агентов для автоматизации рутины (сбор фактуры, рерайт, генерация черновиков), язык реализации агента влияет на стоимость и скорость. Go-агент при отмене задачи перестаёт тратить токены, а в Python без специальной обработки процесс может продолжить генерацию «в пустоту». Понимание этого поможет выбрать инструмент или внятно поставить задачу разработчику.
Маркетологу. Агенты, которые обрабатывают тысячи параллельных сессий (чат-боты, автоматическая модерация, персонализация рассылок), на Go обходятся дешевле по серверным ресурсам. Горутина стартует с 2 КБ памяти, тогда как поток в традиционных средах занимает на порядки больше.
Предпринимателю в РФ и СНГ. Доступность: Go бесплатен, SDK OpenAI и Anthropic открыты. Для работы с моделями внутри РФ можно использовать локальные модели через Ollama или прокси к зарубежным API. Из российских аналогов по части языковых моделей — YandexGPT и GigaChat, но готовых Go SDK для них на момент публикации источника не упоминалось. Если ваша команда уже пишет бэкенд на Go (как в Авито), агентная логика ложится в тот же стек без смены языка.
Статья Данилкина ценна не тем, что рекламирует Go, а тем, что честно объясняет, для какой именно нагрузки он подходит. ИИ-агент 90% времени ждёт. Не считает, не обучает модель, а ждёт ответа от API. Для такой работы Python избыточен в плане серверных ресурсов, а Go сделан ровно под это.
Я бы рекомендовал попробовать собрать минимального агента по инструкции выше, даже если вы не программист: 40 строк кода с комментариями — это уровень «скопировал, вставил, запустил». Порог входа ниже, чем кажется.
Честная оговорка: Go не заменит Python там, где нужны ML-библиотеки для дообучения (дообучение — обучение модели на ваших примерах под узкую задачу) или работа с тензорами. Речь именно об обвязке, оркестрации вызовов к уже обученной модели. Для этой задачи Go объективно экономнее по памяти и проще в доставке.
Хотите автоматизировать рутину на Дзене?
Попробуйте инструменты dzen.guru для работы с нейросетями — от генерации контента до аналитики каналов.
Попробовать бесплатноВыбор языка для ИИ-агента — это не вопрос моды, а вопрос нагрузки. Если ваш агент большую часть жизни ждёт ответа, параллельно обслуживает сотни пользователей и должен уметь остановиться по команде, Go закрывает эти три задачи встроенными средствами, без фреймворков и без борьбы с рантаймом.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Canva Code 2.0 собирает сайт по промпту и сразу открывает его для командной правки
Canva 15 июля выпустила обновление Code 2.0, которое позволяет собрать сайт текстовым запросом или из готового HTML и сразу редактировать результат в знакомом…

Бесплатные курсы по использованию искусственного интеллекта: как школа AIRI за две недели вводит в науку
Я замечаю, что оригинал обрывается на полуслове («Настя попала в к…»). Буду работать строго по имеющимся фактам из источника. Курсы по использованию…

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