llm

package module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 25, 2025 License: MIT Imports: 16 Imported by: 0

README

llm-simple-api

Go Reference

Простая 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 API
  • TlsVerify - включить проверку TLS
  • Timeout - таймаут запросов
  • 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
Использование

Для использования функциональности инструментов:

  1. Определите структуру параметров с JSON-тегами:

    type WeatherParams struct {
        Location string `json:"location" description:"Местоположение для получения погоды"`
    }
    
  2. Определите функцию с сигнатурой func(params SomeStruct) (interface{}, error):

    func GetWeather(params WeatherParams) (interface{}, error) {
        return WeatherResult{
            Temperature: 22.5,
            Location: params.Location,
            Condition: "Солнечно",
        }, nil
    }
    
  3. Зарегистрируйте инструмент с экземпляром LLMSimpleAPI:

    api := llm.NewLLMSimpleAPI(nil)
    api.RegisterTool("get_weather", "Получить информацию о погоде для местоположения", GetWeather)
    
  4. Используйте обычные методы для общения с LLM - инструменты будут автоматически отправлены:

    message, err := api.ChatCompletions("Какая погода в Москве?")
    // Если LLM решит вызвать инструмент, библиотека автоматически выполнит вызов
    // и отправит результат обратно в LLM для получения окончательного ответа
    

Функциональность инструментов автоматически обрабатывает:

  • Генерацию JSON-схемы из определений структур
  • Автоматическую отправку инструментов с запросами в LLM
  • Синтаксический анализ и проверку аргументов
  • Выполнение вызовов инструментов и возврат результатов в LLM
  • Обработку ошибок
  • Форматирование ответов

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type EmbeddingRequest added in v0.1.0

type EmbeddingRequest struct {
	Model string   `json:"model"`
	Input []string `json:"input"`
}

type EmbeddingResponse added in v0.1.0

type EmbeddingResponse struct {
	Model           string `json:"model"`
	Embeddings      [][]float32
	TotalDuration   int `json:"total_duration"`
	LoadDuration    int `json:"load_duration"`
	PromptEvalCount int `json:"prompt_eval_count"`
}

type ImageUrl added in v0.2.0

type ImageUrl struct {
	URL string `json:"url"`
}

type LLMOpts

type LLMOpts struct {
	BaseUrl      string        `default:"http://localhost:11434/ollama"` // Base URL
	TlsVerify    bool          // TLS verification
	Timeout      time.Duration `default:"1m"` // Timeout in seconds
	Token        *string       // API token
	UserAgent    string        `default:"llm-simple-api"`                          // User agent
	SystemPrompt string        `default:"Ты - ассистент и призван помогать людям"` // System prompt
	Model        string        `default:"gpt-3.5-turbo"`                           // Model
	Temperature  float32       `default:"0.8"`                                     // Temperature
	MaxTokens    int           `default:"8192"`                                    // Max tokens
	ModelEmbed   string        `default:"nomic-embed-text"`                        // Model for embeddings

	ImageType string `default:"png"`  // Тип изображения. Может быть png или jpeg/jpg
	MaxWidth  int    `default:"1024"` // Максимальная ширина изображения
	MaxHeight int    `default:"1024"` // Максимальная высота изображения
}

type LLMRequest

type LLMRequest struct {
	Messages    []Message        `json:"messages"`
	Model       string           `json:"model"`
	Temperature float32          `json:"temperature"`
	MaxTokens   int              `json:"max_tokens"`
	Stream      bool             `json:"stream"`
	Tools       []ToolDefinition `json:"tools,omitempty"`
}

type LLMResponse

type LLMResponse struct {
	ID      string `json:"id"`
	Object  string `json:"object"`
	Created int64  `json:"created"`
	Model   string `json:"model"`
	Choices []struct {
		Index    int     `json:"index"`
		Message  Message `json:"message"`
		Finish   string  `json:"finish_reason"`
		LogProbs int     `json:"logprobs"`
	} `json:"choices"`
	Usage struct {
		PromptTokens     int `json:"prompt_tokens"`
		CompletionTokens int `json:"completion_tokens"`
		TotalTokens      int `json:"total_tokens"`
	} `json:"usage"`
}

type LLMSimpleAPI

type LLMSimpleAPI struct {
	// contains filtered or unexported fields
}

func NewLLMSimpleAPI

func NewLLMSimpleAPI(opts *LLMOpts) *LLMSimpleAPI

Create new LLM Simple API client

func (*LLMSimpleAPI) ChatCompletions

func (api *LLMSimpleAPI) ChatCompletions(prompt string) (*Message, error)

Отправить запрос в модель

func (*LLMSimpleAPI) ClearHistory

func (api *LLMSimpleAPI) ClearHistory()

Clear history

