跳到主要内容

aireducer

aireducer 库用于把大文本/大文件按块(chunk)切分,并对每一块逐步执行回调——这正是 "reduce" 的含义。它常用于配合 AI:把超长内容分段喂给模型处理(如逐段摘要、逐段分析),避免一次性超出上下文长度限制。

典型使用场景:

  • 直接处理数据源:aireducer.File / aireducer.Reader / aireducer.String 传入文件名、io.Reader 或字符串,并给一个 func(chunk) 回调,库会自动分块并逐块回调。
  • 构建可复用 Reducer:aireducer.NewReducerFromFile / NewReducerFromReader / NewReducerFromString 返回 *Reducer 句柄按需驱动。
  • 切分策略:aireducer.chunkSize 按字节大小、aireducer.lines 按行数、aireducer.separator / aireducer.separatorAsBoundary 按分隔符切块;aireducer.timeTriggerInterval 支持按时间触发;aireducer.memory 接入上下文记忆。

与相邻库的关系:aireducer 是"分块器",处理后的每块通常交给 ai 做模型调用、或交给 rag 做入库与检索,是处理超长素材的 AI 预处理工具。

共 17 个函数

可变参数函数索引

函数参数返回值说明
aireducer.Filefilename string, callback func(chunk chunkmaker.Chunk), options ...Optionerror读取文件内容并按配置切分为 chunk,对每个 chunk 调用回调(导出名为 aireducer.File)
aireducer.NewReducerFromFilefilename string, opts ...Option*Reducer, error基于文件创建一个 reducer 对象(导出名为 aireducer.NewReducerFromFile)
aireducer.NewReducerFromReaderr io.Reader, opts ...Option*Reducer, error基于 io.Reader 创建一个 reducer 对象(导出名为 aireducer.NewReducerFromReader)
aireducer.NewReducerFromStringi string, opts ...Option*Reducer, error基于字符串创建一个 reducer 对象(导出名为 aireducer.NewReducerFromString)
aireducer.Readeri io.Reader, callback func(chunk chunkmaker.Chunk), options ...Optionerror从 io.Reader 读取数据并按配置切分为 chunk,对每个 chunk 调用回调(导出名为 aireducer.Reader)
aireducer.Strings string, callback func(chunk chunkmaker.Chunk), options ...Optionerror将字符串按配置切分为 chunk,对每个 chunk 调用回调(导出名为 aireducer.String)

可变参数函数详情

File

File(filename string, callback func(chunk chunkmaker.Chunk), options ...Option) error

读取文件内容并按配置切分为 chunk,对每个 chunk 调用回调(导出名为 aireducer.File)

必填参数

参数名类型说明
filenamestring文件路径
callbackfunc(chunk chunkmaker.Chunk)每生成一个 chunk 触发的回调,参数为 chunk 对象

可选参数

可作为可变参数 options ...Option 传入选项;共 11 个可用选项,详见 Option 选项列表

返回值

序号类型说明
r1error错误信息

示例

// 按 1024 字节切分文件并逐块处理(示意性示例,需替换为真实文件路径)

aireducer.File("/tmp/example.txt", func(chunk) {
println(string(chunk.Data()))
}, aireducer.chunkSize(1024))~

NewReducerFromFile

NewReducerFromFile(filename string, opts ...Option) (*Reducer, error)

基于文件创建一个 reducer 对象(导出名为 aireducer.NewReducerFromFile)

创建后需通过 Run 启动,通常配合 aireducer.callback 设置 chunk 回调

必填参数

参数名类型说明
filenamestring文件路径

可选参数

可作为可变参数 opts ...Option 传入选项;共 11 个可用选项,详见 Option 选项列表

返回值

序号类型说明
r1*Reducerreducer 对象
r2error错误信息

示例

// 按行切分文件并逐块处理(示意性示例,需替换为真实文件路径)

reducer = aireducer.NewReducerFromFile("/tmp/example.txt", aireducer.lines(10), aireducer.callback(func(config, memory, chunk) {
println(string(chunk.Data()))
}))~

reducer.Run()

NewReducerFromReader

NewReducerFromReader(r io.Reader, opts ...Option) (*Reducer, error)

基于 io.Reader 创建一个 reducer 对象(导出名为 aireducer.NewReducerFromReader)

创建后需通过 Run 启动,通常配合 aireducer.callback 设置 chunk 回调

必填参数

参数名类型说明
rio.Reader数据来源 reader

可选参数

可作为可变参数 opts ...Option 传入选项;共 11 个可用选项,详见 Option 选项列表

返回值

序号类型说明
r1*Reducerreducer 对象
r2error错误信息

示例

count = 0
reader = str.NewReader("aaaaabbbbbccccc")
reducer = aireducer.NewReducerFromReader(reader, aireducer.chunkSize(5), aireducer.callback(func(config, memory, chunk) { count++ }))~
reducer.Run()
println(count) // OUT: 3

NewReducerFromString

NewReducerFromString(i string, opts ...Option) (*Reducer, error)

基于字符串创建一个 reducer 对象(导出名为 aireducer.NewReducerFromString)

创建后需通过 Run 启动,通常配合 aireducer.callback 设置 chunk 回调

必填参数

参数名类型说明
istring输入字符串

可选参数

可作为可变参数 opts ...Option 传入选项;共 11 个可用选项,详见 Option 选项列表

返回值

序号类型说明
r1*Reducerreducer 对象
r2error错误信息

示例

count = 0
reducer = aireducer.NewReducerFromString("aaaaabbbbbccccc", aireducer.chunkSize(5), aireducer.callback(func(config, memory, chunk) { count++ }))~
reducer.Run()
println(count) // OUT: 3

Reader

Reader(i io.Reader, callback func(chunk chunkmaker.Chunk), options ...Option) error

从 io.Reader 读取数据并按配置切分为 chunk,对每个 chunk 调用回调(导出名为 aireducer.Reader)

必填参数

参数名类型说明
iio.Reader数据来源 reader
callbackfunc(chunk chunkmaker.Chunk)每生成一个 chunk 触发的回调,参数为 chunk 对象

可选参数

可作为可变参数 options ...Option 传入选项;共 11 个可用选项,详见 Option 选项列表

返回值

序号类型说明
r1error错误信息

示例

count = 0
reader = str.NewReader("aaaaabbbbbccccc")
aireducer.Reader(reader, func(chunk) { count++ }, aireducer.chunkSize(5))~
println(count) // OUT: 3

String

String(s string, callback func(chunk chunkmaker.Chunk), options ...Option) error

将字符串按配置切分为 chunk,对每个 chunk 调用回调(导出名为 aireducer.String)

必填参数

参数名类型说明
sstring输入字符串
callbackfunc(chunk chunkmaker.Chunk)每生成一个 chunk 触发的回调,参数为 chunk 对象

可选参数

可作为可变参数 options ...Option 传入选项;共 11 个可用选项,详见 Option 选项列表

返回值

序号类型说明
r1error错误信息

示例

count = 0
aireducer.String("aaaaabbbbbccccc", func(chunk) { count++ }, aireducer.chunkSize(5))~
println(count) // OUT: 3

可变参数选项列表

以下按选项类型汇总全部可变参数选项(原先重复在各主函数下的选项表已收拢到此处):

1. 类型:Option

涉及到的函数有:aireducer.Fileaireducer.NewReducerFromFileaireducer.NewReducerFromReaderaireducer.NewReducerFromStringaireducer.Readeraireducer.String

选项函数参数返回值说明
aireducer.callbackcallback ReducerCallbackTypeOptionWithReducerCallback 设置 chunk 处理回调
aireducer.chunkSizesize int64OptionWithChunkSize 设置每个 chunk 的最大字节数
aireducer.contextctx context.ContextOptionWithContext 设置 reducer 运行的上下文,用于控制取消
aireducer.lineNumberenable boolOptionWithEnableLineNumber enables line number prefixing for chunk content.
aireducer.lineslines intOptionWithLines sets the line trigger for chunking. When set to a positive value,
aireducer.memorymemory *aid.PromptContextProviderOptionWithMemory 设置 reducer 使用的记忆/上下文提供者
aireducer.reducerCallbackcallback ReducerCallbackTypeOptionWithReducerCallback 设置 chunk 处理回调
aireducer.separatorseparator stringOptionWithSeparatorTrigger 设置切分分隔符,遇到分隔符即触发一个 chunk
aireducer.separatorAsBoundaryasBoundary boolOptionWithSeparatorAsBoundary switches the separator semantics from "trigger every
aireducer.timeTriggerIntervalinterval time.DurationOptionWithTimeTriggerInterval 设置基于时间的 chunk 触发间隔
aireducer.timeTriggerIntervalSecondsseconds float64OptionWithTimeTriggerIntervalSeconds 以秒为单位设置基于时间的 chunk 触发间隔