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


