
Свой AI-прокси на Java: как я пытался подключится к Gemini
FilipLinx 12 минут назад Свой AI-прокси на Java: как я пытался подключится к Gemini Средний 12 мин 169 Java * DevOps * Искусственный интеллект Программирование * Для разработки одного из моих проектов: документа BDoc...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: FilipLinx 12 минут назад Свой AI-прокси на Java: как я пытался подключится к Gemini Средний 12 мин 169 Java * DevOps * Искусственный интеллект Программирование * Для разработки одного из моих проектов: документа BDoc (Book Document альтернатива устаревшим закрытым бинарным форматами такими как IDML, INDD или Scribus SLA) потребовалась нейросеть, которая может держать контекст очень долго. На данный момент для это цели идеально подходит Gemini, так как контекстное окно у Gemini в 1 миллион токенов. Но есть одна загвоздка, компания Google заблокировала некоторые регионы.
То есть запросы от этих регионов не будут доходить до google. Рассмотрев все за и против, было принято решение написать небольшую программу на java - ai-proxy. То есть прокси для нейросетей.
Технические детали
ИдеяНаписать на java ai-proxy, чтобы она работала не только с Gemini, но и если понадобится с OpenAI и Anthropic. У каждого сервиса — свой формат авторизации: у Gemini ключ идёт в query-параметре, у OpenAI — в Authorization: Bearer, у Anthropic — в заголовке x-api-key. Хотелось единой точки входа: один домен, один прокси, а дальше он сам разбирается, куда слать запрос.
Версия 1 — наивная, с захардкоженными ключамиПервая версия была предельно простой: Spring WebFlux + WebClient, роутинг по первому сегменту пути (/gemini/... ), и конфиг вида:app: providers: gemini: base-url: auth: type: query parameter: key value: ${GEMINI_API_KEY} openai: base-url: auth: type: bearer value: ${OPENAI_API_KEY:} anthropic: base-url: auth: type: header header: x-api-key value: ${ANTHROPIC_API_KEY:}Прокси сам добавлял ключ к запросу — в зависимости от AuthenticationType(QUERY, HEADER, BEARER). Но у этого подхода два системных недостатка:Первый.
Ключи живут на сервере прокси. Это значит, что прокси становится единой точкой хранения секретов для всех клиентов, которые через него ходят. Если у меня несколько ассистентов с разными правами доступа — разделить их не получится без доработки кода.
Отраслевые последствия
Любой новый тип авторизации (а он рано или поздно появится — у следующей нейросети может быть кастомная схема) требовал правки Java-кода: новый enum в AuthenticationType, новая ветка в switch, пересборка образа, редеплой. Версия 2 — pass-through ключейСледующая идея: прокси вообще не должен знать про ключи. Клиент (тот же OpenCode) уже умеет сам подставлять Authorization или x-api-key — зачем дублировать эту логику на сервере?
Прокси должен просто прозрачно форвардить все заголовки, включая авторизационные, как есть. @Service public class ProxyService { private final WebClient webClient; private final UrlBuilderService urlBuilderService; public ProxyService(WebClient webClient, UrlBuilderService urlBuilderService) { this. webClient = webClient; this.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





