application

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Apr 16, 2026 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrFiltersNotSupported возвращается, если pipeline-метод с фильтрами вызван,
	// но underlying VectorStore не поддерживает filters capability.
	ErrFiltersNotSupported = errors.New("vector store does not support filters")

	// ErrStreamingNotSupported возвращается, если streaming-метод вызван,
	// но underlying LLMProvider не поддерживает StreamingLLMProvider capability.
	ErrStreamingNotSupported = errors.New("LLM provider does not support streaming")

	// ErrDeleteNotSupported возвращается, если DeleteDocument вызван,
	// но underlying VectorStore не реализует DocumentStore capability.
	ErrDeleteNotSupported = errors.New("vector store does not support DeleteByParentID")
)
View Source
var ErrHybridNotSupported = errors.New("vector store does not support hybrid search")

ErrHybridNotSupported возвращается, если pipeline-метод гибридного поиска вызван, но underlying VectorStore не поддерживает HybridSearcher capability.

Functions

This section is empty.

Types

type Pipeline

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

Pipeline — application use-case, который композирует зависимости (VectorStore, Embedder, LLMProvider) для построения базового RAG-пайплайна.

func NewPipeline

func NewPipeline(store domain.VectorStore, llm domain.LLMProvider, embedder domain.Embedder) *Pipeline

NewPipeline создаёт новый use-case Pipeline.

func NewPipelineWithChunker

func NewPipelineWithChunker(
	store domain.VectorStore,
	llm domain.LLMProvider,
	embedder domain.Embedder,
	chunker domain.Chunker,
) *Pipeline

NewPipelineWithChunker создаёт новый use-case Pipeline с Chunker для индексирования.

func NewPipelineWithConfig

func NewPipelineWithConfig(
	store domain.VectorStore,
	llm domain.LLMProvider,
	embedder domain.Embedder,
	cfg PipelineConfig,
) *Pipeline

NewPipelineWithConfig создаёт новый use-case Pipeline с конфигурацией.

func (*Pipeline) Answer

func (p *Pipeline) Answer(ctx context.Context, question string, topK int) (string, error)

Answer выполняет полный RAG-цикл: retrieval (Embed+Search) → prompt → LLM.Generate.

func (*Pipeline) AnswerHyDE

func (p *Pipeline) AnswerHyDE(ctx context.Context, question string, topK int) (string, error)

AnswerHyDE генерирует ответ, используя HyDE для retrieval.

func (*Pipeline) AnswerHyDEStream

func (p *Pipeline) AnswerHyDEStream(ctx context.Context, question string, topK int) (<-chan string, error)

AnswerHyDEStream выполняет HyDE retrieval и streaming генерацию.

func (*Pipeline) AnswerHyDEStreamWithInlineCitations

func (p *Pipeline) AnswerHyDEStreamWithInlineCitations(ctx context.Context, question string, topK int) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerHyDEStreamWithInlineCitations выполняет HyDE retrieval и streaming генерацию с inline-цитатами.

func (*Pipeline) AnswerHyDEStreamWithSources

func (p *Pipeline) AnswerHyDEStreamWithSources(ctx context.Context, question string, topK int) (<-chan string, domain.RetrievalResult, error)

AnswerHyDEStreamWithSources выполняет HyDE retrieval и streaming генерацию. Возвращает канал токенов и RetrievalResult синхронно.

func (*Pipeline) AnswerHyDEWithCitations

func (p *Pipeline) AnswerHyDEWithCitations(ctx context.Context, question string, topK int) (string, domain.RetrievalResult, error)

AnswerHyDEWithCitations выполняет HyDE retrieval и генерирует ответ с цитатами.

func (*Pipeline) AnswerHyDEWithInlineCitations

