Сервис развивается: тестируем формат, собираем идеи, улучшаем сервис. Есть идеи?

Написать
Войти
Дайджесты
Схема архитектуры self-hosted API для оптимизации расходов на LLM

Оптимизация затрат на LLM в 12 раз: архитектура self-hosted API и агенты в OpenCode Go

Автоматическая обработка десятков тысяч записей через внешние LLM API упирается в финансовый лимит. Опыт создания собственного Express/SQLite сервиса над OpenCode Go: проксирование форматов OpenAI и Anthropic, интеграция Agent API с промптами и сокращение стоимости запроса до долей копейки.

Оптимизация затрат на LLM в 12 раз: архитектура self-hosted API и агенты в OpenCode Go

Массовая автоматизированная обработка неструктурированных текстовых данных с использованием современных языковых моделей сталкивается с серьезным финансовым барьером. При необходимости ежедневно анализировать десятки тысяч сообщений, извлекая из них строго валидные структуры данных (даты, категории, финансовые показатели и контактные данные), прямые вызовы коммерческих облачных API ведут к стремительному росту бюджета.

Решением задачи стал переход на гибридную инфраструктуру: развертывание собственного прокси-сервера над сервисом подписок OpenCode Go. Такой подход позволил сохранить высокое качество извлечения данных в формате JSON и одновременно снизить затраты на обработку одного сообщения до 0.006 рублей.

Экономический тупик прямых обращений к коммерческим LLM API

В рамках проекта потребовалось организовать конвейер потоковой обработки рекламных публикаций и пользовательских объявлений. Ключевые требования к системе включали высокую точность извлечения сущностей, 100% соответствие JSON-схеме и минимальную себестоимость операции.

Первичный анализ бесплатных моделей через открытые маршрутизаторы показал неудовлетворительные результаты: около 40% ответов содержали синтаксические ошибки в JSON, а в остальных случаях наблюдались искажения бизнес-логики. Сравнительное тестирование платных API на реальном датасете сформировало следующую картину:

  • Qwen 3.5-Flash: стоимость запроса около 8 копеек, корректность структуры 95%, качество извлечения 8/10.
  • Mistral 3.5: стоимость запроса около 7 копеек, корректность структуры 85%, качество извлечения 5/10.
  • GPT 5-nano: стоимость запроса от 10 до 12 копеек, корректность структуры 100%, качество извлечения 10/10.

Хотя модель GPT 5-nano продемонстрировала идеальное качество, итоговые расходы на обработку массива в 10 000 сообщений составили бы от 100 до 120 рублей. На масштабах в сотни тысяч операций в месяц такая экономика становится неприемлемой, а попытки упрощения системных промптов приводили лишь к деградации качества выгрузки.

Механика льготного токенового лимита в сервисе OpenCode Go

Решение было найдено в использовании подписки OpenCode Go. Инструмент предназначен для интерактивной работы разработчиков с AI-агентами и предлагает фиксированный тариф $5 в месяц, включающий эквивалент $60 токеновых кредитов по прямым ценам провайдеров. Это создает 12-кратную финансовую скидку на стартовый объем потребления.

Однако сервис OpenCode Go ориентирован на консольное применение и не предоставляет готового REST API для внешней интеграции сторонних приложений. Существующие в сообществе открытые утилиты представляли собой либо простые прокси для базовых моделей, либо CLI-скрипты без поддержки параллельной обработки задач. Для встраивания подписки в производственный конвейер потребовалась разработка собственного сервера-посредника.

Проектирование прокси-сервера на Express.js и SQLite

В качестве основы прокси-сервиса был выбран легкий бэкенд на Node.js с использованием фреймворка Express.js и встроенной базы данных SQLite. Сервер выполняет авторизацию входящих клиентских запросов, ведение журнала операций и маршрутизацию к инфраструктуре OpenCode Go.

Использование SQLite полностью закрывает потребности проекта в хранении сервисных метаданных, истории запросов и токенов авторизации без усложнения инфраструктурной эксплуатации. Архитектура сервера спроектирована по модульному принципу, что позволяет легко добавлять новые правила валидации и лимитирования запросов.

Унификация формата запросов между спецификациями OpenAI и Anthropic

В процессе разработки сервиса проксирования выявилась важная техническая особенность: из 13 моделей, доступных в рамках подписки, часть работает исключительно по спецификации Anthropic API (где системный промпт передается в отдельном поле system, а также требуются обязательные параметры вроде max_tokens), тогда как оставшиеся модели принимают традиционный формат OpenAI (messages массив).

Для скрытия этой сложности от внешних сервисов в прокси-сервере был реализован слой адаптеров:

const isAnthropicModel = ANTHROPIC_MODELS.includes(request.model);

if (isAnthropicModel) {
  const systemPrompt = extractSystemMessage(request.messages);
  const userMessages = filterUserMessages(request.messages);
  
  return callAnthropicEndpoint({
    model: request.model,
    system: systemPrompt,
    messages: userMessages,
    max_tokens: request.max_tokens ?? 4096
  });
} else {
  return callOpenAIEndpoint(request);
}

Благодаря этой прослойке клиенты взаимодействуют с единым универсальным API, не учитывая внутренние различия протоколов конкретных нейросетей.

Интеграция Agent API и организация долговременного контекста

Дополнительным преимуществом архитектуры стала интеграция с Agent API платформы OpenCode. В отличие от стандартного stateless-вызова моделей, агентный режим поддерживает долгосрочное хранение контекста и инструкции системного уровня.

В структуре рабочего пространства создаются специальные файлы конфигурации:

  • AGENTS.md: содержит глобальные правила форматирования JSON, списки запрещенных галлюцинаций и требования к валидации дат.
  • context.md: хранит динамический справочник категорий и актуальные бизнес-правила.
  • Сегментированные каталоги workspaces/: обеспечивают полную изоляцию параллельных потоков обработки данных разных клиентов.

Сравнительные метрики стоимости и производительности

Внедрение собственнной архитектуры проксирования над OpenCode Go дало следующие результаты:

  • Себестоимость вызова: эффективная цена обработки одного рекламного поста снизилась до 0.006 рублей (~0.6 копейки).
  • Точность извлечения: сохранена на уровне 100% благодаря использованию оригинальных флагманских моделей.
  • Отказоустойчивость: встроенный в Express-сервер механизм повторных попыток с экспоненциальной задержкой снизил процент сбоев сети до нуля.

Создание локального прокси-слоя позволило объединить финансовую выгоду льготных подписок с надежностью промышленного API.