Documentation
¶
Overview ¶
Package retriever 提供 RAG 系统的文档检索器
adaptive.go 实现自适应检索 (Adaptive Retrieval):
- AdaptiveRetriever: 根据查询复杂度自动调整检索策略和参数
- QueryClassifier: 查询分类器,判断查询类型和复杂度
- StrategySelector: 策略选择器,根据分类结果选择最优检索方案
对标 LangChain/LlamaIndex 的自适应检索能力。
使用示例:
adaptive := NewAdaptiveRetriever(
WithBaseRetriever(vectorRetriever),
WithFallbackRetriever(keywordRetriever),
WithClassifier(NewRuleClassifier()),
)
docs, err := adaptive.Retrieve(ctx, "复杂的多实体关联查询")
Package retriever 提供 RAG 系统的文档检索器 ¶
hyde.go 实现 HyDE (Hypothetical Document Embeddings) 假设文档检索:
- HyDERetriever: 通过 LLM 生成假设文档,用假设文档的向量检索真实文档
- VectorMergeStrategy: 多个假设文档向量的合并策略
HyDE 核心思想:
用户查询和相关文档之间存在"语义鸿沟"。HyDE 先让 LLM 生成一个 假设的理想答案文档,然后用该文档的向量去检索真实文档。 因为假设文档与真实文档在语义空间中更接近,检索效果通常更好。
对标 LangChain HypotheticalDocumentEmbedder / LlamaIndex HyDEQueryTransform。
使用示例:
hyde := NewHyDERetriever(
llmProvider,
embedder,
vectorStore,
WithHyDENumHypothetical(3),
WithHyDETopK(10),
)
docs, err := hyde.Retrieve(ctx, "Go 语言的并发模型有什么优势?")
Package retriever 提供 RAG 系统的文档检索器 ¶
Package retriever 提供 RAG 系统的文档检索器 ¶
Retriever 用于从向量存储中检索相关文档:
- VectorRetriever: 基于向量相似度检索
- KeywordRetriever: 基于关键词检索
- HybridRetriever: 混合检索(向量 + 关键词)
- MultiRetriever: 多源检索聚合
Index ¶
- type AdaptiveOption
- func WithBaseRetriever(r rag.Retriever) AdaptiveOption
- func WithClassifier(c QueryClassifier) AdaptiveOption
- func WithComplexityStrategy(complexity QueryComplexity, strategy *RetrievalStrategy) AdaptiveOption
- func WithDefaultMinScore(score float32) AdaptiveOption
- func WithDefaultTopK(k int) AdaptiveOption
- func WithNamedRetriever(name string, r rag.Retriever) AdaptiveOption
- type AdaptiveRetriever
- type DocumentStore
- type HyDEOption
- type HyDERetriever
- type HybridOption
- type HybridRetriever
- type IndexNode
- type KeywordOption
- type KeywordRetriever
- type MultiOption
- type MultiRetriever
- type NodeIndex
- func (idx *NodeIndex) Add(node *IndexNode)
- func (idx *NodeIndex) AllNodes() []*IndexNode
- func (idx *NodeIndex) Clear()
- func (idx *NodeIndex) Count() int
- func (idx *NodeIndex) Delete(id string)
- func (idx *NodeIndex) Get(id string) (*IndexNode, bool)
- func (idx *NodeIndex) GetChildren(id string) []*IndexNode
- func (idx *NodeIndex) GetLeafNodes() []*IndexNode
- type NodeType
- type ParentDocOption
- type ParentDocRetriever
- func (r *ParentDocRetriever) Clear(ctx context.Context) error
- func (r *ParentDocRetriever) Count(ctx context.Context) (int, error)
- func (r *ParentDocRetriever) Delete(ctx context.Context, ids []string) error
- func (r *ParentDocRetriever) GetParentStore() *DocumentStore
- func (r *ParentDocRetriever) Index(ctx context.Context, docs []rag.Document) error
- func (r *ParentDocRetriever) Retrieve(ctx context.Context, query string, opts ...rag.RetrieveOption) ([]rag.Document, error)
- type QueryClassification
- type QueryClassifier
- type QueryComplexity
- type QueryType
- type RecursiveOption
- type RecursiveRetriever
- func (r *RecursiveRetriever) Clear(ctx context.Context) error
- func (r *RecursiveRetriever) GetNodeIndex() *NodeIndex
- func (r *RecursiveRetriever) IndexNodes(ctx context.Context, nodes []*IndexNode) error
- func (r *RecursiveRetriever) Retrieve(ctx context.Context, query string, opts ...rag.RetrieveOption) ([]rag.Document, error)
- type Reranker
- type RerankerOption
- type RerankerRetriever
- type RetrievalStrategy
- type RuleClassifier
- type VectorMergeStrategy
- type VectorOption
- type VectorRetriever
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AdaptiveOption ¶
type AdaptiveOption func(*AdaptiveRetriever)
AdaptiveOption 自适应检索器选项
func WithBaseRetriever ¶
func WithBaseRetriever(r rag.Retriever) AdaptiveOption
WithBaseRetriever 设置基础检索器
func WithComplexityStrategy ¶
func WithComplexityStrategy(complexity QueryComplexity, strategy *RetrievalStrategy) AdaptiveOption
WithComplexityStrategy 设置特定复杂度的策略
func WithDefaultMinScore ¶
func WithDefaultMinScore(score float32) AdaptiveOption
WithDefaultMinScore 设置默认最小分数
func WithNamedRetriever ¶
func WithNamedRetriever(name string, r rag.Retriever) AdaptiveOption
WithNamedRetriever 添加命名检索器
type AdaptiveRetriever ¶
type AdaptiveRetriever struct {
// contains filtered or unexported fields
}
AdaptiveRetriever 自适应检索器 根据查询的复杂度和类型,自动调整检索策略
func NewAdaptiveRetriever ¶
func NewAdaptiveRetriever(opts ...AdaptiveOption) *AdaptiveRetriever
NewAdaptiveRetriever 创建自适应检索器
type DocumentStore ¶
type DocumentStore struct {
// contains filtered or unexported fields
}
DocumentStore 简单的文档存储 用于存储父文档
type HyDEOption ¶
type HyDEOption func(*HyDERetriever)
HyDEOption HyDE 检索器选项
func WithHyDEMergeStrategy ¶
func WithHyDEMergeStrategy(strategy VectorMergeStrategy) HyDEOption
WithHyDEMergeStrategy 设置向量合并策略
func WithHyDENumHypothetical ¶
func WithHyDENumHypothetical(n int) HyDEOption
WithHyDENumHypothetical 设置生成的假设文档数量
func WithHyDEPrompt ¶
func WithHyDEPrompt(prompt string) HyDEOption
WithHyDEPrompt 设置假设文档生成的提示词模板 模板中 %s 会被替换为用户查询
func WithHyDETemperature ¶
func WithHyDETemperature(temp float64) HyDEOption
WithHyDETemperature 设置 LLM 采样温度 较高温度(0.7-1.0)生成更多样化的假设文档
type HyDERetriever ¶
type HyDERetriever struct {
// contains filtered or unexported fields
}
HyDERetriever HyDE 假设文档检索器 核心流程:
- 用户查询 → LLM 生成 N 个假设文档
- 假设文档 → 向量化
- 假设文档向量 → 检索真实文档
- 去重排序 → 返回结果
func NewHyDERetriever ¶
func NewHyDERetriever(llmProvider llm.Provider, embedder vector.Embedder, store vector.Store, opts ...HyDEOption) *HyDERetriever
NewHyDERetriever 创建 HyDE 检索器
参数:
- llmProvider: LLM 提供者,用于生成假设文档
- embedder: 向量生成器,将假设文档转为向量
- store: 向量存储,用于检索真实文档
- opts: 可选配置
type HybridRetriever ¶
type HybridRetriever struct {
// contains filtered or unexported fields
}
HybridRetriever 混合检索器 结合向量检索和关键词检索的结果
func NewHybridRetriever ¶
func NewHybridRetriever(vectorRet, keywordRet rag.Retriever, opts ...HybridOption) *HybridRetriever
NewHybridRetriever 创建混合检索器
type IndexNode ¶
type IndexNode struct {
// ID 节点 ID
ID string `json:"id"`
// Type 节点类型
Type NodeType `json:"type"`
// Content 节点内容
Content string `json:"content"`
// Children 子节点 ID 列表
Children []string `json:"children,omitempty"`
// Parent 父节点 ID
Parent string `json:"parent,omitempty"`
// Metadata 元数据
Metadata map[string]any `json:"metadata,omitempty"`
// Embedding 节点向量(如果有)
Embedding []float32 `json:"embedding,omitempty"`
// Score 检索分数(仅在检索结果中有效)
Score float32 `json:"score,omitempty"`
}
IndexNode 索引节点 用于构建层级文档结构,支持多跳检索
type KeywordRetriever ¶
type KeywordRetriever struct {
// contains filtered or unexported fields
}
KeywordRetriever 关键词检索器
func NewKeywordRetriever ¶
func NewKeywordRetriever(docs []rag.Document, opts ...KeywordOption) *KeywordRetriever
NewKeywordRetriever 创建关键词检索器
func (*KeywordRetriever) AddDocuments ¶
func (r *KeywordRetriever) AddDocuments(docs []rag.Document)
AddDocuments 添加文档
type MultiRetriever ¶
type MultiRetriever struct {
// contains filtered or unexported fields
}
MultiRetriever 多源检索器 从多个检索器获取结果并聚合
func NewMultiRetriever ¶
func NewMultiRetriever(retrievers []rag.Retriever, opts ...MultiOption) *MultiRetriever
NewMultiRetriever 创建多源检索器
type NodeIndex ¶
type NodeIndex struct {
// contains filtered or unexported fields
}
NodeIndex 节点索引存储
func (*NodeIndex) GetChildren ¶
GetChildren 获取子节点
func (*NodeIndex) GetLeafNodes ¶
GetLeafNodes 获取所有叶子节点
type NodeType ¶
type NodeType string
NodeType 索引节点类型
const ( // NodeTypeChunk 文本块节点(叶子节点) NodeTypeChunk NodeType = "chunk" // NodeTypeIndex 索引节点(中间节点,指向其他节点) NodeTypeIndex NodeType = "index" // NodeTypeSummary 摘要节点(包含子节点内容的摘要) NodeTypeSummary NodeType = "summary" // NodeTypeTable 表格节点(结构化数据) NodeTypeTable NodeType = "table" // NodeTypeImage 图片节点 NodeTypeImage NodeType = "image" )
type ParentDocOption ¶
type ParentDocOption func(*ParentDocRetriever)
ParentDocOption ParentDocRetriever 配置选项
func WithChildSplitter ¶
func WithChildSplitter(splitter rag.Splitter) ParentDocOption
WithChildSplitter 设置子文档分割器
func WithParentMinScore ¶
func WithParentMinScore(score float32) ParentDocOption
WithParentMinScore 设置最小相关性分数
func WithParentStore ¶
func WithParentStore(store *DocumentStore) ParentDocOption
WithParentStore 设置父文档存储(可用于持久化)
type ParentDocRetriever ¶
type ParentDocRetriever struct {
// contains filtered or unexported fields
}
ParentDocRetriever 父子文档检索器 子文档用于精确匹配,返回父文档提供完整上下文
工作原理:
- 索引时:将原始文档保存为父文档,分割成子块后存入向量存储
- 检索时:用子块进行向量检索,找到相关子块后返回对应的父文档
- 优势:子块用于精确语义匹配,父文档提供更完整的上下文
参考 LlamaIndex 的 ParentDocumentRetriever 设计
使用示例:
retriever := NewParentDocRetriever(
vectorStore, embedder,
WithChildSplitter(splitter.NewRecursiveSplitter(200, 50)),
WithParentTopK(5),
)
// 索引文档
retriever.Index(ctx, docs)
// 检索
parentDocs, err := retriever.Retrieve(ctx, "query")
func NewParentDocRetriever ¶
func NewParentDocRetriever(childStore vector.Store, embedder vector.Embedder, opts ...ParentDocOption) *ParentDocRetriever
NewParentDocRetriever 创建父子文档检索器
参数:
- childStore: 子文档向量存储
- embedder: 向量嵌入器
- opts: 配置选项
func (*ParentDocRetriever) Clear ¶
func (r *ParentDocRetriever) Clear(ctx context.Context) error
Clear 清空所有文档
func (*ParentDocRetriever) Count ¶
func (r *ParentDocRetriever) Count(ctx context.Context) (int, error)
Count 返回父文档数量
func (*ParentDocRetriever) Delete ¶
func (r *ParentDocRetriever) Delete(ctx context.Context, ids []string) error
Delete 删除文档(包括父文档和所有子块)
func (*ParentDocRetriever) GetParentStore ¶
func (r *ParentDocRetriever) GetParentStore() *DocumentStore
GetParentStore 获取父文档存储(用于序列化/持久化)
type QueryClassification ¶
type QueryClassification struct {
// Complexity 查询复杂度
Complexity QueryComplexity
// Type 查询类型
Type QueryType
// Keywords 提取的关键词
Keywords []string
// Score 置信度 (0-1)
Score float64
}
QueryClassification 查询分类结果
type QueryClassifier ¶
type QueryClassifier interface {
// Classify 对查询进行分类
Classify(ctx context.Context, query string) (*QueryClassification, error)
}
QueryClassifier 查询分类器接口
type QueryComplexity ¶
type QueryComplexity int
QueryComplexity 查询复杂度
const ( // ComplexitySimple 简单查询(关键词、短问题) ComplexitySimple QueryComplexity = iota // ComplexityModerate 中等复杂度(需要一些推理) ComplexityModerate // ComplexityComplex 复杂查询(多实体、多步推理) ComplexityComplex )
type RecursiveOption ¶
type RecursiveOption func(*RecursiveRetriever)
RecursiveOption RecursiveRetriever 配置选项
func WithExpandAll ¶
func WithExpandAll(expand bool) RecursiveOption
WithExpandAll 设置是否展开所有子节点 默认: false(选择性展开)
func WithIncludeIntermediateNodes ¶
func WithIncludeIntermediateNodes(include bool) RecursiveOption
WithIncludeIntermediateNodes 设置是否包含中间节点在结果中 默认: false(只返回叶子节点)
func WithRecursiveMinScore ¶
func WithRecursiveMinScore(score float32) RecursiveOption
WithRecursiveMinScore 设置最小相关性分数
func WithRecursiveTopK ¶
func WithRecursiveTopK(k int) RecursiveOption
WithRecursiveTopK 设置每层返回的节点数量 默认值: 5
type RecursiveRetriever ¶
type RecursiveRetriever struct {
// contains filtered or unexported fields
}
RecursiveRetriever 递归/多跳检索器 支持层级文档结构的递归检索
工作原理:
- 从根索引节点开始搜索
- 根据查询选择相关的子节点
- 递归深入直到到达叶子节点(实际内容)
- 可选使用 LLM 判断是否需要继续深入
适用场景:
- 层级文档(如书籍章节、目录结构)
- 多步推理检索
- 复杂问题分解
使用示例:
retriever := NewRecursiveRetriever(
vectorStore, embedder, nodeIndex,
WithMaxDepth(3),
WithRecursiveTopK(5),
)
docs, err := retriever.Retrieve(ctx, "query")
func NewRecursiveRetriever ¶
func NewRecursiveRetriever(store vector.Store, embedder vector.Embedder, nodeIndex *NodeIndex, opts ...RecursiveOption) *RecursiveRetriever
NewRecursiveRetriever 创建递归检索器
参数:
- store: 向量存储
- embedder: 向量嵌入器
- nodeIndex: 节点索引
- opts: 配置选项
func (*RecursiveRetriever) Clear ¶
func (r *RecursiveRetriever) Clear(ctx context.Context) error
Clear 清空所有数据
func (*RecursiveRetriever) GetNodeIndex ¶
func (r *RecursiveRetriever) GetNodeIndex() *NodeIndex
GetNodeIndex 获取节点索引
func (*RecursiveRetriever) IndexNodes ¶
func (r *RecursiveRetriever) IndexNodes(ctx context.Context, nodes []*IndexNode) error
IndexNodes 索引节点到向量存储
type Reranker ¶
type Reranker interface {
Rerank(ctx context.Context, query string, docs []rag.Document) ([]rag.Document, error)
}
Reranker 重排序器接口
type RerankerOption ¶
type RerankerOption func(*RerankerRetriever)
RerankerOption RerankerRetriever 选项
type RerankerRetriever ¶
type RerankerRetriever struct {
// contains filtered or unexported fields
}
RerankerRetriever 带重排序的检索器
func NewRerankerRetriever ¶
func NewRerankerRetriever(retriever rag.Retriever, reranker Reranker, opts ...RerankerOption) *RerankerRetriever
NewRerankerRetriever 创建带重排序的检索器
type RetrievalStrategy ¶
type RetrievalStrategy struct {
// TopK 返回文档数量
TopK int
// MinScore 最低相关性分数
MinScore float32
// UseReranker 是否启用重排序
UseReranker bool
// MultiQuery 是否启用多查询扩展
MultiQuery bool
// RetrieverName 使用的检索器名称
RetrieverName string
}
RetrievalStrategy 检索策略
type RuleClassifier ¶
type RuleClassifier struct {
// contains filtered or unexported fields
}
RuleClassifier 基于规则的查询分类器
func (*RuleClassifier) Classify ¶
func (c *RuleClassifier) Classify(_ context.Context, query string) (*QueryClassification, error)
Classify 使用规则分类查询
type VectorMergeStrategy ¶
type VectorMergeStrategy int
VectorMergeStrategy 假设文档向量合并策略
const ( // MergeAverage 对所有假设文档的向量取平均值 // 适用于假设文档质量较均匀的场景 MergeAverage VectorMergeStrategy = iota // MergeSearchAll 分别用每个假设文档向量检索,然后聚合去重 // 适用于需要更多样化结果的场景 MergeSearchAll )
type VectorRetriever ¶
type VectorRetriever struct {
// contains filtered or unexported fields
}
VectorRetriever 向量检索器
func NewVectorRetriever ¶
func NewVectorRetriever(store vector.Store, embedder vector.Embedder, opts ...VectorOption) *VectorRetriever
NewVectorRetriever 创建向量检索器