Eino框架学习

概述

Eino提供了一整套的大模型编排使用所需要的组件

组件名 组件功能
ChatModel 与大模型交互,输入 Message 上下文,得到模型的输出 Message
Tool 与世界交互,根据模型的输出,执行对应的动作
Retriever 获取相关的上下文,让模型的输出基于高质量的事实
ChatTemplate 接收外界输入,转化成预设格式的 prompt 交给模型
Document Loader 加载指定的文本
Document Transformer 按照特定规则转化指定的文本
Indexer 存储文件并建立索引,供后续 Retriever 使用
Embedding Retriever 和 Indexer 的共同依赖,文本转向量,捕获文本语义
Lambda 用户定制 function

提供了相应的编排方式

编排方式 特点和场景
Chain 链式有向图,始终向前,简单。适合数据单向流动,没有复杂分支的场景。
Graph 有向图,有最大的灵活性;或有向无环图,不支持分支,但有清晰的祖先关系。

Embedding使用

https://www.cloudwego.io/zh/docs/eino/core_modules/components/embedding_guide/

Embedder就是一个将文本转化为向量的组件

需要根据官方的介绍来调用不同接口实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ctx := context.Background()

// 创建 embedder 配置
// 这里我使用腾讯云,因为pgvector不支持2000维度以上的向量索引
cfg := &tencentcloud.EmbeddingConfig{
SecretID: "J",
SecretKey: "",
}

// 创建 embedder
embedder, err := tencentcloud.NewEmbedder(ctx, cfg)
if err != nil {
panic(err)
}

Loader使用

Loader就是提供了一个加载文档的组件

需要配合Transformer对文档进行处理后使用

https://www.cloudwego.io/zh/docs/eino/core_modules/components/document_loader_guide/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 初始化 loader
loader, _ := file.NewFileLoader(ctx, &file.FileLoaderConfig{
UseNameAsID: true,
})
// 加载文档
docs, err := loader.Load(ctx, document.Source{
URI: "document/test.md",
})
if err != nil {
log.Fatalf("加载文档失败: %v", err)
}
// 初始化分割器
splitter, err := markdown.NewHeaderSplitter(ctx, &markdown.HeaderConfig{
Headers: map[string]string{
"#": "h1",
"##": "h2",
"###": "h3",
},
TrimHeaders: false,
})
if err != nil {
panic(err)
}
// 分割文档
docs, err = splitter.Transform(ctx, docs)
if err != nil {
panic(err)
}

Transformer使用

主要用于文档转换和处理,适用于一下场景

  • 将长文档分割成小段落以便于处理
  • 根据特定规则过滤文档内容
  • 对文档内容进行结构化转换
  • 提取文档中的特定部分

https://www.cloudwego.io/zh/docs/eino/core_modules/components/document_transformer_guide/

这里使用markdown来操作

indexer存储使用

可以使用分割处理后文档,用作知识库检索,搭配字节官方的VikingDB火山引擎应该是最好用的

https://www.cloudwego.io/zh/docs/eino/ecosystem_integration/indexer/indexer_volc_vikingdb/

不过我想使用本地PostgreSQL数据库

  1. 关系型数据库现在依旧是很多企业选用的部分
  2. PostgreSQL的插件支持比较不错

于是自己开发了一个开源项目

https://github.com/Wood-Q/Eino-pgvector

使用这个开源项目在PostgreSQL里进行向量存储

retriever检索召回

把前面存储在向量数据库里的文档筛选召回,用于提前对大模型补充上下文

https://www.cloudwego.io/zh/docs/eino/ecosystem_integration/retriever/retriever_volc_vikingdb/

最好配合官方VikingDB使用

我还没有对pgvector开发这个功能,后续需要补充


Eino框架学习
http://example.com/2025/04/29/Eino框架学习/
作者
WoodQ
发布于
2025年4月29日
许可协议