router

package
v0.5.11 Latest Latest
Warning

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

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

Documentation

Overview

Package router 提供 RAG 系统的查询路由器

QueryRouter 根据查询内容自动选择最合适的检索策略,支持:

  • 基于规则的路由:使用关键词匹配和正则表达式
  • 基于 LLM 的路由:让 LLM 分析查询并选择最佳检索器
  • 基于嵌入的路由:通过语义相似度匹配到预设类别

使用示例:

router := NewQueryRouter(
    WithRoute("vector", vectorRetriever, "语义相关的问题"),
    WithRoute("keyword", keywordRetriever, "精确搜索"),
    WithRoute("sql", sqlRetriever, "数据查询"),
)
docs, err := router.Retrieve(ctx, "最近的销售数据是多少?")

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type MultiRouter

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

MultiRouter 多路由器,将查询分发到多个检索器并合并结果

func NewMultiRouter

func NewMultiRouter(mergeTop int, routers ...*QueryRouter) *MultiRouter

NewMultiRouter 创建多路由器

func (*MultiRouter) Retrieve

func (m *MultiRouter) Retrieve(ctx context.Context, query string, opts ...rag.RetrieveOption) ([]rag.Document, error)

Retrieve 并发检索并合并去重

type QueryRouter

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

QueryRouter 查询路由器 根据查询内容自动选择最合适的检索策略

func NewQueryRouter

func NewQueryRouter(opts ...RouterOption) *QueryRouter

NewQueryRouter 创建查询路由器

func (*QueryRouter) Retrieve

func (r *QueryRouter) Retrieve(ctx context.Context, query string, opts ...rag.RetrieveOption) ([]rag.Document, error)

Retrieve 根据查询自动路由到合适的检索器

func (*QueryRouter) SelectRoute

func (r *QueryRouter) SelectRoute(ctx context.Context, query string) (string, error)

Route 返回选中的路由名称(不执行检索)

type Route

type Route struct {
	// Name 路由名称
	Name string

	// Retriever 关联的检索器
	Retriever rag.Retriever

	// Description 路由描述(用于 LLM 路由判断)
	Description string

	// Keywords 关键词列表(用于规则路由)
	Keywords []string

	// Patterns 正则表达式模式(用于规则路由)
	Patterns []*regexp.Regexp

	// Priority 优先级(数值越小优先级越高)
	Priority int
}

Route 路由规则

type RouterMode

type RouterMode int

RouterMode 路由模式

const (
	// ModeRule 基于规则的路由
	ModeRule RouterMode = iota

	// ModeLLM 基于 LLM 的路由
	ModeLLM

	// ModeHybrid 混合路由(先规则后 LLM 兜底)
	ModeHybrid
)

type RouterOption

type RouterOption func(*QueryRouter)

RouterOption 路由器配置选项

func WithFallback

func WithFallback(retriever rag.Retriever) RouterOption

WithFallback 设置兜底检索器

func WithRoute

func WithRoute(name string, retriever rag.Retriever, description string) RouterOption

WithRoute 添加路由规则

func WithRouteKeywords

func WithRouteKeywords(name string, retriever rag.Retriever, description string, keywords []string) RouterOption

WithRouteKeywords 添加带关键词的路由规则

func WithRoutePatterns

func WithRoutePatterns(name string, retriever rag.Retriever, description string, patterns []string) RouterOption

WithRoutePatterns 添加带正则的路由规则

func WithRouterLLM

func WithRouterLLM(provider llm.Provider, model string) RouterOption

WithRouterLLM 设置 LLM 路由的 Provider

func WithRouterMode

func WithRouterMode(mode RouterMode) RouterOption

WithRouterMode 设置路由模式

Jump to

Keyboard shortcuts

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