Как execai объединил девять LLM-провайдеров в одном терминальном агенте
Разработчики, которые ежедневно работают с AI-ассистентами в терминале, часто оказываются перед непростым выбором: какая модель лучше подходит для конкретной задачи и как не разориться на нескольких подписках одновременно. Проект execai, терминальный AI-агент, написанный на Go, предлагает радикально

Разработчики, которые ежедневно работают с AI-ассистентами в терминале, часто оказываются перед непростым выбором: какая модель лучше подходит для конкретной задачи и как не разориться на нескольких подписках одновременно. Проект execai, терминальный AI-агент, написанный на Go, предлагает радикальное решение: вместо привязки к одному провайдеру он предоставляет единый интерфейс для девяти LLM-провайдеров, включая Kimi K3, GLM-5.2, Claude и локальную Ollama. Это позволяет переключаться между моделями на лету, сохраняя общую историю чата и используя один и тот же набор команд. Такой подход не только экономит время, но и открывает новые возможности для сравнения и комбинирования моделей в реальных проектах.
Идея создания мультипровайдерного агента родилась из практической потребности. У пользователей execai оказались разные подписки и доступы: от Kimi Code за 19 долларов в месяц до корпоративных ключей Anthropic, а кто-то предпочитает бесплатную локальную Ollama. Вместо того чтобы заставлять выбирать что-то одно, автор проекта решил сделать мультитул, который умеет работать со всеми популярными сервисами одновременно. Это особенно ценно в условиях, когда ни одна модель не является идеальной для всех задач, и разработчики вынуждены переключаться между инструментами вручную. execai устраняет эту проблему, предлагая единую точку входа для всех моделей.
Архитектура: один интерфейс для двух несовместимых миров API
Ключевая сложность при создании такого агента заключалась в том, что LLM-провайдеры используют два несовместимых формата API: Anthropic-совместимый (Claude, Kimi, GLM) и OpenAI-совместимый (OpenAI, Ollama, многие другие). Чтобы объединить их в одном агенте, пришлось создать абстрактный слой, который унифицирует запросы и ответы, скрывая различия между протоколами. В основе лежит интерфейс из пяти строк, который описывает основные методы: отправка сообщения, получение ответа, работа с инструментами (tool calls) и стриминг. Каждый провайдер реализует этот интерфейс, а внутренний диспетчер решает, как преобразовать запрос в нужный формат. Например, для Anthropic-совместимых API используется формат сообщений с ролями user и assistant, а для OpenAI-совместимых — массив сообщений с ролью system.
Отдельная проблема — SSE-парсеры (Server-Sent Events), которые стримят ответы. В Anthropic-совместимых API события приходят в одном формате, в OpenAI — в другом, а для tool calls требуется аккумулировать частичные данные, пока не соберётся полный вызов инструмента. В execai для этого написан универсальный парсер, который накапливает буфер и выдаёт готовые tool calls, когда они полностью сформированы. Это позволяет агенту корректно обрабатывать сложные сценарии, требующие вызова внешних функций, независимо от провайдера.
Динамические каталоги моделей и автодетект тарифа
Ещё одна интересная деталь — динамические каталоги моделей. Вместо жёстко заданного списка execai запрашивает доступные модели у каждого провайдера через их API (например, /models для OpenAI-совместимых). Это позволяет автоматически подхватывать новые модели, которые появляются у провайдеров, и не требует обновления агента при каждом релизе. Такой подход гарантирует, что пользователь всегда имеет доступ к актуальным моделям, даже если они были выпущены после установки агента.
Для подписок с фиксированным тарифом, таких как Kimi Code или GLM Coding Plan, реализован автодетект: агент определяет тип подписки по ключу API и подставляет соответствующую модель и лимиты. Это избавляет пользователя от ручной настройки и снижает риск ошибок, когда, например, ключ от подписки Kimi Code не подходит для обычного API Kimi. Автодетект особенно полезен для тех, кто использует несколько подписок одновременно, так как исключает необходимость вручную указывать, какой ключ для какой модели предназначен.
Делегирование в чужие CLI: когда API недостаточно
Иногда провайдер не предоставляет полноценного API, но зато есть удобный CLI. В таких случаях execai умеет делегировать выполнение команд во внешние интерфейсы, например, в официальный CLI провайдера. Это особенно актуально для сервисов, которые не имеют публичного API или ограничивают его использование, но предоставляют терминальные инструменты. Такой подход расширяет список поддерживаемых провайдеров без написания дополнительного кода, но добавляет сложности с обработкой вывода и управлением процессами. Тем не менее, для пользователей это означает, что они могут использовать практически любого провайдера, даже если официального API нет.
Делегирование в CLI также позволяет обходить ограничения, связанные с региональной доступностью или оплатой. Например, некоторые сервисы недоступны для пользователей из определённых стран, но их CLI можно запустить через прокси или другие обходные пути. execai предоставляет гибкость, которая особенно ценна для разработчиков из СНГ, сталкивающихся с проблемами оплаты зарубежных сервисов.
Как это работает на практике: переключение моделей на лету
Для пользователя мультипровайдерность выглядит просто: в чате можно в любой момент переключить модель, например, с Claude на GLM-5.2, и продолжить диалог с сохранённой историей. Это удобно, когда нужно сравнить ответы разных моделей на один и тот же вопрос или когда одна модель лучше справляется с конкретной задачей — например, Kimi K3 силён в анализе кода, а Claude — в генерации сложных архитектурных решений. История чата хранится в едином формате, и при переключении провайдера она конвертируется в соответствующий формат API. Это позволяет не терять контекст и продолжать работу без необходимости повторять предыдущие сообщения.
Представьте, что вы работаете над проектом и вам нужно быстро проверить, как разные модели справятся с рефакторингом функции. Вместо того чтобы копировать код в несколько чатов, вы просто переключаете модель в execai и получаете альтернативное решение. Это не только экономит время, но и даёт более полное представление о возможностях каждой модели, помогая выбрать лучшую для будущих задач.
Какие модели поддерживает execai и как их подключить?
На данный момент execai поддерживает девять провайдеров, включая Kimi K3, GLM-5.2, Claude, OpenAI, Ollama и другие. Подключение каждой модели происходит через настройку API-ключа или локального эндпоинта. Для локальных моделей, таких как Ollama, достаточно указать адрес сервера и имя модели. Для облачных провайдеров потребуется получить API-ключ на сайте соответствующего сервиса. Подробная инструкция доступна в документации проекта, а благодаря динамическим каталогам моделей нет необходимости вручную прописывать каждую модель — агент сам подтянет доступные варианты.
Важно отметить, что для подписок с фиксированным тарифом, таких как Kimi Code, execai автоматически определяет тип подписки по ключу и использует соответствующие лимиты. Это избавляет от необходимости вручную настраивать параметры запросов и позволяет сразу приступить к работе. Для пользователей, которые предпочитают локальные модели, execai предоставляет возможность использовать Ollama без каких-либо затрат, что особенно актуально для разработчиков с ограниченным бюджетом.
Кого затронет: разработчики, команды и бизнес
Мультипровайдерный терминальный агент — это инструмент прежде всего для разработчиков, которые работают с AI-ассистентами ежедневно. Он позволяет не привязываться к одному вендору, использовать разные модели для разных задач и экономить, комбинируя подписки и локальные модели. Например, можно использовать Ollama для простых задач и Claude для сложных, не переплачивая за лишние токены. Это особенно выгодно для фрилансеров и небольших команд, где каждый доллар на счету.
Для команд это означает гибкость: каждый разработчик может использовать ту модель, к которой у него есть доступ, а администратор может настроить общие ключи для нескольких провайдеров. Это упрощает управление доступом и позволяет централизованно контролировать расходы на AI-сервисы. Бизнес, который инвестирует в AI-инструменты, получает возможность диверсифицировать риски, не завися от одного поставщика. Если один провайдер временно недоступен или повышает цены, можно быстро переключиться на другого без потери производительности.
В русскоязычном сообществе такие инструменты особенно актуальны, учитывая проблемы с оплатой зарубежных сервисов и необходимость использовать локальные или альтернативные решения. execai с поддержкой Ollama и российских моделей, таких как GLM, может стать хорошим выбором для разработчиков из СНГ. Благодаря возможности делегирования в CLI, можно использовать даже те сервисы, которые официально недоступны в регионе, что расширяет горизонты для разработчиков.
Что дальше: развитие проекта и экосистемы
Автор execai продолжает развивать проект: добавляет новых провайдеров, улучшает парсеры и расширяет функциональность. В планах — поддержка большего количества локальных моделей, улучшенная работа с инструментами и, возможно, плагинная система для сторонних разработчиков. Это позволит сообществу вносить свой вклад в развитие агента, добавляя поддержку новых сервисов и функций.
Тенденция к мультипровайдерности очевидна: рынок LLM становится всё более фрагментированным, и инструменты, которые позволяют работать с несколькими моделями одновременно, будут востребованы. Возможно, в будущем мы увидим больше подобных агентов, которые станут стандартом для разработчиков. execai уже сейчас демонстрирует, как можно объединить несовместимые API и предоставить пользователям удобный и гибкий инструмент.
Итог
Мультипровайдерный терминальный агент execai — это практичный ответ на вызовы современного LLM-ландшафта. Он показывает, что можно объединить несовместимые API, сохранить удобство и гибкость, и при этом остаться простым в использовании. Для разработчиков это ещё один шаг к тому, чтобы AI-инструменты стали по-настоящему универсальными и доступными. Если вы ещё не пробовали execai, возможно, пришло время расширить свои горизонты и попробовать работать с несколькими моделями одновременно. Это не только сэкономит ваше время, но и откроет новые возможности для творчества и эффективности.