Documentation
¶
Overview ¶
Package domain содержит интерфейсы и модели domain-слоя.
Index ¶
- Variables
- func RedactSecret(text, secret string) string
- func RedactSecrets(text string, secrets ...string) string
- func SafeLog(ctx context.Context, logger Logger, level LogLevel, msg string, ...)
- type Chunk
- type Chunker
- type CollectionManager
- type Document
- type DocumentStore
- type Embedder
- type Embedding
- type HookStage
- type Hooks
- type HybridConfig
- type HybridSearcher
- type HybridSearcherWithFilters
- type IndexBatchError
- type IndexBatchResult
- type InlineCitation
- type LLMProvider
- type LogField
- type LogLevel
- type Logger
- type MetadataFilter
- type ParentIDFilter
- type Query
- type Reranker
- type RetrievalResult
- type RetrievedChunk
- type StageEndEvent
- type StageStartEvent
- type StreamingLLMProvider
- type VectorStore
- type VectorStoreWithFilters
Constants ¶
This section is empty.
Variables ¶
var ( // ErrEmptyDocumentID возвращается при попытке валидировать документ без ID. ErrEmptyDocumentID = errors.New("document id is empty") // ErrEmptyDocumentContent возвращается при попытке валидировать документ без содержимого. ErrEmptyDocumentContent = errors.New("document content is empty") // ErrEmptyChunkID возвращается при попытке валидировать чанк без ID. ErrEmptyChunkID = errors.New("chunk id is empty") // ErrEmptyChunkContent возвращается при попытке валидировать чанк без содержимого. ErrEmptyChunkContent = errors.New("chunk content is empty") // ErrEmptyChunkParentID возвращается при попытке валидировать чанк без ParentID. ErrEmptyChunkParentID = errors.New("chunk parent id is empty") // ErrEmptyQueryText возвращается при попытке валидировать запрос без текста. ErrEmptyQueryText = errors.New("query text is empty") // ErrInvalidQueryTopK возвращается при попытке валидировать TopK <= 0. ErrInvalidQueryTopK = errors.New("query topK must be > 0") // ErrFilterNotSupported возвращается, если pipeline-метод с MetadataFilter вызван, // а underlying VectorStore не реализует VectorStoreWithFilters. ErrFilterNotSupported = errors.New("vector store does not support metadata filter") // ErrEmbeddingDimensionMismatch возвращается, если размерность embedding-вектора не соответствует ожидаемой. // // Ошибка предназначена для классификации через errors.Is. ErrEmbeddingDimensionMismatch = errors.New("embedding dimension mismatch") // ErrInvalidHybridConfig возвращается при невалидной конфигурации гибридного поиска. ErrInvalidHybridConfig = errors.New("invalid hybrid config") )
Functions ¶
func RedactSecret ¶
RedactSecret заменяет все вхождения секрета в тексте на "<redacted>". Пустой/пробельный secret → no-op.
func RedactSecrets ¶
RedactSecrets последовательно применяет RedactSecret для списка секретов.
Types ¶
type Chunk ¶
type Chunk struct {
ID string
Content string
ParentID string
Embedding []float64
Position int
// Metadata хранит произвольные метаданные чанка, унаследованные от родительского документа.
// nil означает отсутствие метаданных и не влияет на результат Validate.
Metadata map[string]string
}
Chunk представляет фрагмент документа, полученный в результате чанкинга.
@ds-task T1.2: Добавить поле Metadata в Chunk (DEC-005)
type Chunker ¶
type Chunker interface {
// Chunk разбивает документ на фрагменты для индексации.
Chunk(ctx context.Context, doc Document) ([]Chunk, error)
}
Chunker определяет интерфейс для разбиения документа на чанки.
type CollectionManager ¶
type CollectionManager interface {
// CreateCollection создаёт коллекцию в хранилище.
// Idempotent: повторный вызов при уже существующей коллекции возвращает nil.
CreateCollection(ctx context.Context) error
// DeleteCollection удаляет коллекцию из хранилища.
// Idempotent: возвращает nil если коллекция не существует (404).
DeleteCollection(ctx context.Context) error
// CollectionExists проверяет существование коллекции.
// Возвращает (true, nil) если коллекция существует, (false, nil) если нет,
// (false, error) при сетевой или серверной ошибке.
CollectionExists(ctx context.Context) (bool, error)
}
CollectionManager — опциональная capability VectorStore для управления жизненным циклом коллекции. Реализации, поддерживающие управление коллекциями, должны реализовывать этот интерфейс дополнительно (без ломки существующего контракта VectorStore).
@ds-task T1.1: Добавить интерфейс CollectionManager в domain (AC-006, DEC-001)
type Document ¶
type Document struct {
ID string
Content string
Metadata map[string]string
CreatedAt time.Time
UpdatedAt time.Time
}
Document представляет документ для индексации в RAG-системе.
type DocumentStore ¶
type DocumentStore interface {
VectorStore
// DeleteByParentID удаляет все чанки с указанным ParentID.
DeleteByParentID(ctx context.Context, parentID string) error
}
DocumentStore — опциональная capability VectorStore для удаления документа целиком по ParentID.
type Embedder ¶
type Embedder interface {
// Embed преобразует текст в embedding-вектор фиксированной размерности.
Embed(ctx context.Context, text string) ([]float64, error)
}
Embedder определяет интерфейс для преобразования текста в векторное представление.
type HookStage ¶
type HookStage string
HookStage описывает стадию выполнения pipeline, которую можно наблюдать через Hooks.
const ( // HookStageChunking — разбиение документа на чанки (только при наличии Chunker). HookStageChunking HookStage = "chunking" // HookStageEmbed — генерация embedding для текста. HookStageEmbed HookStage = "embed" // HookStageSearch — поиск в VectorStore. HookStageSearch HookStage = "search" // HookStageGenerate — генерация ответа LLM. HookStageGenerate HookStage = "generate" )
type Hooks ¶
type Hooks interface {
StageStart(ctx context.Context, ev StageStartEvent)
StageEnd(ctx context.Context, ev StageEndEvent)
}
Hooks — опциональный интерфейс наблюдаемости для pipeline стадий.
В v1 hooks вызываются синхронно: обработчики ДОЛЖНЫ быть лёгкими и быстрыми. При nil hooks pipeline работает как обычно (no-op).
type HybridConfig ¶
type HybridConfig struct {
// SemanticWeight вес семантического скора (0.0 - 1.0).
// BM25Weight вычисляется как 1.0 - SemanticWeight.
// При значении 0.0 используется только BM25, при 1.0 — только семантический.
// Default: 0.7
SemanticWeight float64
// UseRRF если true, используется Reciprocal Rank Fusion вместо weighted score.
// При UseRRF=true поле SemanticWeight игнорируется.
// Default: true
UseRRF bool
// RRFK константа для RRF-формулы: score = 1/(k + rank).
// Default: 60
RRFK int
// BMFinalK количество результатов, возвращаемых после fusion.
// Должно быть <= topK.
// Default: равно topK (0 означает "использовать topK")
BMFinalK int
}
HybridConfig задаёт параметры гибридного поиска (BM25 + semantic).
func DefaultHybridConfig ¶
func DefaultHybridConfig() HybridConfig
DefaultHybridConfig возвращает конфигурацию гибридного поиска по умолчанию.
func (HybridConfig) Validate ¶
func (c HybridConfig) Validate() error
Validate проверяет инварианты HybridConfig.
type HybridSearcher ¶
type HybridSearcher interface {
// SearchHybrid выполняет гибридный поиск: семантический + BM25.
// Возвращает объединённые результаты с скором от fusion-стратегии.
SearchHybrid(ctx context.Context, query string, embedding []float64, topK int, config HybridConfig) (RetrievalResult, error)
}
HybridSearcher определяет capability для хранилищ, поддерживающих гибридный поиск (BM25 + semantic).
type HybridSearcherWithFilters ¶
type HybridSearcherWithFilters interface {
HybridSearcher
// SearchHybridWithParentIDFilter выполняет гибридный поиск с фильтрацией по ParentID.
SearchHybridWithParentIDFilter(ctx context.Context, query string, embedding []float64, topK int, config HybridConfig, filter ParentIDFilter) (RetrievalResult, error)
// SearchHybridWithMetadataFilter выполняет гибридный поиск с фильтрацией по метаданным.
SearchHybridWithMetadataFilter(ctx context.Context, query string, embedding []float64, topK int, config HybridConfig, filter MetadataFilter) (RetrievalResult, error)
}
HybridSearcherWithFilters расширяет HybridSearcher фильтрами для гибридного поиска.
type IndexBatchError ¶
type IndexBatchError struct {
// DocumentID — идентификатор документа, который не удалось проиндексировать.
DocumentID string
// Error — оригинальная ошибка (embed, chunking или upsert).
Error error
}
IndexBatchError представляет ошибку индексации конкретного документа.
@ds-task T1.1: Добавить тип IndexBatchError для идентификации failed документов (AC-003)
type IndexBatchResult ¶
type IndexBatchResult struct {
// Successful — документы, успешно проиндексированные (все чанки сохранены).
Successful []Document
// Errors — ошибки по документам (partial failure).
Errors []IndexBatchError
// ProcessedCount — общее количество обработанных документов (успешных + с ошибками).
ProcessedCount int
}
IndexBatchResult содержит результат batch-индексации документов.
@ds-task T1.1: Добавить тип IndexBatchResult для возврата результатов batch-индексации (AC-003, AC-004)
type InlineCitation ¶
type InlineCitation struct {
Number int
Chunk RetrievedChunk
}
InlineCitation задаёт детерминированный маппинг номера цитаты (используется как `[n]`) на конкретный retrieval-источник (чанк + score).
Нумерация начинается с 1 и соответствует порядку источников в prompt.
type LLMProvider ¶
type LLMProvider interface {
// Generate генерирует ответ на основе system и user сообщений.
Generate(ctx context.Context, systemPrompt, userMessage string) (string, error)
}
LLMProvider определяет интерфейс для генерации текста через LLM.
type Logger ¶
Logger — минимальный интерфейс структурированного логирования.
Реализация должна быть thread-safe. Любые ошибки/паники логгера не должны ломать основной поток библиотеки: вызывайте логгер через SafeLog.
func NoopLogger ¶
func NoopLogger() Logger
NoopLogger возвращает logger, который игнорирует все события.
type MetadataFilter ¶
type MetadataFilter struct {
// Fields — карта имён полей метаданных и их ожидаемых строковых значений.
Fields map[string]string
}
MetadataFilter задаёт условие точного совпадения по полям метаданных документа при поиске. Пустой Fields (nil или len==0) означает «без фильтра» — поведение идентично поиску без фильтра. Все условия применяются как AND: все пары ключ-значение из Fields должны совпасть.
@ds-task T1.1: Добавить тип MetadataFilter в domain (RQ-001, DEC-001)
type ParentIDFilter ¶
type ParentIDFilter struct {
// ParentIDs — список допустимых parent_id. Пустой список означает “без фильтра”.
ParentIDs []string
}
ParentIDFilter задаёт фильтрацию retrieval по ParentID (например, в пределах одного документа).
type Reranker ¶
type Reranker interface {
Rerank(ctx context.Context, query string, chunks []RetrievedChunk) ([]RetrievedChunk, error)
}
Reranker — опциональная capability для переранжирования результатов retrieval. Принимает исходный вопрос и список чанков, возвращает переупорядоченный список. Типичные реализации: cross-encoder, Cohere Rerank, LLM-based scoring.
type RetrievalResult ¶
type RetrievalResult struct {
Chunks []RetrievedChunk
QueryText string
TotalFound int
}
RetrievalResult содержит результаты поиска по запросу.
type RetrievedChunk ¶
RetrievedChunk представляет чанк с оценкой релевантности в результате поиска.
type StageEndEvent ¶
StageEndEvent — событие завершения стадии pipeline.
type StageStartEvent ¶
StageStartEvent — событие начала стадии pipeline.
type StreamingLLMProvider ¶
type StreamingLLMProvider interface {
LLMProvider
// GenerateStream генерирует ответ токен за токеном через канал.
// Возвращает канал для чтения текстовых чанков; канал закрывается при завершении или ошибке.
GenerateStream(ctx context.Context, systemPrompt, userMessage string) (<-chan string, error)
}
StreamingLLMProvider — опциональная capability интерфейса LLMProvider.
Реализации, которые поддерживают streaming, должны реализовать этот интерфейс дополнительно (без ломки существующего контракта LLMProvider).
@ds-task T1.1: Добавить StreamingLLMProvider интерфейс (DEC-001, AC-004)
type VectorStore ¶
type VectorStore interface {
// Upsert сохраняет или обновляет чанк в хранилище.
Upsert(ctx context.Context, chunk Chunk) error
// Delete удаляет чанк по ID из хранилища.
Delete(ctx context.Context, id string) error
// Search выполняет поиск похожих чанков по embedding-вектору.
// Возвращает результат с релевантными чанками, отсортированными по score (по убыванию).
Search(ctx context.Context, embedding []float64, topK int) (RetrievalResult, error)
}
VectorStore определяет интерфейс для работы с векторным хранилищем. Реализации должны поддерживать операции upsert, delete и поиска по embedding-вектору.
type VectorStoreWithFilters ¶
type VectorStoreWithFilters interface {
VectorStore
// SearchWithFilter выполняет поиск похожих чанков по embedding-вектору с дополнительным фильтром.
SearchWithFilter(ctx context.Context, embedding []float64, topK int, filter ParentIDFilter) (RetrievalResult, error)
// SearchWithMetadataFilter выполняет поиск похожих чанков с фильтрацией по полям метаданных.
// Пустой filter.Fields (nil или len==0) эквивалентно вызову Search без фильтра.
SearchWithMetadataFilter(ctx context.Context, embedding []float64, topK int, filter MetadataFilter) (RetrievalResult, error)
}
VectorStoreWithFilters — опциональная capability интерфейса VectorStore.
Реализации, которые поддерживают фильтры, должны реализовать этот интерфейс дополнительно (без ломки существующего контракта VectorStore).
@ds-task T1.3: Расширить VectorStoreWithFilters методом SearchWithMetadataFilter (RQ-002, DEC-001)