Embedding 概述
Embedding 组件本质上是将文本转换为数字向量,使程序能够按语义理解文本,而非仅进行字符串匹配。
- 原始文本:
"今天天气不错" - 转成向量后:
[0.12, -0.87, 0.44, ...]
这串向量供程序计算'两个文本像不像'。
核心用途
它能做什么?
-
文本相似度计算 例如:'怎么退款'和'我要申请退钱',虽然字不同但意思接近。Embedding 后,这两句话的向量距离较近,系统可识别其语义相似。
-
语义搜索 在文档、知识库或 FAQ 中,用户提问时,系统将问题转为向量,寻找语义最接近的文档片段。即使文档写的是'变更配送地址',也能搜出'修改收货地址'。
-
RAG / 知识库问答 流程通常是:
- 知识库文本切块
- 为每个文本块生成 embedding
- 存入向量库
- 用户提问生成 embedding
- 检索最相关内容
- 将结果喂给大模型回答
-
文本聚类 / 分类 / 去重 用于工单归类、重复问题合并、用户反馈主题聚类等。
它不能直接做什么?
它不是直接用来生成回答的,更像是一个'文本编码器'或'语义检索工具'。
- LLM:负责生成、总结、对话
- Embedding:负责把文本映射到语义空间,方便检索、匹配、聚类
基础用法
EmbedStrings(ctx, texts []string, opts ...Option)([][]float64,error)
输入多段文本,输出每段文本对应的向量。
texts := []string{"hello", "how are you"}
vectors, err := embedder.EmbedStrings(ctx, texts)
返回的 vectors 可用于相似度比较、存入向量数据库、召回知识片段或聚类分析。
进阶用法
1. 创建 Embedder
import (
"github.com/cloudwego/eino-ext/components/embedding/openai"
)
embedder, err := openai.NewEmbedder(ctx, &openai.EmbeddingConfig{
APIKey: accessKey,
Model: "text-embedding-3-large",
Dimensions: &defaultDim,
Timeout: 0,
})
if err != nil {
panic(err)
}
关键参数:
APIKey:调用模型服务的密钥


