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 ¶
- type AccumulateOption
- type AccumulateSynthesizer
- type AsyncTreeOption
- type AsyncTreeSummarizeSynthesizer
- type CompactAndRefineOption
- type CompactAndRefineSynthesizer
- type CompactSynthesizer
- type CompactSynthesizerOption
- type CustomPromptOption
- type CustomPromptSynthesizer
- type GenerationOption
- type GenerationSynthesizer
- type IncrementalOption
- type IncrementalSynthesizer
- func (s *IncrementalSynthesizer) Name() string
- func (s *IncrementalSynthesizer) Synthesize(ctx context.Context, query string, docs []rag.Document) (string, error)
- func (s *IncrementalSynthesizer) SynthesizeStream(ctx context.Context, query string, docChan <-chan rag.Document) (<-chan StreamChunk, error)
- type NoTextSynthesizer
- type PipelineOption
- type PipelineSynthesizer
- type RefineSynthesizer
- type RefineSynthesizerOption
- type Response
- type SimpleSummarizeSynthesizer
- type SimpleSynthesizerOption
- type StreamChunk
- type StreamingSynthesizer
- type SynthesizeOption
- type Synthesizer
- type SynthesizerType
- type TreeSummarizeSynthesizer
- type TreeSynthesizerOption
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) 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 ¶
func (s *AsyncTreeSummarizeSynthesizer) Name() string
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 ¶
func (s *CompactAndRefineSynthesizer) Name() string
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) 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) 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) 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) 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) 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 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) 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) 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 ¶
func (s *SimpleSummarizeSynthesizer) Name() string
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 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 响应合成器接口 负责将检索到的文档与用户查询结合,生成最终回答
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 设置合成器名称