- Go 100%
| cmd/tools | ||
| .gitignore | ||
| embedding.go | ||
| go.mod | ||
| go.sum | ||
| http.go | ||
| LICENSE | ||
| llm.go | ||
| llm_test.go | ||
| README.md | ||
| structs.go | ||
| tools.go | ||
| tools_test.go | ||
| vision.go | ||
llm-simple-api
Простая Go библиотека для взаимодействия с LLM (Language Model) API.
Описание
Библиотека предоставляет удобный интерфейс для работы с различными LLM API, включая поддержку Open-WebUI, OpenAI и других совместимых сервисов. Предоставляет функционал для отправки сообщений, управления историей чата и настройки параметров модели.
Возможности
- Поддержка различных LLM API (Open-WebUI, OpenAI и др.)
- Управление историей чата
- Настройка параметров модели (температура, максимальное количество токенов)
- Поддержка авторизации через API токены
- Настройка TLS и таймаутов
Установка
go get git.ymnuktech.ru/ymnuk/llm-simple-api
Использование
package main
import (
"fmt"
"git.ymnuktech.ru/ymnuk/llm-simple-api/llm"
)
func main() {
// Создание клиента с настройками из переменных окружения
opts := &llm.LLMOpts{
BaseUrl: "http://localhost:11434/ollama",
Model: "gpt-3.5-turbo",
Token: stringPtr("your-api-token"),
Timeout: 30 * time.Second,
}
client := llm.NewLLMSimpleAPI(opts)
// Отправка сообщения
message, err := client.ChatCompletions("Привет, как дела?")
if err != nil {
panic(err)
}
fmt.Println(message.Content)
}
Структуры данных
LLMOpts
Настройки клиента:
BaseUrl- базовый URL APITlsVerify- включить проверку TLSTimeout- таймаут запросовToken- API токенUserAgent- User-Agent заголовокSystemPrompt- системный промптModel- модель по умолчаниюTemperature- температура генерацииMaxTokens- максимальное количество токеновImageType- тип изображения для визуальных запросов (png, jpeg/jpg)MaxWidth- максимальная ширина изображения при отправке визуальных запросовMaxHeight- максимальная высота изображения при отправке визуальных запросов
Message
Сообщение в чате:
Role- роль (user, assistant, system)Content- содержание сообщения
Методы
NewLLMSimpleAPI
Создание нового клиента LLM.
ChatCompletions
Отправка запроса в модель и получение ответа.
ClearHistory
Очистка истории чата.
GetHistory
Получение текущей истории чата.
SendVisionRequest
Отправка запроса с изображением в модель, поддерживающую визуальное восприятие. Функция принимает текстовый запрос и изображение в формате image.Image, преобразует изображение в base64 строку с учетом настроек формата и размера из LLMOpts, и отправляет вместе с текстовым запросом в модель.
Функциональность инструментов
Библиотека включает в себя мощную систему инструментов, которая позволяет регистрировать пользовательские функции, которые могут вызываться LLM. Это обеспечивает возможности вызова функций, аналогичные вызову функций в OpenAI.
Возможности
- Автоматическая генерация JSON-схемы: Автоматически генерирует JSON-схему из Go-структур с использованием рефлексии
- Регистрация функций: Регистрируйте любую функцию с правильной сигнатурой, чтобы сделать её доступной для LLM
- Автоматическая отправка инструментов: Зарегистрированные инструменты автоматически отправляются с запросами в LLM
- Автоматическая обработка вызовов инструментов: Библиотека автоматически обрабатывает вызовы инструментов от LLM и возвращает результаты
- Интеграция с LLMSimpleAPI: Инструменты интегрированы непосредственно в структуру LLMSimpleAPI
Использование
Для использования функциональности инструментов:
-
Определите структуру параметров с JSON-тегами:
type WeatherParams struct { Location string `json:"location" description:"Местоположение для получения погоды"` } -
Определите функцию с сигнатурой
func(params SomeStruct) (interface{}, error):func GetWeather(params WeatherParams) (interface{}, error) { return WeatherResult{ Temperature: 22.5, Location: params.Location, Condition: "Солнечно", }, nil } -
Зарегистрируйте инструмент с экземпляром LLMSimpleAPI:
api := llm.NewLLMSimpleAPI(nil) api.RegisterTool("get_weather", "Получить информацию о погоде для местоположения", GetWeather) -
Используйте обычные методы для общения с LLM - инструменты будут автоматически отправлены:
message, err := api.ChatCompletions("Какая погода в Москве?") // Если LLM решит вызвать инструмент, библиотека автоматически выполнит вызов // и отправит результат обратно в LLM для получения окончательного ответа
Функциональность инструментов автоматически обрабатывает:
- Генерацию JSON-схемы из определений структур
- Автоматическую отправку инструментов с запросами в LLM
- Синтаксический анализ и проверку аргументов
- Выполнение вызовов инструментов и возврат результатов в LLM
- Обработку ошибок
- Форматирование ответов