3.Text embeddings
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org
==================================================
将文档分解成块后,RAG 管道的下一步是找到与用户问题最相关的块。这本质上是一个搜索问题——你需要查看所有文本块,并识别出与用户询问内容相关的那些块。

Semantic Search
寻找相关块最常见的方法是语义搜索。与寻找精确词匹配的关键词搜索不同,语义搜索使用文本嵌入来理解用户问题和每个文本块的含义和上下文。

Text Embeddings
文本嵌入是对某些文本中包含的含义的数值表示。可以将其理解为将单词和句子转换为计算机可以进行数学运算的格式。

以下是该过程的工作原理:
- 你将文本输入到嵌入模型中
- 模型输出一长串数字(即嵌入)
- 每个数字的范围从 -1 到 +1
- 这些数字代表输入文本的不同质量或特征
理解这些数字
嵌入中的每个数字本质上都是输入文本某种质量的"分数"。然而,这里有一个重要的注意事项:我们并不确切知道每个数字代表什么。

虽然我们可以想象某个数字可能代表"文本的快乐程度"或"文本谈论海洋的程度",但这些只是概念性的例子。每个维度的实际含义是模型在训练过程中学习到的,人类无法直接解释。
使用 VoyageAI 生成 Embeddings
由于 Anthropic 目前不提供 embedding 生成服务,推荐的提供商是 VoyageAI。您需要:
- 注册一个单独的 VoyageAI 账户
- 获取 API 密钥(免费开始使用)
- 将密钥添加到您的环境变量中

在您的 .env 文件中,添加:
VOYAGE_API_KEY="your_key_here"
Implementation
首先,安装 VoyageAI 库:
%pip install voyageai
然后设置客户端并创建一个生成嵌入向量的函数:
from dotenv import load_dotenv
import voyageai
load_dotenv()
client = voyageai.Client()
def generate_embedding(text, model="voyage-3-large", input_type="query"):
result = client.embed([text], model=model, input_type=input_type)
return result.embeddings[0]

当你在文本块上运行这个函数时,会得到一个表示嵌入向量的浮点数列表。这个过程快速而直接——真正的挑战在于理解如何在你的RAG管道中有效地使用这些嵌入向量来找到最相关的内容。

下一步是学习如何比较嵌入向量以确定哪些文本块与用户问题最相似,这构成了语义搜索过程的核心。
==================================================
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org