LangChainGo
Подключение Hubris к LangChainGo — порту LangChain на Go. Клиент OpenAI с другим адресом, один ключ на все модели.
LangChainGo — порт LangChain на Go: модели, цепочки, агенты, память и векторные хранилища в одном модуле. Библиотека сама ходит в API по HTTP, без CGO и внешних процессов.
Hubris подключается через пакет llms/openai с другим адресом сервера — отдельного пакета не нужно.
Требования
- Go 1.23+ и
go get github.com/tmc/langchaingo - Аккаунт на hubris.pw и API-ключ в переменной окружения
HUBRIS_API_KEY
Подключение
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/tmc/langchaingo/llms"
"github.com/tmc/langchaingo/llms/openai"
)
func main() {
llm, err := openai.New(
openai.WithModel("anthropic/claude-sonnet-5"),
openai.WithBaseURL("https://api.hubris.pw/v1"),
openai.WithToken(os.Getenv("HUBRIS_API_KEY")),
)
if err != nil {
log.Fatal(err)
}
answer, err := llms.GenerateFromSinglePrompt(context.Background(), llm,
"Объясни, чем отличается кэш промпта от обычного ввода")
if err != nil {
log.Fatal(err)
}
fmt.Println(answer)
}Адрес — именно api.hubris.pw, с api. в начале и /v1 в конце. Домен hubris.pw — это сайт и личный кабинет: запросы к API он не обслуживает.
ID модели передаётся в openai.WithModel полностью, вместе с вендором: anthropic/claude-sonnet-5, openai/gpt-5.6-luna. Клиент отправляет его как есть — никаких дополнительных префиксов, в отличие от обёрток поверх LiteLLM, здесь не нужно.
Стриминг
Ответ приходит по частям через llms.WithStreamingFunc — остальной код не меняется:
_, err = llms.GenerateFromSinglePrompt(ctx, llm, "Расскажи о Go в трёх предложениях",
llms.WithStreamingFunc(func(ctx context.Context, chunk []byte) error {
fmt.Print(string(chunk))
return nil
}),
)Диалог с ролями
Для системной инструкции и истории сообщений — GenerateContent с llms.MessageContent:
resp, err := llm.GenerateContent(ctx, []llms.MessageContent{
llms.TextParts(llms.ChatMessageTypeSystem, "Отвечай кратко и по-русски."),
llms.TextParts(llms.ChatMessageTypeHuman, "Что такое горутина?"),
}, llms.WithMaxTokens(200))
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.Choices[0].Content)llms.WithTemperature, llms.WithMaxTokens, llms.WithTools и остальные CallOption работают так же, как с OpenAI напрямую.
Выбор моделей
| ID | Когда подходит |
|---|---|
google/gemini-3.7-flash | дешёвые шаги, классификация, маршрутизация |
anthropic/claude-sonnet-5 | рассуждение, длинный контекст, инструменты |
openai/gpt-5.6-luna | универсальный выбор |
deepseek/deepseek-v4-pro | недорогое рассуждение и код |
Каталог у нас открыт без ключа — список можно посмотреть прямо в браузере: api.hubris.pw/v1/models.
Готовый пример в LangChainGo
Мы отправили в LangChainGo пример examples/hubris-llm-example — pull request на ревью: консольная программа с флагами -model, -prompt, -temp, -stream, собранная ровно на том подключении, что описано выше. После приёма её можно будет запускать из репозитория командой go run . -model anthropic/claude-sonnet-5 -prompt "...". Пока PR не принят, скопируйте код с этой страницы — это тот же самый способ.
Решение проблем
Ошибка авторизации
Ключ неверный или отозван. Он начинается на sk-gw-, без пробелов по краям; целиком виден только при создании. Новый — в разделе «Ключи». Если HUBRIS_API_KEY не задан, os.Getenv вернёт пустую строку и openai.New завершится ошибкой missing the OpenAI API key, set it in the OPENAI_API_KEY environment variable ещё до запроса. Текст про OPENAI_API_KEY — от самой библиотеки: ей всё равно, как называется переменная, важно, что токен пустой. Проверьте, что HUBRIS_API_KEY видна процессу.
При неверном ключе ответ выглядит так: API returned unexpected status code: 401: Неверный API-ключ.
Ошибка про модель
API returned unexpected status code: 404: Модель не найдена: ... — ID должен совпадать с каталожным символ в символ, вместе с вендором перед косой чертой. Короткие имена без вендора и имена с датой на конце мы не принимаем.
Ошибка про недостаточный баланс
Пополните баланс в кабинете — от 300 ₽, через СБП, банковской картой или по счёту для юридических лиц.
Проверено на LangChainGo v0.1.14 (Go 1.27), 9 сентября 2026.Что дальше
- Каталог моделей — ID для
openai.WithModel(...). - Управление ключами — отдельный ключ под проект.
- Расходы — детализация по запросам и моделям.
- Chat Completions — что именно уходит в Hubris из LangChainGo.
Обновлено: