synthesizer

package
v0.5.13 Latest Latest
Warning

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

Go to latest
Published: Aug 13, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Overview

Package synthesizer 提供 RAG 响应合成能力

streaming.go 实现流式合成(边检索边生成):

  • StreamingSynthesizer: 流式合成器接口
  • IncrementalSynthesizer: 增量合成,每到达一批文档就更新答案
  • PipelineSynthesizer: 管道式合成,检索和生成并行执行

对标 LangChain/LlamaIndex 的 Streaming Synthesis 能力。

使用示例:

synth := NewIncrementalSynthesizer(llmProvider,
    WithIncrementalBatchSize(3),
)

// 流式使用
stream, err := synth.SynthesizeStream(ctx, "查询", docChan)
for chunk := range stream {
    fmt.Print(chunk.Text)
}

Package synthesizer 提供 RAG 响应合成能力

响应合成器负责将检索到的文档与用户查询结合,生成最终的回答。 借鉴 LlamaIndex 的响应合成器设计,支持多种合成策略。

支持的合成策略:

  • Refine: 迭代精炼,逐个文档优化答案
  • Compact: 紧凑合成,将文档压缩后一次性生成
  • TreeSummarize: 树状摘要,分层递归合成
  • SimpleSummarize: 简单摘要,直接合并所有文档

Package synthesizer 提供 RAG 响应合成能力

本文件实现更多合成策略,对标 LlamaIndex:

  • Accumulate: 累积合成,将每个文档的答案累积
  • Generation: 直接生成,不使用检索内容
  • NoText: 无文本合成,仅返回源文档
  • CompactAndRefine: 紧凑后精炼
  • AsyncTreeSummarize: 异步树状摘要
  • CustomPrompt: 自定义提示词合成

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AccumulateOption

type AccumulateOption func(*AccumulateSynthesizer)

AccumulateOption 累积合成器选项

func WithAccumulateDedup

func WithAccumulateDedup(dedup bool) AccumulateOption

WithAccumulateDedup 设置是否去重

func WithAccumulateLLM

func WithAccumulateLLM(provider llm.Provider) AccumulateOption

WithAccumulateLLM 设置 LLM 提供者

func WithAccumulateMaxAnswers

func WithAccumulateMaxAnswers(n int) AccumulateOption

WithAccumulateMaxAnswers 设置最大答案数量

func WithAccumulateSeparator

func WithAccumulateSeparator(sep string) AccumulateOption

WithAccumulateSeparator 设置答案分隔符

type AccumulateSynthesizer

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

AccumulateSynthesizer 累积合成器 为每个文档单独生成答案,然后累积所有答案

func NewAccumulateSynthesizer

func NewAccumulateSynthesizer(opts ...AccumulateOption) *AccumulateSynthesizer

NewAccumulateSynthesizer 创建累积合成器

func (*AccumulateSynthesizer) Name

func (s *AccumulateSynthesizer) Name() string

Name 返回合成器名称

func (*AccumulateSynthesizer) Synthesize

func (s *AccumulateSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)

Synthesize 合成响应

type AsyncTreeOption

type AsyncTreeOption func(*AsyncTreeSummarizeSynthesizer)

AsyncTreeOption 异步树状摘要选项

func WithAsyncTreeChunkSize

func WithAsyncTreeChunkSize(n int) AsyncTreeOption

WithAsyncTreeChunkSize 设置分组大小

func WithAsyncTreeConcurrency

func WithAsyncTreeConcurrency(n int) AsyncTreeOption

WithAsyncTreeConcurrency 设置并发数

func WithAsyncTreeLLM

func WithAsyncTreeLLM(provider llm.Provider) AsyncTreeOption

WithAsyncTreeLLM 设置 LLM

type AsyncTreeSummarizeSynthesizer

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

AsyncTreeSummarizeSynthesizer 异步树状摘要合成器 并行处理文档分组,提高性能

func NewAsyncTreeSummarizeSynthesizer

func NewAsyncTreeSummarizeSynthesizer(opts ...AsyncTreeOption) *AsyncTreeSummarizeSynthesizer

NewAsyncTreeSummarizeSynthesizer 创建异步树状摘要合成器

func (*AsyncTreeSummarizeSynthesizer) Name

Name 返回合成器名称

func (*AsyncTreeSummarizeSynthesizer) Synthesize

func (s *AsyncTreeSummarizeSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)

Synthesize 合成响应

type CompactAndRefineOption

type CompactAndRefineOption func(*CompactAndRefineSynthesizer)

CompactAndRefineOption 紧凑后精炼选项

func WithCompactAndRefineLLM

func WithCompactAndRefineLLM(provider llm.Provider) CompactAndRefineOption

WithCompactAndRefineLLM 设置 LLM

func WithCompactAndRefineMaxContext

func WithCompactAndRefineMaxContext(n int) CompactAndRefineOption

WithCompactAndRefineMaxContext 设置最大上下文长度

type CompactAndRefineSynthesizer

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

CompactAndRefineSynthesizer 紧凑后精炼合成器 先紧凑文档,如果超出上下文限制则精炼

func NewCompactAndRefineSynthesizer

func NewCompactAndRefineSynthesizer(opts ...CompactAndRefineOption) *CompactAndRefineSynthesizer

NewCompactAndRefineSynthesizer 创建紧凑后精炼合成器

func (*CompactAndRefineSynthesizer) Name

Name 返回合成器名称

func (*CompactAndRefineSynthesizer) Synthesize

func (s *CompactAndRefineSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)

Synthesize 合成响应

type CompactSynthesizer

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

CompactSynthesizer 紧凑合成器 将所有文档压缩到上下文窗口内,一次性生成答案 适合文档较少或需要快速响应的场景

func NewCompactSynthesizer

func NewCompactSynthesizer(opts ...CompactSynthesizerOption) *CompactSynthesizer

NewCompactSynthesizer 创建紧凑合成器

func (*CompactSynthesizer) Name

func (s *CompactSynthesizer) Name() string

Name 返回合成器名称

func (*CompactSynthesizer) Synthesize

func (s *CompactSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)

Synthesize 合成响应 将所有文档合并后一次性生成答案

type CompactSynthesizerOption

type CompactSynthesizerOption func(*CompactSynthesizer)

CompactSynthesizerOption 紧凑合成器选项

func WithCompactSynthesizerLLM

func WithCompactSynthesizerLLM(provider llm.Provider) CompactSynthesizerOption

WithCompactSynthesizerLLM 设置 LLM 提供者

func WithCompactSynthesizerMaxContext

func WithCompactSynthesizerMaxContext(n int) CompactSynthesizerOption

WithCompactSynthesizerMaxContext 设置最大上下文长度

func WithCompactSynthesizerName

func WithCompactSynthesizerName(name string) CompactSynthesizerOption

WithCompactSynthesizerName 设置合成器名称

type CustomPromptOption

type CustomPromptOption func(*CustomPromptSynthesizer)

CustomPromptOption 自定义提示词选项

func WithCustomPromptLLM

func WithCustomPromptLLM(provider llm.Provider) CustomPromptOption

WithCustomPromptLLM 设置 LLM

func WithCustomPromptTemplate

func WithCustomPromptTemplate(template string) CustomPromptOption

WithCustomPromptTemplate 设置提示词模板 支持占位符: {query}, {context}, {doc_count}

func WithCustomSystemPrompt

func WithCustomSystemPrompt(prompt string) CustomPromptOption

WithCustomSystemPrompt 设置系统提示词

type CustomPromptSynthesizer

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

CustomPromptSynthesizer 自定义提示词合成器 支持完全自定义的提示词模板

func NewCustomPromptSynthesizer

func NewCustomPromptSynthesizer(opts ...CustomPromptOption) *CustomPromptSynthesizer

NewCustomPromptSynthesizer 创建自定义提示词合成器

func (*CustomPromptSynthesizer) Name

func (s *CustomPromptSynthesizer) Name() string

Name 返回合成器名称

func (*CustomPromptSynthesizer) Synthesize

func (s *CustomPromptSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)

Synthesize 合成响应

type GenerationOption

type GenerationOption func(*GenerationSynthesizer)

GenerationOption 直接生成合成器选项

func WithGenerationLLM

func WithGenerationLLM(provider llm.Provider) GenerationOption

WithGenerationLLM 设置 LLM 提供者

type GenerationSynthesizer

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

GenerationSynthesizer 直接生成合成器 不使用检索内容,仅基于 LLM 知识生成答案

func NewGenerationSynthesizer

func NewGenerationSynthesizer(opts ...GenerationOption) *GenerationSynthesizer

NewGenerationSynthesizer 创建直接生成合成器

func (*GenerationSynthesizer) Name

func (s *GenerationSynthesizer) Name() string

Name 返回合成器名称

func (*GenerationSynthesizer) Synthesize

func (s *GenerationSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)

Synthesize 合成响应

type IncrementalOption

type IncrementalOption func(*IncrementalSynthesizer)

IncrementalOption 增量合成器选项

func WithIncrementalBatchSize

func WithIncrementalBatchSize(size int) IncrementalOption

WithIncrementalBatchSize 设置每批文档数量

func WithIncrementalLLM

func WithIncrementalLLM(provider llm.Provider) IncrementalOption

WithIncrementalLLM 设置 LLM

func WithIncrementalMaxDocs

func WithIncrementalMaxDocs(max int) IncrementalOption

WithIncrementalMaxDocs 设置最大文档数

func WithIncrementalModel

func WithIncrementalModel(model string) IncrementalOption

WithIncrementalModel 设置模型

type IncrementalSynthesizer

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

IncrementalSynthesizer 增量合成器 每到达一批文档就增量更新答案

func NewIncrementalSynthesizer

func NewIncrementalSynthesizer(opts ...IncrementalOption) *IncrementalSynthesizer

NewIncrementalSynthesizer 创建增量合成器

func (*IncrementalSynthesizer) Name

func (s *IncrementalSynthesizer) Name() string

Name 返回名称

func (*IncrementalSynthesizer) Synthesize

func (s *IncrementalSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document) (string, error)

Synthesize 同步合成(实现 Synthesizer 接口)

func (*IncrementalSynthesizer) SynthesizeStream

func (s *IncrementalSynthesizer) SynthesizeStream(ctx context.Context, query string, docChan <-chan rag.Document) (<-chan StreamChunk, error)

SynthesizeStream 流式增量合成

type NoTextSynthesizer

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

NoTextSynthesizer 无文本合成器 不生成文本,仅返回源文档

func NewNoTextSynthesizer

func NewNoTextSynthesizer() *NoTextSynthesizer

NewNoTextSynthesizer 创建无文本合成器

func (*NoTextSynthesizer) Name

func (s *NoTextSynthesizer) Name() string

Name 返回合成器名称

func (*NoTextSynthesizer) Synthesize

func (s *NoTextSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)

Synthesize 合成响应

type PipelineOption

type PipelineOption func(*PipelineSynthesizer)

PipelineOption 管道合成器选项

func WithPipelineBufferSize

func WithPipelineBufferSize(size int) PipelineOption

WithPipelineBufferSize 设置缓冲大小

func WithPipelineLLM

func WithPipelineLLM(provider llm.Provider) PipelineOption

WithPipelineLLM 设置 LLM

func WithPipelineModel

func WithPipelineModel(model string) PipelineOption

WithPipelineModel 设置模型

func WithPipelineRetriever

func WithPipelineRetriever(r rag.Retriever) PipelineOption

WithPipelineRetriever 设置检索器

type PipelineSynthesizer

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

PipelineSynthesizer 管道式合成器 检索和生成在不同 goroutine 中并行执行 检索结果通过内部缓冲传递给生成侧

func NewPipelineSynthesizer

func NewPipelineSynthesizer(opts ...PipelineOption) *PipelineSynthesizer

NewPipelineSynthesizer 创建管道合成器

func (*PipelineSynthesizer) Name

func (s *PipelineSynthesizer) Name() string

Name 返回名称

func (*PipelineSynthesizer) RetrieveAndSynthesize

func (s *PipelineSynthesizer) RetrieveAndSynthesize(ctx context.Context, query string, opts ...rag.RetrieveOption) (<-chan StreamChunk, error)

RetrieveAndSynthesize 管道式检索+合成 启动检索和合成两个并行管道:

  • 检索管道:异步执行检索,文档到达后立即推送
  • 合成管道:收到足够文档后开始生成,后续文档用于增量更新

func (*PipelineSynthesizer) Synthesize

func (s *PipelineSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document) (string, error)

Synthesize 同步合成

type RefineSynthesizer

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

RefineSynthesizer 迭代精炼合成器 逐个处理文档,每次用新文档来精炼已有的答案 适合需要综合多个文档信息的场景

func NewRefineSynthesizer

func NewRefineSynthesizer(opts ...RefineSynthesizerOption) *RefineSynthesizer

NewRefineSynthesizer 创建迭代精炼合成器

func (*RefineSynthesizer) Name

func (s *RefineSynthesizer) Name() string

Name 返回合成器名称

func (*RefineSynthesizer) Synthesize

func (s *RefineSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)

Synthesize 合成响应 迭代处理每个文档,逐步精炼答案

type RefineSynthesizerOption

type RefineSynthesizerOption func(*RefineSynthesizer)

RefineSynthesizerOption 精炼合成器选项

func WithRefinePrompt

func WithRefinePrompt(prompt string) RefineSynthesizerOption

WithRefinePrompt 设置精炼提示词

func WithRefineSynthesizerLLM

func WithRefineSynthesizerLLM(provider llm.Provider) RefineSynthesizerOption

WithRefineSynthesizerLLM 设置 LLM 提供者

func WithRefineSynthesizerName

func WithRefineSynthesizerName(name string) RefineSynthesizerOption

WithRefineSynthesizerName 设置合成器名称

type Response

type Response struct {
	// Content 生成的回答内容
	Content string `json:"content"`

	// SourceDocuments 引用的源文档
	SourceDocuments []rag.Document `json:"source_documents,omitempty"`

	// Metadata 元数据(包含 token 消耗、延迟等信息)
	Metadata map[string]any `json:"metadata,omitempty"`
}

Response 合成响应

type SimpleSummarizeSynthesizer

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

SimpleSummarizeSynthesizer 简单摘要合成器 最简单的策略,直接连接所有文档并生成摘要

func NewSimpleSummarizeSynthesizer

func NewSimpleSummarizeSynthesizer(opts ...SimpleSynthesizerOption) *SimpleSummarizeSynthesizer

NewSimpleSummarizeSynthesizer 创建简单摘要合成器

func (*SimpleSummarizeSynthesizer) Name

Name 返回合成器名称

func (*SimpleSummarizeSynthesizer) Synthesize

func (s *SimpleSummarizeSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)

Synthesize 合成响应 直接合并所有文档内容生成回答

type SimpleSynthesizerOption

type SimpleSynthesizerOption func(*SimpleSummarizeSynthesizer)

SimpleSynthesizerOption 简单合成器选项

func WithSimpleSynthesizerLLM

func WithSimpleSynthesizerLLM(provider llm.Provider) SimpleSynthesizerOption

WithSimpleSynthesizerLLM 设置 LLM 提供者

func WithSimpleSynthesizerName

func WithSimpleSynthesizerName(name string) SimpleSynthesizerOption

WithSimpleSynthesizerName 设置合成器名称

type StreamChunk

type StreamChunk struct {
	// Text 文本内容
	Text string

	// IsPartial 是否为部分结果(true 表示后续可能有更新)
	IsPartial bool

	// SourceDocs 当前块使用的源文档数量
	SourceDocs int

	// Metadata 元数据
	Metadata map[string]any
}

StreamChunk 流式输出块

type StreamingSynthesizer

type StreamingSynthesizer interface {
	Synthesizer

	// SynthesizeStream 流式合成
	// docChan 是一个接收文档的通道,文档会在检索过程中陆续到达
	// 返回一个输出流通道
	SynthesizeStream(ctx context.Context, query string, docChan <-chan rag.Document) (<-chan StreamChunk, error)
}

StreamingSynthesizer 流式合成器接口 支持边检索边生成的流式合成

type SynthesizeOption

type SynthesizeOption func(*synthesizeConfig)

SynthesizeOption 合成选项函数

func WithMaxTokens

func WithMaxTokens(n int) SynthesizeOption

WithMaxTokens 设置最大生成 token 数