func (*LLMSimpleAPI) Embedding added in v0.1.0

func (api *LLMSimpleAPI) Embedding(texts []string) (*EmbeddingResponse, error)

Get embeddings for given texts

func (*LLMSimpleAPI) ExecuteToolCall added in v0.3.0

func (api *LLMSimpleAPI) ExecuteToolCall(call ToolCall) (ToolCallResponse, error)

ExecuteToolCall executes a single tool call

func (*LLMSimpleAPI) ExecuteToolCalls added in v0.3.0

func (api *LLMSimpleAPI) ExecuteToolCalls(calls []ToolCall) ([]ToolCallResponse, error)

ExecuteToolCalls executes multiple tool calls

func (*LLMSimpleAPI) GetHistory

func (api *LLMSimpleAPI) GetHistory() []Message

func (*LLMSimpleAPI) GetTools added in v0.3.0

func (api *LLMSimpleAPI) GetTools() []ToolDefinition

GetTools returns the list of registered tools

func (*LLMSimpleAPI) RegisterTool added in v0.3.0

func (api *LLMSimpleAPI) RegisterTool(name, description string, handler interface{}) error

RegisterTool registers a function as a tool

func (*LLMSimpleAPI) SendVisionRequest added in v0.2.0

func (api *LLMSimpleAPI) SendVisionRequest(prompt string, img image.Image) (*Message, error)

func (*LLMSimpleAPI) SetToolRegistry added in v0.3.0

func (api *LLMSimpleAPI) SetToolRegistry(registry *ToolRegistry)

SetToolRegistry sets the tool registry

type Message

type Message struct {
	Role       string      `json:"role"`
	Content    interface{} `json:"content"`
	ToolCalls  []ToolCall  `json:"tool_calls,omitempty"`
	ToolCallID string      `json:"tool_call_id,omitempty"` // For tool responses
	Name       string      `json:"name,omitempty"`         // For backward compatibility with function calls
}

type MessageContent added in v0.2.0

type MessageContent struct {
	Type     string    `json:"type,omitempty"`
	Text     string    `json:"text,omitempty"`
	ImageUrl *ImageUrl `json:"image_url,omitempty"`
}

type RegisteredTool added in v0.3.0

type RegisteredTool struct {
	Definition ToolDefinition
	Handler    interface{}
	ParamType  reflect.Type
}

RegisteredTool represents a registered tool with its definition and handler

type ToolCall added in v0.3.0

type ToolCall struct {
	ID       string     `json:"id"`
	Function ToolCallFn `json:"function"`
	Type     string     `json:"type"`
}

ToolCall represents a call to a tool from LLM

type ToolCallFn added in v0.3.0

type ToolCallFn struct {
	Name      string `json:"name"`
	Arguments string `json:"arguments"` // JSON string
}

ToolCallFn represents the function part of a tool call

type ToolCallResponse added in v0.3.0

type ToolCallResponse struct {
	ToolCallID string      `json:"tool_call_id"`
	Role       string      `json:"role"`
	Content    interface{} `json:"content"`
}

ToolCallResponse represents the response from a tool call

type ToolDefinition added in v0.3.0

type ToolDefinition struct {
	Type        string       `json:"type"`
	Function    ToolFunction `json:"function"`
	Description string       `json:"description,omitempty"`
}

ToolDefinition represents the schema definition of a tool for LLM

type ToolFunction added in v0.3.0

type ToolFunction struct {
	Name        string                 `json:"name"`
	Description string                 `json:"description"`
	Parameters  map[string]interface{} `json:"parameters"`
}

ToolFunction represents the function definition part of a tool

type ToolRegistry added in v0.3.0

type ToolRegistry struct {
	// contains filtered or unexported fields
}

ToolRegistry manages the registration and execution of tools

func NewToolRegistry added in v0.3.0

func NewToolRegistry() *ToolRegistry

NewToolRegistry creates a new tool registry

func (*ToolRegistry) ExecuteCall added in v0.3.0

func (tr *ToolRegistry) ExecuteCall(call ToolCall) (ToolCallResponse, error)

ExecuteCall executes a single tool call

func (*ToolRegistry) ExecuteCalls added in v0.3.0

func (tr *ToolRegistry) ExecuteCalls(calls []ToolCall) ([]ToolCallResponse, error)

ExecuteCalls executes multiple tool calls

func (*ToolRegistry) GetTools added in v0.3.0

func (tr *ToolRegistry) GetTools() []ToolDefinition

GetTools returns the list of registered tools in the format expected by LLM

func (*ToolRegistry) Register added in v0.3.0

func (tr *ToolRegistry) Register(name, description string, handler interface{}) error

Register registers a function as a tool The function must have the signature: func(params SomeStruct) (interface{}, error)

Directories

Path Synopsis
cmd
tools command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL