在实施嵌入向量之前

在选择嵌入向量提供商时,根据您的需求和偏好可以考虑以下几个因素:

  • 数据集大小和领域特异性:模型训练数据集的大小及其与您要嵌入的领域的相关性。更大或更具领域特异性的数据通常会产生更好的领域内嵌入效果
  • 推理性能:嵌入查找速度和端到端延迟。这对于大规模生产部署来说是一个特别重要的考虑因素
  • 定制化:在私有数据上继续训练的选项,或针对特定领域的模型专门化。这可以提高在独特词汇表上的性能

如何通过 Anthropic 获取嵌入向量

Anthropic 并不提供自己的嵌入模型。Voyage AI 是一个提供多种选项和功能的嵌入向量提供商,涵盖了上述所有考虑因素。

Voyage AI 提供最先进的嵌入模型,并为金融和医疗保健等特定行业领域提供定制模型,或为个别客户提供定制微调模型。

本指南的其余部分是关于 Voyage AI 的,但我们建议您评估各种嵌入向量供应商,以找到最适合您特定用例的供应商。

可用模型

Voyage 推荐使用以下文本嵌入模型:

模型上下文长度嵌入维度描述
voyage-3-large32,0001024 (默认), 256, 512, 2048最佳通用和多语言检索质量。
voyage-332,0001024针对通用和多语言检索质量优化。详见博客文章
voyage-3-lite32,000512针对延迟和成本优化。详见博客文章
voyage-code-332,0001024 (默认), 256, 512, 2048针对代码检索优化。详见博客文章
voyage-finance-232,0001024针对金融检索和 RAG 优化。详见博客文章
voyage-law-216,0001024针对法律长上下文检索和 RAG 优化。同时提升了所有领域的性能。详见博客文章

此外,推荐使用以下多模态嵌入模型:

模型上下文长度嵌入维度描述
voyage-multimodal-3320001024丰富的多模态嵌入模型,可以向量化交错的文本和内容丰富的图像,如 PDF 截图、幻灯片、表格、图表等。详见博客文章

需要帮助决定使用哪个文本嵌入模型?查看常见问题

Voyage AI 入门

要访问 Voyage 嵌入:

  1. 在 Voyage AI 的网站上注册
  2. 获取 API 密钥
  3. 为方便起见,将 API 密钥设置为环境变量:
export VOYAGE_API_KEY="<your secret key>"

您可以通过使用官方 voyageai Python 包或 HTTP 请求来获取嵌入向量,如下所述。

Voyage Python 包

可以使用以下命令安装 voyageai 包:

pip install -U voyageai

然后,您可以创建一个客户端对象并开始使用它来嵌入您的文本:

import voyageai

vo = voyageai.Client()
# 这将自动使用环境变量 VOYAGE_API_KEY。
# 或者,您可以使用 vo = voyageai.Client(api_key="<your secret key>")

texts = ["Sample text 1", "Sample text 2"]

result = vo.embed(texts, model="voyage-3", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])

result.embeddings 将是一个包含两个嵌入向量的列表,每个向量包含 1024 个浮点数。运行上述代码后,两个嵌入将显示在屏幕上:

[0.02012746, 0.01957859, ...]  # "Sample text 1" 的嵌入
[0.01429677, 0.03077182, ...]  # "Sample text 2" 的嵌入

在创建嵌入时,您还可以为 embed() 函数指定其他一些参数。您可以在此处阅读更多规范

Voyage HTTP API

您也可以通过请求 Voyage HTTP API 获取嵌入。例如,您可以在终端中通过 curl 命令发送 HTTP 请求:

curl https://api.voyageai.com/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $VOYAGE_API_KEY" \
  -d '{
    "input": ["Sample text 1", "Sample text 2"],
    "model": "voyage-3"
  }'

您将收到一个包含嵌入和令牌使用情况的 JSON 对象响应:

{
  "object": "list",
  "data": [
    {
      "embedding": [0.02012746, 0.01957859, ...],
      "index": 0
    },
    {
      "embedding": [0.01429677, 0.03077182, ...],
      "index": 1
    }
  ],
  "model": "voyage-3",
  "usage": {
    "total_tokens": 10
  }
}

您可以在 Voyage 文档中阅读更多关于嵌入端点的信息

AWS Marketplace

Voyage 嵌入也可在 AWS Marketplace 上获得。在 AWS 上访问 Voyage 的说明可在此处获得。

快速入门示例

现在我们知道了如何获取嵌入,让我们看一个简短的示例。

假设我们有一个包含六个文档的小型语料库用于检索

documents = [
    "地中海饮食强调鱼类、橄榄油和蔬菜,被认为可以减少慢性疾病。",
    "植物的光合作用将光能转化为葡萄糖并产生必需的氧气。",
    "20世纪的创新,从收音机到智能手机,都围绕着电子技术的进步。",
    "河流提供水源、灌溉和水生物种的栖息地,对生态系统至关重要。",
    "Apple 将于 2023 年 11 月 2 日星期四太平洋时间下午 2:00 / 东部时间下午 5:00 召开电话会议,讨论第四财季业绩和业务更新。",
    "莎士比亚的作品,如《哈姆雷特》和《仲夏夜之梦》,在文学中经久不衰。"
]

我们首先使用 Voyage 将每个文档转换为嵌入向量

import voyageai

vo = voyageai.Client()

# 嵌入文档
doc_embds = vo.embed(
    documents, model="voyage-3", input_type="document"
).embeddings

嵌入将允许我们在向量空间中进行语义搜索/检索。给定一个示例查询,

query = "Apple 的电话会议安排在什么时候?"

我们将其转换为嵌入,并进行最近邻搜索,根据嵌入空间中的距离找到最相关的文档。

import numpy as np

# 嵌入查询
query_embd = vo.embed(
    [query], model="voyage-3", input_type="query"
).embeddings[0]

# 计算相似度
# Voyage 嵌入被归一化为长度 1,因此点积
# 和余弦相似度是相同的。
similarities = np.dot(doc_embds, query_embd)

retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])

注意,我们分别使用 input_type="document"input_type="query" 来嵌入文档和查询。更多规范可以在这里找到。

输出将是第 5 个文档,这确实是与查询最相关的:

Apple 将于 2023 年 11 月 2 日星期四太平洋时间下午 2:00 / 东部时间下午 5:00 召开电话会议,讨论第四财季业绩和业务更新。

如果您正在寻找关于如何使用嵌入进行 RAG 的详细指南,包括向量数据库,请查看我们的 RAG cookbook

常见问题

定价

访问 Voyage 的定价页面获取最新的定价详情。

Was this page helpful?