Documentation
¶
Overview ¶
Package draftrag — публичный API для сборки RAG pipeline.
Index ¶
- Constants
- Variables
- func ChromaCollectionExists(ctx context.Context, opts ChromaDBOptions) (bool, error)
- func CollectionExists(ctx context.Context, opts QdrantOptions) (bool, error)
- func CreateChromaCollection(ctx context.Context, opts ChromaDBOptions) error
- func CreateCollection(ctx context.Context, opts QdrantOptions) error
- func CreateWeaviateCollection(ctx context.Context, opts WeaviateOptions) error
- func DeleteChromaCollection(ctx context.Context, opts ChromaDBOptions) error
- func DeleteCollection(ctx context.Context, opts QdrantOptions) error
- func DeleteWeaviateCollection(ctx context.Context, opts WeaviateOptions) error
- func MigratePGVector(ctx context.Context, db *sql.DB, opts PGVectorMigrateOptions) error
- func SetupPGVector(ctx context.Context, db *sql.DB, opts PGVectorOptions) error
- func WeaviateCollectionExists(ctx context.Context, opts WeaviateOptions) (bool, error)
- type AnthropicLLMOptions
- type BasicChunkerOptions
- type CacheOptions
- type CachedEmbedder
- type ChromaDBOptions
- type Chunk
- type Chunker
- type CircuitBreakerStats
- type CircuitState
- type Document
- type DocumentStore
- type EmbedCacheStats
- type Embedder
- type HookStage
- type Hooks
- type HybridConfig
- type HybridSearcher
- type IndexBatchError
- type IndexBatchResult
- type InlineCitation
- type LLMProvider
- type LogField
- type LogLevel
- type Logger
- type MetadataFilter
- type OllamaEmbedderOptions
- type OllamaLLMOptions
- type OpenAICompatibleEmbedderOptions
- type OpenAICompatibleLLMOptions
- type PGVectorMigrateOptions
- type PGVectorOptions
- type PGVectorRuntimeOptions
- type PGVectorStoreOptions
- type ParentIDFilter
- type Pipeline
- func NewPipeline(store VectorStore, llm LLMProvider, embedder Embedder) *Pipeline
- func NewPipelineWithChunker(store VectorStore, llm LLMProvider, embedder Embedder, chunker Chunker) *Pipeline
- func NewPipelineWithOptions(store VectorStore, llm LLMProvider, embedder Embedder, opts PipelineOptions) *Pipeline
- func (p *Pipeline) Answer(ctx context.Context, question string) (string, error)
- func (p *Pipeline) DeleteDocument(ctx context.Context, docID string) error
- func (p *Pipeline) Index(ctx context.Context, docs []Document) error
- func (p *Pipeline) IndexBatch(ctx context.Context, docs []Document, batchSize int) (*IndexBatchResult, error)
- func (p *Pipeline) Query(ctx context.Context, question string) (RetrievalResult, error)
- func (p *Pipeline) Retrieve(ctx context.Context, question string, topK int) (RetrievalResult, error)
- func (p *Pipeline) Search(question string) *SearchBuilder
- func (p *Pipeline) UpdateDocument(ctx context.Context, doc Document) error
- type PipelineOptions
- type QdrantOptions
- type RedisCacheClient
- type RedisCacheOptions
- type Reranker
- type RetrievalResult
- type RetryEmbedder
- type RetryLLMProvider
- type RetryOptions
- type SearchBuilder
- func (b *SearchBuilder) Answer(ctx context.Context) (string, error)
- func (b *SearchBuilder) Cite(ctx context.Context) (string, RetrievalResult, error)
- func (b *SearchBuilder) Filter(f MetadataFilter) *SearchBuilder
- func (b *SearchBuilder) HyDE() *SearchBuilder
- func (b *SearchBuilder) Hybrid(cfg HybridConfig) *SearchBuilder
- func (b *SearchBuilder) InlineCite(ctx context.Context) (string, RetrievalResult, []InlineCitation, error)
- func (b *SearchBuilder) MultiQuery(n int) *SearchBuilder
- func (b *SearchBuilder) ParentIDs(ids ...string) *SearchBuilder
- func (b *SearchBuilder) Retrieve(ctx context.Context) (RetrievalResult, error)
- func (b *SearchBuilder) Stream(ctx context.Context) (<-chan string, error)
- func (b *SearchBuilder) StreamCite(ctx context.Context) (<-chan string, RetrievalResult, []InlineCitation, error)
- func (b *SearchBuilder) StreamSources(ctx context.Context) (<-chan string, RetrievalResult, error)
- func (b *SearchBuilder) TopK(n int) *SearchBuilder
- type StageEndEvent
- type StageStartEvent
- type StreamingLLMProvider
- type VectorStore
- func NewChromaDBStore(opts ChromaDBOptions) (VectorStore, error)
- func NewInMemoryStore() VectorStore
- func NewPGVectorStore(db *sql.DB, opts PGVectorOptions) VectorStore
- func NewPGVectorStoreWithOptions(db *sql.DB, opts PGVectorStoreOptions) VectorStore
- func NewPGVectorStoreWithRuntimeOptions(db *sql.DB, opts PGVectorOptions, runtime PGVectorRuntimeOptions) VectorStoredeprecated
- func NewQdrantStore(opts QdrantOptions) (VectorStore, error)
- func NewWeaviateStore(opts WeaviateOptions) (VectorStore, error)
- type VectorStoreWithFilters
- type WeaviateOptions
Constants ¶
const ( LogLevelDebug = domain.LogLevelDebug LogLevelInfo = domain.LogLevelInfo LogLevelWarn = domain.LogLevelWarn LogLevelError = domain.LogLevelError )
Уровни логирования.
const ( // HookStageChunking — разбиение документа на чанки (только при наличии Chunker). HookStageChunking = domain.HookStageChunking // HookStageEmbed — генерация embedding для текста. HookStageEmbed = domain.HookStageEmbed // HookStageSearch — поиск в VectorStore. HookStageSearch = domain.HookStageSearch // HookStageGenerate — генерация ответа LLM. HookStageGenerate = domain.HookStageGenerate )
const ( // CircuitClosed — нормальная работа. CircuitClosed = resilience.CircuitClosed // CircuitOpen — блокировка запросов. CircuitOpen = resilience.CircuitOpen // CircuitHalfOpen — пробное восстановление. CircuitHalfOpen = resilience.CircuitHalfOpen )
Variables ¶
var ( // ErrEmptyDocument возвращается, если документ нельзя проиндексировать из-за пустого содержимого. ErrEmptyDocument = errors.New("empty document") // ErrEmptyQuery возвращается, если Pipeline.Query* вызывается с пустым вопросом. ErrEmptyQuery = errors.New("empty query") // ErrInvalidTopK возвращается, если topK <= 0. ErrInvalidTopK = errors.New("invalid topK") // ErrInvalidEmbedderConfig возвращается при невалидной конфигурации Embedder. // Ошибка предназначена для проверок через errors.Is. ErrInvalidEmbedderConfig = errors.New("invalid embedder config") // ErrInvalidLLMConfig возвращается при невалидной конфигурации LLMProvider. // Ошибка предназначена для проверок через errors.Is. ErrInvalidLLMConfig = errors.New("invalid llm config") // ErrInvalidChunkerConfig возвращается при невалидной конфигурации Chunker. // Ошибка предназначена для проверок через errors.Is. ErrInvalidChunkerConfig = errors.New("invalid chunker config") // ErrEmbeddingDimensionMismatch возвращается, если размерность embedding-вектора не соответствует ожидаемой. // // Ошибка предназначена для проверок через errors.Is. ErrEmbeddingDimensionMismatch = domain.ErrEmbeddingDimensionMismatch // ErrFiltersNotSupported возвращается, если pipeline-метод с фильтрами вызван, // но используемый VectorStore не поддерживает filters capability. ErrFiltersNotSupported = errors.New("filters not supported") // ErrInvalidVectorStoreConfig возвращается при невалидной конфигурации VectorStore. // Ошибка предназначена для проверок через errors.Is. ErrInvalidVectorStoreConfig = errors.New("invalid vector store config") )
var DefaultHybridConfig = domain.DefaultHybridConfig
DefaultHybridConfig возвращает конфигурацию гибридного поиска по умолчанию.
var ErrCircuitOpen = resilience.ErrCircuitOpen
ErrCircuitOpen возвращается, когда circuit breaker в состоянии open.
var ErrDeleteNotSupported = errors.New("vector store does not support DeleteByParentID")
ErrDeleteNotSupported возвращается, если DeleteDocument вызван, но underlying VectorStore не реализует DocumentStore capability.
var ErrEmptyDocumentID = errors.New("document ID must not be empty")
ErrEmptyDocumentID возвращается, если передан пустой ID документа.
var ErrHybridNotSupported = errors.New("vector store does not support hybrid search")
ErrHybridNotSupported возвращается, если метод гибридного поиска вызван, но underlying VectorStore не поддерживает HybridSearcher capability.
var ErrStreamingNotSupported = errors.New("LLM provider does not support streaming")
ErrStreamingNotSupported возвращается, если streaming-метод вызван, но underlying LLMProvider не поддерживает StreamingLLMProvider capability.
var IsRetryable = resilience.IsRetryable
IsRetryable проверяет, является ли ошибка retryable. Context cancellation ошибки всегда non-retryable. Ошибки без явного флага считаются retryable (безопасный default для transient errors).
var WrapNonRetryable = resilience.WrapNonRetryable
WrapNonRetryable помечает ошибку как non-retryable (не будет повторяться).
var WrapRetryable = resilience.WrapRetryable
WrapRetryable помечает ошибку как retryable.
Functions ¶
func ChromaCollectionExists ¶
func ChromaCollectionExists(ctx context.Context, opts ChromaDBOptions) (bool, error)
ChromaCollectionExists проверяет существование коллекции в ChromaDB.
Использует GET /api/v1/collections/{name}. Возвращает true при статусе 200, false при 404.
func CollectionExists ¶
func CollectionExists(ctx context.Context, opts QdrantOptions) (bool, error)
CollectionExists проверяет существование коллекции в Qdrant.
@ds-task T2.4: Проверка существования коллекции
func CreateChromaCollection ¶
func CreateChromaCollection(ctx context.Context, opts ChromaDBOptions) error
CreateChromaCollection создаёт коллекцию в ChromaDB.
Использует POST /api/v1/collections с указанным именем и размерностью.
func CreateCollection ¶
func CreateCollection(ctx context.Context, opts QdrantOptions) error
CreateCollection создаёт коллекцию в Qdrant с указанной размерностью.
@ds-task T2.4: Миграция CreateCollection (AC-005)
func CreateWeaviateCollection ¶
func CreateWeaviateCollection(ctx context.Context, opts WeaviateOptions) error
CreateWeaviateCollection создаёт коллекцию (Weaviate class) со схемой для хранения чанков. Если коллекция уже существует — не возвращает ошибку (идемпотентно через 422).
@ds-task T3.1: CreateWeaviateCollection → POST /v1/schema (RQ-007)
func DeleteChromaCollection ¶
func DeleteChromaCollection(ctx context.Context, opts ChromaDBOptions) error
DeleteChromaCollection удаляет коллекцию из ChromaDB.
Использует DELETE /api/v1/collections/{name}. 404 считается успехом (идемпотентность).
func DeleteCollection ¶
func DeleteCollection(ctx context.Context, opts QdrantOptions) error
DeleteCollection удаляет коллекцию из Qdrant.
@ds-task T2.4: Миграция DeleteCollection (AC-005)
func DeleteWeaviateCollection ¶
func DeleteWeaviateCollection(ctx context.Context, opts WeaviateOptions) error
DeleteWeaviateCollection удаляет коллекцию из Weaviate. 404 считается успехом (идемпотентность).
@ds-task T3.1: DeleteWeaviateCollection → DELETE /v1/schema/{class}
func MigratePGVector ¶
MigratePGVector применяет версионированные миграции схемы pgvector-хранилища.
Миграции идемпотентны и безопасны при повторном запуске.
Источник истины DDL — SQL-миграции, встроенные в бинарь через `go:embed` (см. `pkg/draftrag/migrations/pgvector/` и `pkg/draftrag/pgvector_migrations.md`).
func SetupPGVector ¶
SetupPGVector — backward-compatible alias для MigratePGVector.
Примечание (production): рекомендуется запускать миграции отдельным шагом деплоя (deploy job / init container), т.к. DDL может требовать повышенных прав и занимать заметное время.
Рекомендуемый подход:
- для production: применять SQL-миграции из `pkg/draftrag/migrations/pgvector/` отдельным шагом деплоя (см. `pkg/draftrag/pgvector_migrations.md`);
- при необходимости — вызывать SetupPGVector/MigratePGVector явно в deploy job, но не “на старте сервиса”.
Смена IndexMethod или параметров индекса приводит к стратегии drop+create для embedding-индекса (без CONCURRENTLY).
func WeaviateCollectionExists ¶
func WeaviateCollectionExists(ctx context.Context, opts WeaviateOptions) (bool, error)
WeaviateCollectionExists проверяет существование коллекции в Weaviate. Возвращает true при статусе 200, false при 404.
@ds-task T3.1: WeaviateCollectionExists → GET /v1/schema/{class}
Types ¶
type AnthropicLLMOptions ¶
type AnthropicLLMOptions struct {
// BaseURL — базовый URL Anthropic API (например, "https://api.anthropic.com").
BaseURL string
// APIKey — ключ доступа. Передаётся в заголовке X-API-Key.
APIKey string
// Model — имя модели. Если пустая строка, используется claude-3-haiku-20240307.
Model string
// AnthropicVersion — версия API. Если пустая строка, используется "2023-06-01".
AnthropicVersion string
// Temperature — параметр генерации; если nil, параметр не передаётся в запросе.
Temperature *float64
// MaxTokens — лимит выходных токенов; если nil, используется дефолт (1024).
MaxTokens *int
// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
HTTPClient *http.Client
// Timeout — опциональный таймаут на один вызов Generate (не применяется к GenerateStream).
Timeout time.Duration
}
AnthropicLLMOptions задаёт параметры для Anthropic (Claude) LLMProvider.
type BasicChunkerOptions ¶
type BasicChunkerOptions struct {
// ChunkSize — целевой размер чанка в рунах (обязательно > 0).
ChunkSize int
// Overlap — перекрытие между чанками в рунах (обязательно >= 0 и < ChunkSize).
Overlap int
// MaxChunks — максимальное количество возвращаемых чанков (>= 0). 0 означает “без лимита”.
//
// Если MaxChunks > 0, чанкер возвращает префикс первых MaxChunks чанков (best-effort, без ошибки).
MaxChunks int
}
BasicChunkerOptions задаёт параметры для базового Chunker.
type CacheOptions ¶
type CacheOptions struct {
// MaxSize — максимальное количество записей в LRU-кэше.
// 0 → 1000.
MaxSize int
// Redis — опциональный Redis L2 кэш.
Redis RedisCacheOptions
// Logger — опциональный структурированный логгер для событий кэша.
// nil означает no-op.
Logger Logger
}
CacheOptions задаёт параметры кэширующего embedder'а.
type CachedEmbedder ¶
type CachedEmbedder struct {
// contains filtered or unexported fields
}
CachedEmbedder оборачивает Embedder двухуровневым LRU-кэшем. Повторные запросы для одного текста не идут в API. Реализует Embedder.
func NewCachedEmbedder ¶
func NewCachedEmbedder(e Embedder, opts CacheOptions) (*CachedEmbedder, error)
NewCachedEmbedder создаёт кэширующий embedder с in-memory LRU.
embedder := draftrag.NewCachedEmbedder(
draftrag.NewOpenAICompatibleEmbedder(...),
draftrag.CacheOptions{MaxSize: 5000},
)
pipeline := draftrag.NewPipeline(store, llm, embedder)
func (*CachedEmbedder) Stats ¶
func (c *CachedEmbedder) Stats() EmbedCacheStats
Stats возвращает текущую статистику кэша (попадания, промахи, вытеснения).
type ChromaDBOptions ¶
type ChromaDBOptions struct {
// BaseURL — базовый URL ChromaDB HTTP API. Если пустая строка, используется http://localhost:8000.
BaseURL string
// Collection — имя коллекции (обязательно).
Collection string
// Dimension — фиксированная размерность embedding-векторов (обязательно > 0).
Dimension int
// HTTP таймаут (по умолчанию: 10s)
Timeout time.Duration
}
ChromaDBOptions задаёт параметры для ChromaDB VectorStore.
func (ChromaDBOptions) Validate ¶
func (o ChromaDBOptions) Validate() error
Validate проверяет корректность опций.
type Chunker ¶
Chunker определяет интерфейс для разбиения документа на чанки.
func NewBasicChunker ¶
func NewBasicChunker(opts BasicChunkerOptions) Chunker
NewBasicChunker создаёт базовую реализацию Chunker.
Реализация детерминированно разбивает Document.Content на чанки фиксированного размера по рунам, поддерживает overlap и ограничение MaxChunks, уважает context отмену.
Ошибки конфигурации возвращаются из Chunk и сопоставимы через errors.Is с ErrInvalidChunkerConfig.
type CircuitBreakerStats ¶
type CircuitBreakerStats = resilience.Stats
CircuitBreakerStats — статистика circuit breaker.
type CircuitState ¶
type CircuitState = resilience.CircuitState
CircuitState — состояние circuit breaker.
type DocumentStore ¶
type DocumentStore = domain.DocumentStore
DocumentStore — опциональная capability VectorStore для удаления по ParentID.
type EmbedCacheStats ¶
EmbedCacheStats — статистика LRU-кэша embedder'а.
type Embedder ¶
Embedder определяет интерфейс для преобразования текста в векторное представление.
func NewOllamaEmbedder ¶
func NewOllamaEmbedder(opts OllamaEmbedderOptions) Embedder
NewOllamaEmbedder создаёт Ollama реализацию Embedder.
Ошибки конфигурации возвращаются из Embed и сопоставимы через errors.Is с ErrInvalidEmbedderConfig.
func NewOpenAICompatibleEmbedder ¶
func NewOpenAICompatibleEmbedder(opts OpenAICompatibleEmbedderOptions) Embedder
NewOpenAICompatibleEmbedder создаёт OpenAI-compatible реализацию Embedder.
Ошибки конфигурации возвращаются из Embed и сопоставимы через errors.Is с ErrInvalidEmbedderConfig.
type HookStage ¶
HookStage описывает стадию выполнения pipeline, которую можно наблюдать через Hooks.
type HybridConfig ¶
type HybridConfig = domain.HybridConfig
HybridConfig задаёт параметры гибридного поиска (BM25 + semantic).
type HybridSearcher ¶
type HybridSearcher = domain.HybridSearcher
HybridSearcher — опциональная capability интерфейса VectorStore, поддерживающая гибридный поиск (BM25 + semantic).
type IndexBatchError ¶
type IndexBatchError = domain.IndexBatchError
IndexBatchError представляет ошибку индексации конкретного документа при batch-индексации.
type IndexBatchResult ¶
type IndexBatchResult = domain.IndexBatchResult
IndexBatchResult содержит результат batch-индексации документов.
type InlineCitation ¶
type InlineCitation = domain.InlineCitation
InlineCitation задаёт соответствие номера цитаты `[n]` и retrieval-источника (чанка).
type LLMProvider ¶
type LLMProvider = domain.LLMProvider
LLMProvider определяет интерфейс для генерации текста через LLM.
func NewAnthropicLLM ¶
func NewAnthropicLLM(opts AnthropicLLMOptions) LLMProvider
NewAnthropicLLM создаёт Anthropic (Claude) реализацию LLMProvider.
Возвращаемый тип реализует также StreamingLLMProvider — используйте type assertion для streaming. Ошибки конфигурации возвращаются из Generate/GenerateStream и сопоставимы через errors.Is с ErrInvalidLLMConfig.
func NewOllamaLLM ¶
func NewOllamaLLM(opts OllamaLLMOptions) LLMProvider
NewOllamaLLM создаёт Ollama реализацию LLMProvider.
Ошибки конфигурации возвращаются из Generate и сопоставимы через errors.Is с ErrInvalidLLMConfig.
func NewOpenAICompatibleLLM ¶
func NewOpenAICompatibleLLM(opts OpenAICompatibleLLMOptions) LLMProvider
NewOpenAICompatibleLLM создаёт OpenAI-compatible реализацию LLMProvider (Responses API).
Возвращаемый тип реализует также StreamingLLMProvider — используйте type assertion для streaming. Ошибки конфигурации возвращаются из Generate/GenerateStream и сопоставимы через errors.Is с ErrInvalidLLMConfig.
type Logger ¶
Logger — опциональный структурированный логгер для инфраструктурных событий (кэш, retry). nil означает no-op.
type MetadataFilter ¶
type MetadataFilter = domain.MetadataFilter
MetadataFilter задаёт условие точного совпадения по полям метаданных документа при поиске. Пустой Fields (nil или len==0) означает «без фильтра». Все условия применяются как AND: все пары ключ-значение из Fields должны совпасть.
@ds-task T3.2: Переэкспортировать MetadataFilter из domain в публичный API (RQ-005, RQ-006, AC-003)
type OllamaEmbedderOptions ¶
type OllamaEmbedderOptions struct {
// BaseURL — базовый URL Ollama API. Если пустая строка, используется http://localhost:11434.
BaseURL string
// Model — имя модели эмбеддингов (обязательно).
Model string
// APIKey — опциональный ключ доступа (для кастомных инстансов с авторизацией).
APIKey string
// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
HTTPClient *http.Client
// Timeout — опциональный таймаут на один вызов Embed.
Timeout time.Duration
}
OllamaEmbedderOptions задаёт параметры для Ollama Embedder.
type OllamaLLMOptions ¶
type OllamaLLMOptions struct {
// BaseURL — базовый URL Ollama API. Если пустая строка, используется http://localhost:11434.
BaseURL string
// Model — имя модели (обязательно).
Model string
// APIKey — опциональный ключ доступа (для кастомных инстансов с авторизацией).
APIKey string
// Temperature — параметр генерации; если nil, параметр не передаётся в запросе.
Temperature *float64
// MaxTokens — лимит выходных токенов; если nil, параметр не передаётся в запросе.
MaxTokens *int
// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
HTTPClient *http.Client
// Timeout — опциональный таймаут на один вызов Generate.
Timeout time.Duration
}
OllamaLLMOptions задаёт параметры для Ollama LLMProvider.
type OpenAICompatibleEmbedderOptions ¶
type OpenAICompatibleEmbedderOptions struct {
// BaseURL — базовый URL провайдера (например, "https://api.openai.com").
BaseURL string
// APIKey — ключ доступа. Передаётся в заголовке Authorization: Bearer.
APIKey string
// Model — имя embeddings модели.
Model string
// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
HTTPClient *http.Client
// Timeout — опциональный таймаут на один вызов Embed.
Timeout time.Duration
}
OpenAICompatibleEmbedderOptions задаёт параметры для OpenAI-compatible Embedder.
type OpenAICompatibleLLMOptions ¶
type OpenAICompatibleLLMOptions struct {
// BaseURL — базовый URL провайдера (например, "https://api.openai.com").
BaseURL string
// APIKey — ключ доступа. Передаётся в заголовке Authorization: Bearer.
APIKey string
// Model — имя модели.
Model string
// Temperature — параметр генерации; если nil, параметр не передаётся в запросе.
Temperature *float64
// MaxOutputTokens — лимит выходных токенов; если nil, параметр не передаётся в запросе.
MaxOutputTokens *int
// HTTPClient — опциональный клиент; если nil, используется http.DefaultClient.
HTTPClient *http.Client
// Timeout — опциональный таймаут на один вызов Generate.
Timeout time.Duration
}
OpenAICompatibleLLMOptions задаёт параметры для OpenAI-compatible LLMProvider (Responses API).
type PGVectorMigrateOptions ¶
type PGVectorMigrateOptions struct {
PGVectorOptions
// DDLTimeout — дефолтный таймаут для миграций, если у ctx нет deadline.
// Если 0 — используется 30s.
DDLTimeout time.Duration
}
PGVectorMigrateOptions задаёт параметры миграций схемы pgvector-хранилища.
type PGVectorOptions ¶
type PGVectorOptions struct {
// TableName — имя таблицы для хранения чанков.
// В v1 поддерживается только простой идентификатор без схемы (например, "draftrag_chunks").
TableName string
// EmbeddingDimension — фиксированная размерность embedding-векторов.
// При несоответствии размерности операции store возвращают ErrEmbeddingDimensionMismatch (errors.Is).
EmbeddingDimension int
// CreateExtension включает попытку выполнить `CREATE EXTENSION IF NOT EXISTS vector`.
// Часто требует повышенных прав; при отсутствии прав будет возвращена ошибка.
CreateExtension bool
// IndexMethod — метод индекса: "ivfflat" (по умолчанию) или "hnsw".
IndexMethod string
// Lists — параметр ivfflat индекса (WITH (lists = N)).
Lists int
}
PGVectorOptions задаёт параметры подключения pgvector-backed VectorStore.
type PGVectorRuntimeOptions ¶
type PGVectorRuntimeOptions struct {
// SearchTimeout — дефолтный таймаут для Search*, если у ctx нет deadline.
SearchTimeout time.Duration
// UpsertTimeout — дефолтный таймаут для Upsert, если у ctx нет deadline.
UpsertTimeout time.Duration
// DeleteTimeout — дефолтный таймаут для Delete, если у ctx нет deadline.
DeleteTimeout time.Duration
// MaxTopK ограничивает topK в Search*. 0 означает “без лимита”.
MaxTopK int
// MaxParentIDs ограничивает количество ParentIDs в фильтре. 0 означает “без лимита”.
MaxParentIDs int
// MaxContentBytes ограничивает размер chunk.Content в байтах. 0 означает “без лимита”.
MaxContentBytes int
}
PGVectorRuntimeOptions задаёт лимиты и таймауты выполнения операций VectorStore.
type PGVectorStoreOptions ¶
type PGVectorStoreOptions struct {
PGVectorOptions
Runtime PGVectorRuntimeOptions
}
PGVectorStoreOptions — единый контейнер опций для NewPGVectorStore*.
Объединяет параметры подключения/схемы (PGVectorOptions) и runtime ограничения (PGVectorRuntimeOptions), чтобы публичный API следовал единому options pattern.
type ParentIDFilter ¶
type ParentIDFilter = domain.ParentIDFilter
ParentIDFilter задаёт фильтрацию retrieval по ParentID.
type Pipeline ¶
type Pipeline struct {
// contains filtered or unexported fields
}
Pipeline — публичный API для композиции core-компонентов draftRAG. Валидация входных данных выполняется здесь (см. errors.go).
func NewPipeline ¶
func NewPipeline(store VectorStore, llm LLMProvider, embedder Embedder) *Pipeline
NewPipeline создаёт pipeline из зависимостей: VectorStore, LLMProvider и Embedder.
func NewPipelineWithChunker ¶
func NewPipelineWithChunker(store VectorStore, llm LLMProvider, embedder Embedder, chunker Chunker) *Pipeline
NewPipelineWithChunker создаёт pipeline из зависимостей: VectorStore, LLMProvider, Embedder и Chunker.
При наличии Chunker метод Index будет индексировать чанки (Chunker.Chunk → Embed → Upsert).
func NewPipelineWithOptions ¶
func NewPipelineWithOptions(store VectorStore, llm LLMProvider, embedder Embedder, opts PipelineOptions) *Pipeline
NewPipelineWithOptions создаёт pipeline из зависимостей: VectorStore, LLMProvider и Embedder, применяя конфигурацию из PipelineOptions.
DefaultTopK: - 0: используется значение по умолчанию (5) - <0: panic (ошибка конфигурации)
Chunker: - nil: используется legacy индексирование (1 документ = 1 чанк) - not nil: используется чанкинг (Chunk→Embed→Upsert)
func (*Pipeline) Answer ¶
Answer генерирует ответ с topK по умолчанию (PipelineOptions.DefaultTopK или 5). Для расширенных параметров используйте Search builder.
func (*Pipeline) DeleteDocument ¶
DeleteDocument удаляет документ и все его чанки по ID документа (ParentID). Требует, чтобы VectorStore реализовывал DocumentStore capability. Если store не поддерживает — возвращает ErrDeleteNotSupported.
func (*Pipeline) IndexBatch ¶
func (p *Pipeline) IndexBatch(ctx context.Context, docs []Document, batchSize int) (*IndexBatchResult, error)
IndexBatch индексирует документы параллельно с ограничением concurrency.
В отличие от Index, IndexBatch обрабатывает документы конкурентно (batchSize workers) и возвращает partial results: успешно проиндексированные документы и ошибки отдельно. Ошибка одного документа не прерывает обработку остальных.
batchSize — количество параллельных workers (0 → значение по умолчанию 4). Для управления concurrency и rate limiting используйте PipelineOptions.IndexConcurrency и PipelineOptions.IndexBatchRateLimit при создании Pipeline.
func (*Pipeline) Query ¶
Query выполняет поиск с topK по умолчанию (PipelineOptions.DefaultTopK или 5). Для расширенных параметров используйте Search builder.
func (*Pipeline) Retrieve ¶
func (p *Pipeline) Retrieve(ctx context.Context, question string, topK int) (RetrievalResult, error)
Retrieve выполняет поиск по вопросу с заданным topK и возвращает RetrievalResult. Удобен для прямой передачи в eval.Run (реализует eval.RetrievalRunner). Для цепочки с фильтрами, hybrid и другими параметрами используйте Search builder.
func (*Pipeline) Search ¶
func (p *Pipeline) Search(question string) *SearchBuilder
Search создаёт SearchBuilder для заданного вопроса. По умолчанию TopK берётся из PipelineOptions.DefaultTopK (или 5).
type PipelineOptions ¶
type PipelineOptions struct {
// DefaultTopK — значение topK по умолчанию для Query/Answer.
// Если 0, используется значение по умолчанию (5).
// Если < 0, это считается ошибкой конфигурации (panic).
DefaultTopK int
// SystemPrompt — переопределение system prompt для Answer*. Пустая строка означает дефолт v1.
SystemPrompt string
// Chunker — опциональный чанкер; если не nil, Index индексирует чанки (Chunk→Embed→Upsert).
Chunker Chunker
// Hooks — опциональные хуки наблюдаемости для стадий pipeline (chunking/embed/search/generate).
// nil означает no-op.
Hooks Hooks
// MaxContextChars — лимит размера секции “Контекст:” в prompt для Answer* (в символах).
// 0 означает “без лимита”.
MaxContextChars int
// MaxContextChunks — лимит количества чанков, попадающих в секцию “Контекст:” в prompt для Answer*.
// 0 означает “без лимита”.
MaxContextChunks int
// DedupSourcesByParentID включает дедупликацию retrieval sources по ParentID.
// По умолчанию выключено (backward compatibility).
DedupSourcesByParentID bool
// MMREnabled включает MMR rerank/selection для retrieval sources (диверсификация контекста).
// По умолчанию выключено (backward compatibility).
MMREnabled bool
// MMRLambda задаёт баланс релевантность/разнообразие в диапазоне [0..1].
// Если 0 и MMR включён — используется значение по умолчанию (0.5).
MMRLambda float64
// MMRCandidatePool задаёт сколько кандидатов запросить у VectorStore до отбора.
// Если 0 — используется topK запроса.
MMRCandidatePool int
// IndexConcurrency задаёт количество workers для параллельной индексации в IndexBatch.
// Если 0 — используется значение по умолчанию (4).
IndexConcurrency int
// IndexBatchRateLimit задаёт максимальное количество вызовов Embed в секунду в IndexBatch.
// Если 0 — без ограничений.
IndexBatchRateLimit int
// Reranker — опциональный reranker, применяется после retrieval.
// nil означает "без reranking".
Reranker Reranker
}
PipelineOptions задаёт конфигурацию Pipeline.
type QdrantOptions ¶
type QdrantOptions struct {
// URL адрес Qdrant сервера (по умолчанию: http://localhost:6333)
URL string
// Имя коллекции для хранения чанков
Collection string
// Размерность векторов (обязательно)
Dimension int
// HTTP таймаут (по умолчанию: 10s)
Timeout time.Duration
}
QdrantOptions задаёт опции для подключения к Qdrant.
@ds-task T2.4: Опции подключения к Qdrant (RQ-003)
func (QdrantOptions) Validate ¶
func (o QdrantOptions) Validate() error
Validate проверяет корректность опций.
type RedisCacheClient ¶
type RedisCacheClient interface {
GetBytes(ctx context.Context, key string) ([]byte, error)
SetBytes(ctx context.Context, key string, value []byte, ttl time.Duration) error
}
RedisCacheClient — адаптер-интерфейс Redis клиента для кэша эмбеддингов.
Контракт: - GetBytes: если ключ отсутствует, должен возвращать (nil, nil). - ttl == 0 означает запись без TTL.
type RedisCacheOptions ¶
type RedisCacheOptions struct {
// Client — Redis клиент; nil отключает Redis кэш.
Client RedisCacheClient
// TTL — время жизни записей в Redis (0 → без TTL).
TTL time.Duration
// KeyPrefix — префикс ключей в Redis ("" → дефолт `draftrag:embedder:`).
KeyPrefix string
}
RedisCacheOptions задаёт параметры Redis second-level cache.
type RetrievalResult ¶
type RetrievalResult = domain.RetrievalResult
RetrievalResult содержит результаты поиска.
type RetryEmbedder ¶
type RetryEmbedder struct {
*resilience.RetryEmbedder
}
RetryEmbedder — обёртка для Embedder с retry и circuit breaker. Реализует Embedder. Дополнительно предоставляет CircuitBreakerState() и CircuitBreakerStats().
func NewRetryEmbedder ¶
func NewRetryEmbedder(e Embedder, opts RetryOptions) *RetryEmbedder
NewRetryEmbedder оборачивает embedder с retry и circuit breaker. Нулевые поля RetryOptions используют defaults (MaxRetries=3, CBThreshold=5).
Для использования в Pipeline передайте как Embedder:
re := draftrag.NewRetryEmbedder(embedder, draftrag.RetryOptions{})
pipeline := draftrag.NewPipeline(store, llm, re)
Для доступа к состоянию circuit breaker используйте type assertion:
if re, ok := embedder.(*draftrag.RetryEmbedder); ok {
fmt.Println(re.CircuitBreakerState())
}
type RetryLLMProvider ¶
type RetryLLMProvider struct {
*resilience.RetryLLMProvider
}
RetryLLMProvider — обёртка для LLMProvider с retry и circuit breaker. Реализует LLMProvider. Дополнительно предоставляет CircuitBreakerState() и CircuitBreakerStats().
func NewRetryLLMProvider ¶
func NewRetryLLMProvider(l LLMProvider, opts RetryOptions) *RetryLLMProvider
NewRetryLLMProvider оборачивает LLM провайдер с retry и circuit breaker. Нулевые поля RetryOptions используют defaults (MaxRetries=3, CBThreshold=5).
Для использования в Pipeline передайте как LLMProvider:
rl := draftrag.NewRetryLLMProvider(llm, draftrag.RetryOptions{})
pipeline := draftrag.NewPipeline(store, rl, embedder)
type RetryOptions ¶
type RetryOptions struct {
// MaxRetries — максимальное количество повторных попыток (0 → 3).
MaxRetries int
// BaseDelay — начальная задержка перед первым retry (0 → 100ms).
BaseDelay time.Duration
// MaxDelay — максимальная задержка (0 → 10s).
MaxDelay time.Duration
// Multiplier — множитель exponential backoff (0 → 2.0).
Multiplier float64
// JitterFactor — доля случайной составляющей (0 → 0.25).
JitterFactor float64
// CBThreshold — порог ошибок для перехода circuit breaker в open (0 → 5).
CBThreshold int
// CBTimeout — время восстановления circuit breaker (0 → 30s).
CBTimeout time.Duration
// Logger — опциональный структурированный логгер для retry/CB событий.
// nil означает no-op.
Logger Logger
}
RetryOptions объединяет настройки retry и circuit breaker. Нулевые значения используют безопасные defaults.
type SearchBuilder ¶
type SearchBuilder struct {
// contains filtered or unexported fields
}
SearchBuilder накапливает параметры поиска и позволяет выполнить поисковый или генеративный запрос через цепочку вызовов. Создаётся через Pipeline.Search.
Пример:
// Поиск
result, err := pipeline.Search("вопрос").TopK(5).Retrieve(ctx)
// Ответ с фильтром
answer, err := pipeline.Search("вопрос").TopK(5).Filter(f).Answer(ctx)
// Inline цитаты
answer, sources, cits, err := pipeline.Search("вопрос").TopK(5).InlineCite(ctx)
// Streaming
tokens, err := pipeline.Search("вопрос").TopK(5).Stream(ctx)
func (*SearchBuilder) Answer ¶
func (b *SearchBuilder) Answer(ctx context.Context) (string, error)
Answer выполняет RAG-ответ и возвращает строку.
func (*SearchBuilder) Cite ¶
func (b *SearchBuilder) Cite(ctx context.Context) (string, RetrievalResult, error)
Cite выполняет RAG-ответ и возвращает ответ + источники (чанки со score). Поддерживает полный routing: HyDE > MultiQuery > Hybrid > ParentIDs > Filter > basic.
func (*SearchBuilder) Filter ¶
func (b *SearchBuilder) Filter(f MetadataFilter) *SearchBuilder
Filter задаёт AND-фильтр по полям метаданных документа. Совместим только с хранилищами, реализующими VectorStoreWithFilters.
func (*SearchBuilder) HyDE ¶
func (b *SearchBuilder) HyDE() *SearchBuilder
HyDE включает Hypothetical Document Embeddings. LLM генерирует гипотетический ответ на вопрос, который используется для embedding-поиска. Улучшает recall для сложных вопросов. Не совместим с Hybrid.
func (*SearchBuilder) Hybrid ¶
func (b *SearchBuilder) Hybrid(cfg HybridConfig) *SearchBuilder
Hybrid включает гибридный поиск (BM25 + semantic) с заданной конфигурацией. Совместим только с хранилищами, реализующими HybridSearcher.
func (*SearchBuilder) InlineCite ¶
func (b *SearchBuilder) InlineCite(ctx context.Context) (string, RetrievalResult, []InlineCitation, error)
InlineCite выполняет RAG-ответ с inline-цитатами `[n]`. LLM расставляет ссылки в тексте; citations содержит только использованные источники. Поддерживает полный routing: HyDE > MultiQuery > Hybrid > ParentIDs > Filter > basic.
func (*SearchBuilder) MultiQuery ¶
func (b *SearchBuilder) MultiQuery(n int) *SearchBuilder
MultiQuery включает multi-query retrieval: LLM генерирует n перефразировок вопроса, результаты каждого поиска объединяются через Reciprocal Rank Fusion. n=0 → использует дефолт (3).
func (*SearchBuilder) ParentIDs ¶
func (b *SearchBuilder) ParentIDs(ids ...string) *SearchBuilder
ParentIDs ограничивает поиск чанками из указанных документов.
func (*SearchBuilder) Retrieve ¶
func (b *SearchBuilder) Retrieve(ctx context.Context) (RetrievalResult, error)
Retrieve выполняет поиск и возвращает RetrievalResult.
func (*SearchBuilder) Stream ¶
func (b *SearchBuilder) Stream(ctx context.Context) (<-chan string, error)
Stream выполняет RAG-ответ через streaming (токен за токеном). Если LLM не поддерживает streaming — возвращает ErrStreamingNotSupported. Поддерживает полный routing: HyDE > MultiQuery > Hybrid > ParentIDs > Filter > basic.
func (*SearchBuilder) StreamCite ¶
func (b *SearchBuilder) StreamCite(ctx context.Context) (<-chan string, RetrievalResult, []InlineCitation, error)
StreamCite выполняет RAG-ответ через streaming с inline-цитатами. sources и citations готовы сразу (поиск синхронный); токены — асинхронно. Если LLM не поддерживает streaming — возвращает ErrStreamingNotSupported. Поддерживает полный routing: HyDE > MultiQuery > Hybrid > ParentIDs > Filter > basic.
func (*SearchBuilder) StreamSources ¶
func (b *SearchBuilder) StreamSources(ctx context.Context) (<-chan string, RetrievalResult, error)
StreamSources выполняет RAG-ответ через streaming с синхронно готовым списком источников. sources готов сразу (поиск синхронный); токены — асинхронно через канал. Если LLM не поддерживает streaming — возвращает ErrStreamingNotSupported. Поддерживает полный routing: HyDE > MultiQuery > Hybrid > ParentIDs > Filter > basic.
@ds-task T2.1: потоковый аналог Cite без inline-разметки (AC-001, AC-002, DEC-002)
func (*SearchBuilder) TopK ¶
func (b *SearchBuilder) TopK(n int) *SearchBuilder
TopK задаёт количество возвращаемых чанков.
type StageEndEvent ¶
type StageEndEvent = domain.StageEndEvent
StageEndEvent — событие завершения стадии pipeline.
type StageStartEvent ¶
type StageStartEvent = domain.StageStartEvent
StageStartEvent — событие начала стадии pipeline.
type StreamingLLMProvider ¶
type StreamingLLMProvider = domain.StreamingLLMProvider
StreamingLLMProvider — опциональная capability интерфейса LLMProvider, поддерживающая streaming.
type VectorStore ¶
type VectorStore = domain.VectorStore
VectorStore определяет интерфейс для работы с векторным хранилищем.
func NewChromaDBStore ¶
func NewChromaDBStore(opts ChromaDBOptions) (VectorStore, error)
NewChromaDBStore создаёт ChromaDB-backed реализацию VectorStore.
Коллекция должна быть создана заранее. Для управления коллекциями используйте CreateChromaCollection.
func NewInMemoryStore ¶
func NewInMemoryStore() VectorStore
NewInMemoryStore создаёт in-memory реализацию VectorStore.
Подходит для прототипирования и тестирования — данные хранятся только в памяти и не сохраняются между перезапусками процесса.
func NewPGVectorStore ¶
func NewPGVectorStore(db *sql.DB, opts PGVectorOptions) VectorStore
NewPGVectorStore создаёт pgvector-backed реализацию VectorStore.
Схема БД не создаётся автоматически: перед использованием примените миграции через MigratePGVector (или SetupPGVector как backward-compatible alias).
Если у ctx нет deadline, операции store используют дефолтные таймауты (см. PGVectorRuntimeOptions).
func NewPGVectorStoreWithOptions ¶
func NewPGVectorStoreWithOptions(db *sql.DB, opts PGVectorStoreOptions) VectorStore
NewPGVectorStoreWithOptions создаёт pgvector-backed реализацию VectorStore (канонический options pattern).
Схема БД не создаётся автоматически: перед использованием примените миграции через MigratePGVector (или SetupPGVector как backward-compatible alias).
Если у ctx нет deadline, операции store используют дефолтные таймауты (см. PGVectorRuntimeOptions).
func NewPGVectorStoreWithRuntimeOptions
deprecated
func NewPGVectorStoreWithRuntimeOptions(db *sql.DB, opts PGVectorOptions, runtime PGVectorRuntimeOptions) VectorStore
NewPGVectorStoreWithRuntimeOptions создаёт pgvector-backed реализацию VectorStore с runtime ограничениями.
Deprecated: используйте NewPGVectorStoreWithOptions (PGVectorStoreOptions.Runtime).
func NewQdrantStore ¶
func NewQdrantStore(opts QdrantOptions) (VectorStore, error)
NewQdrantStore создаёт новый VectorStore на базе Qdrant.
@ds-task T2.4: Фабрика NewQdrantStore (RQ-003)
func NewWeaviateStore ¶
func NewWeaviateStore(opts WeaviateOptions) (VectorStore, error)
NewWeaviateStore создаёт Weaviate-backed реализацию VectorStore. При пустом opts.Host возвращает ErrInvalidVectorStoreConfig.
@ds-task T3.1: NewWeaviateStore с валидацией и ErrInvalidVectorStoreConfig (AC-005, RQ-001)
type VectorStoreWithFilters ¶
type VectorStoreWithFilters = domain.VectorStoreWithFilters
VectorStoreWithFilters — опциональная capability интерфейса VectorStore, поддерживающая фильтры.
type WeaviateOptions ¶
type WeaviateOptions struct {
// Host — адрес Weaviate, например "localhost:8080" (обязательно).
Host string
// Scheme — протокол: "http" или "https". По умолчанию "http".
Scheme string
// Collection — имя коллекции (Weaviate class, обязательно).
Collection string
// APIKey — API ключ для Weaviate Cloud (опционально).
APIKey string
// Timeout — HTTP таймаут (по умолчанию 10s).
Timeout time.Duration
}
WeaviateOptions задаёт параметры подключения к Weaviate.
@ds-task T3.1: Публичный API WeaviateOptions (AC-005, RQ-001)
func (WeaviateOptions) Validate ¶
func (o WeaviateOptions) Validate() error
Validate проверяет корректность опций.
Source Files
¶
- anthropic_llm.go
- basic_chunker.go
- cached_embedder.go
- chromadb.go
- doc.go
- draftrag.go
- errors.go
- hooks.go
- http_collection_helpers.go
- memory.go
- ollama_embedder.go
- ollama_llm.go
- openai_compatible_embedder.go
- openai_compatible_llm.go
- pgvector.go
- pgvector_migrate.go
- pgvector_migrations_assets.go
- qdrant.go
- resilience.go
- search.go
- weaviate.go
- wrapper_helpers.go
Directories
¶
| Path | Synopsis |
|---|---|
|
Package eval provides a small evaluation harness for measuring retrieval quality (Hit@K, MRR, etc).
|
Package eval provides a small evaluation harness for measuring retrieval quality (Hit@K, MRR, etc). |
|
Package otel содержит готовые OpenTelemetry-хуки для draftRAG pipeline.
|
Package otel содержит готовые OpenTelemetry-хуки для draftRAG pipeline. |