Documentation
¶
Overview ¶
Package splitter 提供 RAG 系统的文档分割器
code.go 实现代码感知分割器,能够根据编程语言的语法结构进行智能分割。 支持的语言:Go、Python、JavaScript/TypeScript、Java、Rust、C/C++、Ruby、PHP
核心特性:
- 按函数/方法/类级别分割,保持代码逻辑完整性
- 自动检测编程语言
- 保留导入语句和包声明上下文
- 每个分块包含必要的上下文信息
使用示例:
splitter := NewCodeSplitter(
WithLanguage(LangGo),
WithCodeChunkSize(2000),
)
chunks, err := splitter.Split(ctx, docs)
search_tokenize.go 搜索查询分词器
为全文检索(FTS5 / LIKE 降级)提供 CJK 友好的查询分词。
与 SimpleTokenizer.tokenize() 的区别:
- SimpleTokenizer: 面向 token 计数(CJK 每字一个 token),用于分块估算
- SearchTokenize: 面向搜索匹配(CJK bigram + 原词保留),用于构建搜索查询
CJK bigram 策略参考:
- Elasticsearch CJK bigram token filter
- Lucene CJKBigramFilter
- SQLite FTS5 + unicode61 tokenizer 的中文检索最佳实践
示例:
SearchTokenize("杭帮菜的正确吃法")
→ ["杭帮", "帮菜", "菜的", "的正", "正确", "确吃", "吃法", "杭帮菜的正确吃法"]
SearchTokenize("hello world 你好世界")
→ ["hello", "world", "你好", "好世", "世界", "你好世界"]
Package splitter 提供 RAG 系统的文档分割器 ¶
Splitter 用于将长文档分割成适合向量化的小块:
- CharacterSplitter: 按字符数分割
- RecursiveSplitter: 递归分割(优先保持语义完整)
- MarkdownSplitter: Markdown 专用分割(按标题分割)
- SentenceSplitter: 按句子分割
Package splitter 提供 RAG 系统的文档分割器 ¶
token.go 实现 Token 级分割器:
- TokenSplitter: 按模型 Token 数而非字符数分割
- Tokenizer: 分词器接口,支持 tiktoken/sentencepiece 等
- SimpleTokenizer: 基于空格/标点的简单分词器
- TiktokenTokenizer: 对接 OpenAI tiktoken 的分词器
对标 LangChain/LlamaIndex 的 Token-based Splitting。
使用示例:
// 使用简单分词器(无外部依赖)
splitter := NewTokenSplitter(
WithTokenChunkSize(512),
WithTokenOverlap(50),
WithTokenizer(NewSimpleTokenizer()),
)
// 使用 tiktoken(精确按 GPT 模型 token 分割)
splitter := NewTokenSplitter(
WithTokenChunkSize(512),
WithTokenizer(NewTiktokenTokenizer("gpt-4")),
)
docs, err := splitter.Split(ctx, inputDocs)
Index ¶
- func IsCJK(r rune) bool
- func SearchTokenize(text string) []string
- type CharacterOption
- type CharacterSplitter
- type CodeOption
- type CodeSplitter
- type Embedder
- type Language
- type MarkdownSplitter
- type MarkdownSplitterOption
- type RecursiveOption
- type RecursiveSplitter
- type SemanticOption
- type SemanticSplitter
- type SentenceOption
- type SentenceSplitter
- type SimpleTokenizer
- type SimpleTokenizerOption
- type TiktokenTokenizer
- type TokenSplitter
- type TokenSplitterOption
- type Tokenizer
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func SearchTokenize ¶
SearchTokenize 将搜索查询文本分词为适合全文检索的 token 列表
策略:
- 按空格和标点分割为词组
- 纯 CJK 词组做 bigram 切分(保留原词用于精确匹配)
- 非 CJK 词组保留原样
- 过滤过短的 token(< 2 字符)
- 去重
Types ¶
type CharacterOption ¶
type CharacterOption func(*CharacterSplitter)
CharacterOption CharacterSplitter 选项
type CharacterSplitter ¶
type CharacterSplitter struct {
// contains filtered or unexported fields
}
CharacterSplitter 按字符数分割
func NewCharacterSplitter ¶
func NewCharacterSplitter(opts ...CharacterOption) *CharacterSplitter
NewCharacterSplitter 创建字符分割器
type CodeOption ¶
type CodeOption func(*CodeSplitter)
CodeOption CodeSplitter 配置选项
func WithCodeChunkOverlap ¶
func WithCodeChunkOverlap(overlap int) CodeOption
WithCodeChunkOverlap 设置代码分块重叠
type CodeSplitter ¶
type CodeSplitter struct {
// contains filtered or unexported fields
}
CodeSplitter 代码感知分割器 根据编程语言的语法结构进行智能分割,保持代码逻辑完整性
func NewCodeSplitter ¶
func NewCodeSplitter(opts ...CodeOption) *CodeSplitter
NewCodeSplitter 创建代码感知分割器
type Language ¶
type Language int
Language 编程语言类型
const ( // LangAuto 自动检测语言 LangAuto Language = iota // LangGo Go 语言 LangGo // LangPython Python 语言 LangPython // LangJavaScript JavaScript 语言 LangJavaScript // LangTypeScript TypeScript 语言 LangTypeScript // LangJava Java 语言 LangJava // LangRust Rust 语言 LangRust // LangCPP C/C++ 语言 LangCPP // LangRuby Ruby 语言 LangRuby // LangPHP PHP 语言 LangPHP )
type MarkdownSplitter ¶
type MarkdownSplitter struct {
// contains filtered or unexported fields
}
MarkdownSplitter Markdown 专用分割器 按标题层级分割,保持文档结构
func NewMarkdownSplitter ¶
func NewMarkdownSplitter(opts ...MarkdownSplitterOption) *MarkdownSplitter
NewMarkdownSplitter 创建 Markdown 分割器
type MarkdownSplitterOption ¶
type MarkdownSplitterOption func(*MarkdownSplitter)
MarkdownSplitterOption MarkdownSplitter 选项
func WithCodeBlockAware ¶
func WithCodeBlockAware(aware bool) MarkdownSplitterOption
WithCodeBlockAware 设置是否识别代码块
func WithHeadersToSplit ¶
func WithHeadersToSplit(headers []string) MarkdownSplitterOption
WithHeadersToSplit 设置要分割的标题级别
func WithMarkdownChunkOverlap ¶
func WithMarkdownChunkOverlap(overlap int) MarkdownSplitterOption
WithMarkdownChunkOverlap 设置分块重叠
func WithMarkdownChunkSize ¶
func WithMarkdownChunkSize(size int) MarkdownSplitterOption
WithMarkdownChunkSize 设置分块大小
type RecursiveOption ¶
type RecursiveOption func(*RecursiveSplitter)
RecursiveOption RecursiveSplitter 选项
func WithRecursiveChunkOverlap ¶
func WithRecursiveChunkOverlap(overlap int) RecursiveOption
WithRecursiveChunkOverlap 设置分块重叠
func WithRecursiveChunkSize ¶
func WithRecursiveChunkSize(size int) RecursiveOption
WithRecursiveChunkSize 设置分块大小
func WithSeparators ¶
func WithSeparators(seps []string) RecursiveOption
WithSeparators 设置分隔符列表(按优先级)
type RecursiveSplitter ¶
type RecursiveSplitter struct {
// contains filtered or unexported fields
}
RecursiveSplitter 递归分割器 按照分隔符优先级递归分割,尽量保持语义完整
func NewRecursiveSplitter ¶
func NewRecursiveSplitter(opts ...RecursiveOption) *RecursiveSplitter
NewRecursiveSplitter 创建递归分割器
type SemanticOption ¶
type SemanticOption func(*SemanticSplitter)
SemanticOption SemanticSplitter 选项
func WithSemanticBreakpointThreshold ¶
func WithSemanticBreakpointThreshold(threshold float64) SemanticOption
WithSemanticBreakpointThreshold 设置断点阈值
func WithSemanticBufferSize ¶
func WithSemanticBufferSize(size int) SemanticOption
WithSemanticBufferSize 设置句子缓冲区大小
func WithSemanticMaxChunkSize ¶
func WithSemanticMaxChunkSize(size int) SemanticOption
WithSemanticMaxChunkSize 设置最大块大小
func WithSemanticMinChunkSize ¶
func WithSemanticMinChunkSize(size int) SemanticOption
WithSemanticMinChunkSize 设置最小块大小
func WithSemanticSentenceEnds ¶
func WithSemanticSentenceEnds(ends []string) SemanticOption
WithSemanticSentenceEnds 设置句子结束符
type SemanticSplitter ¶
type SemanticSplitter struct {
// contains filtered or unexported fields
}
SemanticSplitter 语义分割器 基于 embedding 相似度进行智能分割,在语义边界处分割文档
func NewSemanticSplitter ¶
func NewSemanticSplitter(embedder Embedder, opts ...SemanticOption) *SemanticSplitter
NewSemanticSplitter 创建语义分割器
type SentenceOption ¶
type SentenceOption func(*SentenceSplitter)
SentenceOption SentenceSplitter 选项
func WithSentenceChunkOverlap ¶
func WithSentenceChunkOverlap(overlap int) SentenceOption
WithSentenceChunkOverlap 设置分块重叠
func WithSentenceChunkSize ¶
func WithSentenceChunkSize(size int) SentenceOption
WithSentenceChunkSize 设置分块大小
func WithSentenceEnds ¶
func WithSentenceEnds(ends []string) SentenceOption
WithSentenceEnds 设置句子结束符
type SentenceSplitter ¶
type SentenceSplitter struct {
// contains filtered or unexported fields
}
SentenceSplitter 按句子分割
func NewSentenceSplitter ¶
func NewSentenceSplitter(opts ...SentenceOption) *SentenceSplitter
NewSentenceSplitter 创建句子分割器
type SimpleTokenizer ¶
type SimpleTokenizer struct {
// contains filtered or unexported fields
}
SimpleTokenizer 基于空格和标点的简单分词器 不需要外部依赖,适合中英文混合文本 估算规则:英文约 1 词 = 1.3 token,中文约 1 字 = 1.5 token
func NewSimpleTokenizer ¶
func NewSimpleTokenizer(opts ...SimpleTokenizerOption) *SimpleTokenizer
NewSimpleTokenizer 创建简单分词器
func (*SimpleTokenizer) CountTokens ¶
func (t *SimpleTokenizer) CountTokens(text string) int
CountTokens 计算 token 数
func (*SimpleTokenizer) Encode ¶
func (t *SimpleTokenizer) Encode(text string) []int
Encode 简单编码(分词为 token)
type SimpleTokenizerOption ¶
type SimpleTokenizerOption func(*SimpleTokenizer)
SimpleTokenizerOption 简单分词器选项
func WithAvgTokenLength ¶
func WithAvgTokenLength(length float64) SimpleTokenizerOption
WithAvgTokenLength 设置平均 token 长度
type TiktokenTokenizer ¶
type TiktokenTokenizer struct {
// contains filtered or unexported fields
}
TiktokenTokenizer 基于 tiktoken 的分词器 使用按字符类型差异化的 token 比率进行估算。 无实际 BPE 词表,Encode 降级为 fallback 编码。 如需精确分词,建议集成 Go 原生 tiktoken 库。
func NewTiktokenTokenizer ¶
func NewTiktokenTokenizer(model string) *TiktokenTokenizer
NewTiktokenTokenizer 创建 tiktoken 分词器 根据模型名自动选择合适的 token 比率
func (*TiktokenTokenizer) CountTokens ¶
func (t *TiktokenTokenizer) CountTokens(text string) int
CountTokens 按字符类型差异化估算 token 数 逐字符分类(ASCII 词、CJK、数字、标点、空白),乘以对应比率
func (*TiktokenTokenizer) Decode ¶
func (t *TiktokenTokenizer) Decode(tokens []int) string
Decode 解码
func (*TiktokenTokenizer) Encode ¶
func (t *TiktokenTokenizer) Encode(text string) []int
Encode 编码(降级为 fallback,无实际 BPE 词表)
type TokenSplitter ¶
type TokenSplitter struct {
// contains filtered or unexported fields
}
TokenSplitter 基于 Token 的文档分割器 使用分词器精确按 token 数量分割,而非按字符数
func NewTokenSplitter ¶
func NewTokenSplitter(opts ...TokenSplitterOption) *TokenSplitter
NewTokenSplitter 创建 Token 级分割器
type TokenSplitterOption ¶
type TokenSplitterOption func(*TokenSplitter)
TokenSplitterOption TokenSplitter 选项
func WithTokenChunkSize ¶
func WithTokenChunkSize(size int) TokenSplitterOption
WithTokenChunkSize 设置分块大小(token 数)
func WithTokenOverlap ¶
func WithTokenOverlap(overlap int) TokenSplitterOption
WithTokenOverlap 设置重叠大小(token 数)
func WithTokenSeparator ¶
func WithTokenSeparator(sep string) TokenSplitterOption
WithTokenSeparator 设置首选分割点
func WithTokenizerOpt ¶
func WithTokenizerOpt(tokenizer Tokenizer) TokenSplitterOption
WithTokenizer 设置分词器