在构建大模型应用时,Embedding 组件是连接文本与语义空间的关键桥梁。简单来说,它的本质就是把文本变成一串数字向量,让程序能'按语义理解文本',而不只是机械地按字符串匹配。
你可以把它想象成这样:
- 原始文本:
"今天天气不错" - 转成向量后:
[0.12, -0.87, 0.44, ...]
这串向量人眼难以直接阅读,但机器可以拿它来快速计算'两个文本像不像'。
核心能力与边界
它能做什么?
在实际开发中,Embedding 最常见的应用场景包括以下几类:
1. 文本相似度计算 比如用户输入'怎么退款'和系统里的'我要申请退钱',虽然字面不同,但 Embedding 后的向量距离会比较近,系统就能识别出它们语义相似。
2. 语义搜索 这是最典型的用途。当你在知识库或 FAQ 中搜索'怎么修改收货地址'时,系统不只是搜关键词,而是把问题也做成向量,去找语义最接近的文档片段。这样即使文档里写的是'变更配送地址',也能被检索出来。
3. RAG / 知识库问答 在这类项目中,Embedding 几乎是核心组件。流程通常是:先把知识库切块生成向量存入数据库,用户提问时再生成向量去检索相关内容,最后喂给大模型回答。它是'先找资料'这一步的关键。
4. 文本聚类与去重 处理大量评论、工单或反馈时,可以用 Embedding 做相似归类、重复问题合并或主题聚类。
它的局限
需要明确的是,Embedding 不是直接用来生成回答的。它更像是一个'文本编码器'或'语义检索工具'。
- LLM:负责生成、总结、对话。
- Embedding:负责把文本映射到语义空间,方便检索、匹配、聚类。
一句话总结:把文字转换成可计算的语义特征,方便程序判断哪些文本意思接近。
基础语法
接下来我们看下 Eino 框架下的基础用法。核心方法就是 EmbedStrings。
func EmbedStrings(ctx, texts []string, opts ...Option) ([][]float64, error)
意思是输入多段文本,输出每段文本对应的一个向量。
texts := []string{"hello", "how are you"}
vectors, err := embedder.EmbedStrings(ctx, texts)
返回的 vectors 就是两段文本的向量表示。拿到这些向量后,你可以拿去比较相似度、存入向量数据库、召回知识片段或做聚类分析。
实战指南
使用 Embedding 通常分两层:最直接的生成向量,以及配合检索库做业务落地。
初始化 Embedder
首先需要创建一个'文本转向量'的对象。以兼容 OpenAI 的包为例:
import (
"github.com/cloudwego/eino-ext/components/embedding/openai"
)
embedder, err := openai.NewEmbedder(ctx, &openai.EmbeddingConfig{
APIKey: accessKey,
Model: ,
Dimensions: &defaultDim,
Timeout: ,
})
err != {
(err)
}