func (p *Pipeline) AnswerHyDEWithInlineCitations(ctx context.Context, question string, topK int) (string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerHyDEWithInlineCitations выполняет HyDE retrieval и генерирует ответ с inline-цитатами.

func (*Pipeline) AnswerHybrid

func (p *Pipeline) AnswerHybrid(ctx context.Context, question string, topK int, config domain.HybridConfig) (string, error)

AnswerHybrid выполняет гибридный поиск (BM25 + semantic) и генерирует ответ.

Если store не реализует HybridSearcher — возвращает ErrHybridNotSupported.

func (*Pipeline) AnswerHybridStream

func (p *Pipeline) AnswerHybridStream(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (<-chan string, error)

AnswerHybridStream выполняет Hybrid retrieval и streaming генерацию.

func (*Pipeline) AnswerHybridStreamWithInlineCitations

func (p *Pipeline) AnswerHybridStreamWithInlineCitations(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerHybridStreamWithInlineCitations выполняет Hybrid retrieval и streaming генерацию с inline-цитатами.

func (*Pipeline) AnswerHybridStreamWithSources

func (p *Pipeline) AnswerHybridStreamWithSources(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (<-chan string, domain.RetrievalResult, error)

AnswerHybridStreamWithSources выполняет Hybrid retrieval и streaming генерацию. Возвращает канал токенов и RetrievalResult синхронно.

func (*Pipeline) AnswerHybridWithCitations

func (p *Pipeline) AnswerHybridWithCitations(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (string, domain.RetrievalResult, error)

AnswerHybridWithCitations выполняет Hybrid retrieval и генерирует ответ с цитатами.

func (*Pipeline) AnswerHybridWithInlineCitations

func (p *Pipeline) AnswerHybridWithInlineCitations(ctx context.Context, question string, topK int, cfg domain.HybridConfig) (string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerHybridWithInlineCitations выполняет Hybrid retrieval и генерирует ответ с inline-цитатами.

func (*Pipeline) AnswerMulti

func (p *Pipeline) AnswerMulti(ctx context.Context, question string, n, topK int) (string, error)

AnswerMulti генерирует ответ используя multi-query retrieval.

func (*Pipeline) AnswerMultiStream

func (p *Pipeline) AnswerMultiStream(ctx context.Context, question string, n, topK int) (<-chan string, error)

AnswerMultiStream выполняет MultiQuery retrieval и streaming генерацию.

func (*Pipeline) AnswerMultiStreamWithInlineCitations

func (p *Pipeline) AnswerMultiStreamWithInlineCitations(ctx context.Context, question string, n, topK int) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerMultiStreamWithInlineCitations выполняет MultiQuery retrieval и streaming генерацию с inline-цитатами.

func (*Pipeline) AnswerMultiStreamWithSources

func (p *Pipeline) AnswerMultiStreamWithSources(ctx context.Context, question string, n, topK int) (<-chan string, domain.RetrievalResult, error)

AnswerMultiStreamWithSources выполняет MultiQuery retrieval и streaming генерацию. Возвращает канал токенов и RetrievalResult синхронно.

func (*Pipeline) AnswerMultiWithCitations

func (p *Pipeline) AnswerMultiWithCitations(ctx context.Context, question string, n, topK int) (string, domain.RetrievalResult, error)

AnswerMultiWithCitations выполняет MultiQuery retrieval и генерирует ответ с цитатами.

func (*Pipeline) AnswerMultiWithInlineCitations

func (p *Pipeline) AnswerMultiWithInlineCitations(ctx context.Context, question string, n, topK int) (string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerMultiWithInlineCitations выполняет MultiQuery retrieval и генерирует ответ с inline-цитатами.

func (*Pipeline) AnswerStream

func (p *Pipeline) AnswerStream(
	ctx context.Context,
	question string,
	topK int,
) (<-chan string, error)

AnswerStream выполняет RAG-цикл с streaming генерацией ответа. Возвращает канал для чтения текстовых чанков; канал закрывается при завершении или ошибке. Retrieval выполняется синхронно перед началом streaming'а.

@ds-task T2.3: Реализовать AnswerStream в application Pipeline (AC-001, DEC-003)

func (*Pipeline) AnswerStreamWithInlineCitations

func (p *Pipeline) AnswerStreamWithInlineCitations(
	ctx context.Context,
	question string,
	topK int,
) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerStreamWithInlineCitations выполняет RAG-цикл с streaming генерацией и inline-цитатами. Возвращает канал для чтения текстовых чанков и слайс цитат (заполняется синхронно перед streaming'ом).

@ds-task T2.4: Реализовать AnswerStreamWithInlineCitations в application Pipeline (AC-002)

func (*Pipeline) AnswerStreamWithMetadataFilter

func (p *Pipeline) AnswerStreamWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (<-chan string, error)

AnswerStreamWithMetadataFilter выполняет retrieval с фильтром по метаданным и streaming генерацию.

func (*Pipeline) AnswerStreamWithMetadataFilterWithInlineCitations

func (p *Pipeline) AnswerStreamWithMetadataFilterWithInlineCitations(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerStreamWithMetadataFilterWithInlineCitations выполняет retrieval с фильтром по метаданным и streaming генерацию с inline-цитатами.

func (*Pipeline) AnswerStreamWithMetadataFilterWithSources

func (p *Pipeline) AnswerStreamWithMetadataFilterWithSources(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (<-chan string, domain.RetrievalResult, error)

AnswerStreamWithMetadataFilterWithSources выполняет retrieval с фильтром по метаданным и streaming генерацию. Возвращает канал токенов и RetrievalResult синхронно.

func (*Pipeline) AnswerStreamWithParentIDs

func (p *Pipeline) AnswerStreamWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (<-chan string, error)

AnswerStreamWithParentIDs выполняет retrieval с фильтром по ParentIDs и streaming генерацию.

func (*Pipeline) AnswerStreamWithParentIDsWithInlineCitations

func (p *Pipeline) AnswerStreamWithParentIDsWithInlineCitations(ctx context.Context, question string, topK int, parentIDs []string) (<-chan string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerStreamWithParentIDsWithInlineCitations выполняет retrieval с фильтром по ParentIDs и streaming генерацию с inline-цитатами.

func (*Pipeline) AnswerStreamWithParentIDsWithSources

func (p *Pipeline) AnswerStreamWithParentIDsWithSources(ctx context.Context, question string, topK int, parentIDs []string) (<-chan string, domain.RetrievalResult, error)

AnswerStreamWithParentIDsWithSources выполняет retrieval с фильтром по ParentIDs и streaming генерацию. Возвращает канал токенов и RetrievalResult синхронно.

func (*Pipeline) AnswerStreamWithSources

func (p *Pipeline) AnswerStreamWithSources(ctx context.Context, question string, topK int) (<-chan string, domain.RetrievalResult, error)

AnswerStreamWithSources выполняет базовый retrieval и streaming генерацию. Возвращает канал токенов и RetrievalResult синхронно.

func (*Pipeline) AnswerWithCitations

func (p *Pipeline) AnswerWithCitations(ctx context.Context, question string, topK int) (string, domain.RetrievalResult, error)

AnswerWithCitations выполняет полный RAG-цикл и возвращает retrieval evidence вместе с ответом.

Если retrieval уже выполнен, а Generate вернул ошибку, метод возвращает retrieval результат (partial) и ошибку, чтобы упростить диагностику и отображение источников.

func (*Pipeline) AnswerWithCitationsWithMetadataFilter

func (p *Pipeline) AnswerWithCitationsWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (string, domain.RetrievalResult, error)

AnswerWithCitationsWithMetadataFilter выполняет retrieval с фильтром по метаданным и генерирует ответ с цитатами.

func (*Pipeline) AnswerWithCitationsWithParentIDs

func (p *Pipeline) AnswerWithCitationsWithParentIDs(
	ctx context.Context,
	question string,
	topK int,
	parentIDs []string,
) (string, domain.RetrievalResult, error)

AnswerWithCitationsWithParentIDs выполняет RAG-цикл с фильтром по ParentIDs и возвращает retrieval evidence.

Если parentIDs пустой — эквивалентно AnswerWithCitations.

func (*Pipeline) AnswerWithInlineCitations

func (p *Pipeline) AnswerWithInlineCitations(
	ctx context.Context,
	question string,
	topK int,
) (string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerWithInlineCitations выполняет полный RAG-цикл и возвращает ответ с inline-цитатами `[n]`, а также retrieval evidence и детерминированный маппинг `n -> chunk`.

Если retrieval уже выполнен, а Generate вернул ошибку, метод возвращает retrieval результат (partial), массив citations и ошибку.

func (*Pipeline) AnswerWithInlineCitationsWithMetadataFilter

func (p *Pipeline) AnswerWithInlineCitationsWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerWithInlineCitationsWithMetadataFilter выполняет retrieval с фильтром по метаданным и генерирует ответ с inline-цитатами.

func (*Pipeline) AnswerWithInlineCitationsWithParentIDs

func (p *Pipeline) AnswerWithInlineCitationsWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (string, domain.RetrievalResult, []domain.InlineCitation, error)

AnswerWithInlineCitationsWithParentIDs выполняет retrieval с фильтром по ParentIDs и генерирует ответ с inline-цитатами.

func (*Pipeline) AnswerWithMetadataFilter

func (p *Pipeline) AnswerWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (string, error)

AnswerWithMetadataFilter выполняет retrieval с фильтром по метаданным и генерирует ответ.

Если filter.Fields пустой — эквивалентно Answer. Если store не реализует VectorStoreWithFilters — возвращает ErrFiltersNotSupported.

@ds-task T3.1: Добавить AnswerWithMetadataFilter в application.Pipeline (RQ-006, AC-003, DEC-003)

func (*Pipeline) AnswerWithParentIDs

func (p *Pipeline) AnswerWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (string, error)

AnswerWithParentIDs выполняет retrieval с фильтром по ParentIDs и генерирует ответ.

Если parentIDs пустой — эквивалентно Answer.

func (*Pipeline) DeleteDocument

func (p *Pipeline) DeleteDocument(ctx context.Context, docID string) error

DeleteDocument удаляет документ и все его чанки по ParentID. Требует, чтобы VectorStore реализовывал domain.DocumentStore. Если store не поддерживает — возвращает ErrDeleteNotSupported.

func (*Pipeline) Index

func (p *Pipeline) Index(ctx context.Context, docs []domain.Document) error

Index индексирует документы (v1: один чанк на документ).

func (*Pipeline) IndexBatch

func (p *Pipeline) IndexBatch(ctx context.Context, docs []domain.Document, batchSize int) (*domain.IndexBatchResult, error)

IndexBatch индексирует документы параллельно с ограничением concurrency и rate limiting.

@ds-task T2.1: Реализовать IndexBatch с worker pool (AC-001, AC-003, AC-004, AC-005) @ds-task T2.2: Добавить rate limiter в IndexBatch (AC-002)

func (*Pipeline) Query

func (p *Pipeline) Query(ctx context.Context, question string, topK int) (domain.RetrievalResult, error)

Query выполняет поиск по вопросу и возвращает RetrievalResult.

func (*Pipeline) QueryHyDE

func (p *Pipeline) QueryHyDE(ctx context.Context, question string, topK int) (domain.RetrievalResult, error)

QueryHyDE выполняет поиск с использованием Hypothetical Document Embeddings. Сначала LLM генерирует гипотетический ответ на вопрос, затем ищем по его embedding.

func (*Pipeline) QueryHybrid

func (p *Pipeline) QueryHybrid(ctx context.Context, question string, topK int, config domain.HybridConfig) (domain.RetrievalResult, error)

QueryHybrid выполняет гибридный поиск (BM25 + semantic) по вопросу.

Если store не реализует HybridSearcher — возвращает ErrHybridNotSupported.

func (*Pipeline) QueryMulti

func (p *Pipeline) QueryMulti(ctx context.Context, question string, n, topK int) (domain.RetrievalResult, error)

QueryMulti выполняет multi-query retrieval: генерирует n перефразировок вопроса, выполняет поиск по каждой, объединяет результаты через Reciprocal Rank Fusion.

func (*Pipeline) QueryWithMetadataFilter

func (p *Pipeline) QueryWithMetadataFilter(ctx context.Context, question string, topK int, filter domain.MetadataFilter) (domain.RetrievalResult, error)

QueryWithMetadataFilter выполняет поиск по вопросу с фильтром по метаданным документа.

Если filter.Fields пустой — эквивалентно Query. Если store не реализует VectorStoreWithFilters — возвращает ErrFiltersNotSupported.

@ds-task T3.1: Добавить QueryWithMetadataFilter в application.Pipeline (RQ-005, AC-003, DEC-003)

func (*Pipeline) QueryWithParentIDs

func (p *Pipeline) QueryWithParentIDs(ctx context.Context, question string, topK int, parentIDs []string) (domain.RetrievalResult, error)

QueryWithParentIDs выполняет поиск по вопросу с фильтром по ParentIDs.

Если parentIDs пустой — эквивалентно Query.

func (*Pipeline) UpdateDocument

func (p *Pipeline) UpdateDocument(ctx context.Context, doc domain.Document) error

UpdateDocument удаляет старые чанки документа и переиндексирует его. Требует DocumentStore capability (аналогично DeleteDocument).

type PipelineConfig

type PipelineConfig struct {
	// SystemPrompt переопределяет system prompt для Answer*. Пустая строка означает дефолт v1.
	SystemPrompt string
	// Chunker включает чанкинг при Index, если не nil.
	Chunker domain.Chunker
	// MaxContextChars ограничивает размер секции “Контекст:” в prompt для Answer* (в символах).
	// 0 означает “без лимита”.
	MaxContextChars int
	// MaxContextChunks ограничивает количество чанков в секции “Контекст:” в prompt для Answer*.
	// 0 означает “без лимита”.
	MaxContextChunks int

	// DedupByParentID включает дедупликацию retrieval результата по ParentID.
	// По умолчанию выключено.
	DedupByParentID bool

	// MMREnabled включает MMR selection поверх retrieval кандидатов.
	// По умолчанию выключено (backward compatibility).
	MMREnabled bool
	// MMRLambda задаёт баланс релевантность/разнообразие в диапазоне [0..1].
	// Если 0 и MMR включён — используется значение по умолчанию (0.5).
	MMRLambda float64
	// MMRCandidatePool задаёт сколько кандидатов запросить у VectorStore до MMR selection.
	// Если 0 — используется topK запроса.
	MMRCandidatePool int

	// Hooks — опциональные хуки наблюдаемости для стадий pipeline.
	// Если nil — no-op.
	Hooks domain.Hooks

	// IndexConcurrency задаёт количество workers для параллельной индексации в IndexBatch.
	// 0 или отрицательное значение означает "использовать default" (4).
	//
	// @ds-task T1.2: Добавить поле IndexConcurrency в PipelineConfig (AC-001, DEC-001)
	IndexConcurrency int

	// IndexBatchRateLimit задаёт максимальное количество вызовов Embed в секунду для IndexBatch.
	// 0 или отрицательное значение означает "использовать default" (10).
	//
	// @ds-task T1.2: Добавить поле IndexBatchRateLimit в PipelineConfig (AC-002, DEC-002)
	IndexBatchRateLimit int

	// Reranker — опциональный reranker, применяется после retrieval и dedup.
	// nil означает "без reranking".
	Reranker domain.Reranker
}

PipelineConfig задаёт опциональную конфигурацию application use-case Pipeline.

Jump to

Keyboard shortcuts

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