LangChain4j
Подключение Hubris к LangChain4j — фреймворку LLM-приложений на Java. Модуль OpenAI с другим адресом, один ключ на все модели.
LangChain4j — фреймворк для LLM-приложений на Java: модели, AI-сервисы с типизированными интерфейсами, инструменты, память диалога, RAG и интеграция со Spring Boot и Quarkus.
Hubris подключается модулем langchain4j-open-ai с другим адресом сервера — отдельного модуля не нужно.
Требования
- Java 17+ и зависимость
dev.langchain4j:langchain4j-open-ai - Аккаунт на hubris.pw и API-ключ в переменной окружения
HUBRIS_API_KEY
Maven:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.20.0</version>
</dependency>Gradle:
implementation("dev.langchain4j:langchain4j-open-ai:1.20.0")Подключение
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
ChatModel model = OpenAiChatModel.builder()
.baseUrl("https://api.hubris.pw/v1")
.apiKey(System.getenv("HUBRIS_API_KEY"))
.modelName("anthropic/claude-sonnet-5")
.build();
String answer = model.chat("Объясни, чем отличается кэш промпта от обычного ввода");
System.out.println(answer);Адрес — именно api.hubris.pw, с api. в начале и /v1 в конце. Домен hubris.pw — это сайт и личный кабинет: запросы к API он не обслуживает.
ID модели передаётся в modelName полностью, вместе с вендором: anthropic/claude-sonnet-5, openai/gpt-5.6-luna. Модуль отправляет его как есть — никаких дополнительных префиксов не нужно.
Стриминг
Для ответа по частям — OpenAiStreamingChatModel с теми же параметрами и обработчик StreamingChatResponseHandler:
import dev.langchain4j.model.chat.StreamingChatModel;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.chat.response.StreamingChatResponseHandler;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
StreamingChatModel model = OpenAiStreamingChatModel.builder()
.baseUrl("https://api.hubris.pw/v1")
.apiKey(System.getenv("HUBRIS_API_KEY"))
.modelName("anthropic/claude-sonnet-5")
.build();
model.chat("Расскажи о Java в трёх предложениях", new StreamingChatResponseHandler() {
public void onPartialResponse(String token) { System.out.print(token); }
public void onCompleteResponse(ChatResponse response) { System.out.println(); }
public void onError(Throwable error) { error.printStackTrace(); }
});Остальные возможности LangChain4j — AI-сервисы (AiServices.create(...)), инструменты через @Tool, память диалога — работают поверх этих же объектов модели без изменений.
Выбор моделей
| ID | Когда подходит |
|---|---|
google/gemini-3.7-flash | дешёвые шаги, классификация, маршрутизация |
anthropic/claude-sonnet-5 | рассуждение, длинный контекст, инструменты |
openai/gpt-5.6-luna | универсальный выбор |
deepseek/deepseek-v4-pro | недорогое рассуждение и код |
Каталог у нас открыт без ключа — список можно посмотреть прямо в браузере: api.hubris.pw/v1/models.
Hubris в документации LangChain4j
Мы отправили в LangChain4j раздел о Hubris на странице OpenAI-совместимых сервисов — pull request на ревью. Способ подключения в нём тот же, что описан выше: OpenAiChatModel.builder().baseUrl("https://api.hubris.pw/v1"). Ждать приёма не нужно — всё уже работает в текущем релизе.
Решение проблем
Ошибка авторизации
dev.langchain4j.exception.AuthenticationException с телом {"error":{"message":"Неверный API-ключ", ..., "code":"invalid_api_key"}} — ключ неверный или отозван. Он начинается на sk-gw-, без пробелов по краям; целиком виден только при создании. Новый — в разделе «Ключи».
Если HUBRIS_API_KEY не задан, System.getenv вернёт null, модель соберётся без ошибки, а запрос уйдёт без заголовка авторизации — то же исключение, но с сообщением API-ключ не передан. Проверьте, что переменная видна процессу JVM.
Ошибка про модель
dev.langchain4j.exception.ModelNotFoundException с кодом model_not_found — ID должен совпадать с каталожным символ в символ, вместе с вендором перед косой чертой. Короткие имена без вендора и имена с датой на конце мы не принимаем.
Ошибка про недостаточный баланс
Пополните баланс в кабинете — от 300 ₽, через СБП, банковской картой или по счёту для юридических лиц.
Проверено на LangChain4j 1.20.0 (langchain4j-open-ai, Temurin JDK 21), 9 сентября 2026.
Что дальше
- Каталог моделей — ID для
modelName(...). - Управление ключами — отдельный ключ под проект.
- Расходы — детализация по запросам и моделям.
- Chat Completions — что именно уходит в Hubris из LangChain4j.
Обновлено: