Embedding 使用说明
它能做什么?
Embedding 组件本质上是将文本转换为数字向量,让程序能'按语义理解文本',而不只是按字符串匹配。
你可以把它理解成:
- 原始文本:
"今天天气不错" - 转成向量后:
[0.12, -0.87, 0.44, ...]
这串向量人看不懂的,因为它是给程序看的。机器可以拿它来算'两个文本像不像'。
它能做什么?
平时大家会用到的地方最常见就是这几类:
1. 文本相似度计算 比如:
- '怎么退款'
- '我要申请退钱'
虽然字不一样,但意思接近。Embedding 后,这两句话的向量距离会比较近,所以系统知道它们语义相似。
2. 语义搜索 这也是最常见的用途。比如你有很多文档、知识库、FAQ,用户问:
- '怎么修改收货地址'
系统不是只搜关键词'修改''地址',而是把这个问题也做成向量,然后去找语义最接近的文档片段。这样即使文档里写的是'变更配送地址',也能搜出来。
3. RAG / 知识库问答 这类项目里 embedding 基本是核心组件之一了。流程通常是:
- 先把知识库里的文本切块
- 然后为每个文本块生成 embedding
- 存到向量库里
- 用户提问时,也生成一个 embedding
- 去向量库里找最相关的内容
- 再把找到的内容喂给大模型回答
也就是说,它是'先找资料'这一步的关键。
4. 文本聚类 / 分类 / 去重 这个是生活中其他方面的应用,非 AI。比如你有很多评论、工单、反馈,可以用 embedding 做:
- 相似工单归类
- 重复问题合并
- 用户反馈主题聚类
它不能直接做什么?
它不是直接拿来生成回答的。它更像一个'文本编码器'或者'语义检索工具'。
也就是:
- LLM:负责生成、总结、对话
- Embedding:负责把文本映射到语义空间,方便检索、匹配、聚类
总结:
这个组件的核心用途就一句话:
把文字转换成可计算的语义特征,方便程序判断哪些文本意思接近。
基础语法
接下来,我先说下基础语法。
EmbedStrings(ctx, texts []string, opts ...Option)([][]float64,error)
意思就是:
- 输入:多段文本
- 输出:每段文本对应的一个向量
例如:
texts := []string{"hello", "how are you"}
vectors, err := embedder.EmbedStrings(ctx, texts)