func WithPromptTemplate

func WithPromptTemplate(template string) SynthesizeOption

WithPromptTemplate 设置提示词模板 模板中可使用 {query} 和 {context} 占位符

func WithSourceDocuments

func WithSourceDocuments(include bool) SynthesizeOption

WithSourceDocuments 设置是否包含源文档引用

func WithSynthesizeTimeout

func WithSynthesizeTimeout(d time.Duration) SynthesizeOption

WithSynthesizeTimeout 设置合成超时时间

func WithTemperature

func WithTemperature(t float64) SynthesizeOption

WithTemperature 设置生成温度 温度越高,生成的内容越随机;温度越低,生成的内容越确定

type Synthesizer

type Synthesizer interface {
	// Name 返回合成器名称
	Name() string

	// Synthesize 合成响应
	// 接收查询和相关文档,返回生成的响应
	Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)
}

Synthesizer 响应合成器接口 负责将检索到的文档与用户查询结合,生成最终回答

func New

func New(synthType SynthesizerType) Synthesizer

New 创建合成器 根据类型创建对应的合成器实例

func NewExtended

func NewExtended(synthType SynthesizerType) Synthesizer

NewExtended 创建扩展合成器

type SynthesizerType

type SynthesizerType string

SynthesizerType 合成器类型

const (
	// TypeRefine 迭代精炼类型
	TypeRefine SynthesizerType = "refine"
	// TypeCompact 紧凑合成类型
	TypeCompact SynthesizerType = "compact"
	// TypeTreeSummarize 树状摘要类型
	TypeTreeSummarize SynthesizerType = "tree_summarize"
	// TypeSimpleSummarize 简单摘要类型
	TypeSimpleSummarize SynthesizerType = "simple_summarize"
)
const (
	// TypeAccumulate 累积类型
	TypeAccumulate SynthesizerType = "accumulate"
	// TypeGeneration 直接生成类型
	TypeGeneration SynthesizerType = "generation"
	// TypeNoText 无文本类型
	TypeNoText SynthesizerType = "no_text"
	// TypeCompactAndRefine 紧凑后精炼类型
	TypeCompactAndRefine SynthesizerType = "compact_and_refine"
	// TypeAsyncTreeSummarize 异步树状摘要类型
	TypeAsyncTreeSummarize SynthesizerType = "async_tree_summarize"
	// TypeCustomPrompt 自定义提示词类型
	TypeCustomPrompt SynthesizerType = "custom_prompt"
)

扩展合成器类型

func AvailableStrategies

func AvailableStrategies() []SynthesizerType

AvailableStrategies 返回所有可用的合成策略

type TreeSummarizeSynthesizer

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

TreeSummarizeSynthesizer 树状摘要合成器 分层递归处理文档,适合大量文档的场景

func NewTreeSummarizeSynthesizer

func NewTreeSummarizeSynthesizer(opts ...TreeSynthesizerOption) *TreeSummarizeSynthesizer

NewTreeSummarizeSynthesizer 创建树状摘要合成器

func (*TreeSummarizeSynthesizer) Name

func (s *TreeSummarizeSynthesizer) Name() string

Name 返回合成器名称

func (*TreeSummarizeSynthesizer) Synthesize

func (s *TreeSummarizeSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document, opts ...SynthesizeOption) (*Response, error)

Synthesize 合成响应 分层递归摘要,最终合并为一个答案

type TreeSynthesizerOption

type TreeSynthesizerOption func(*TreeSummarizeSynthesizer)

TreeSynthesizerOption 树状合成器选项

func WithTreeSynthesizerChunkSize

func WithTreeSynthesizerChunkSize(n int) TreeSynthesizerOption

WithTreeSynthesizerChunkSize 设置每组文档数量 注意:chunkSize 最小为 2,否则会导致无限循环

func WithTreeSynthesizerLLM

func WithTreeSynthesizerLLM(provider llm.Provider) TreeSynthesizerOption

WithTreeSynthesizerLLM 设置 LLM 提供者

func WithTreeSynthesizerName

func WithTreeSynthesizerName(name string) TreeSynthesizerOption

WithTreeSynthesizerName 设置合成器名称

Jump to

Keyboard shortcuts

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