如果您的提供商提供公共 REST API,您可以将任何文本嵌入生成器与 Meilisearch 集成。
将 REST 嵌入器与 Meilisearch 集成的过程因提供商及其数据结构方式而异。本指南将向您展示在哪里可以找到所需信息,然后引导您根据找到的信息配置 Meilisearch 嵌入器。
查找您的嵌入器提供商的文档
每个提供商都要求查询遵循特定的结构。
在开始创建嵌入器之前,请查阅您的提供商关于嵌入创建的文档。其中应包含有关 API 请求、请求头和响应所需的信息。
例如,Mistral 的嵌入文档是其 API 参考的一部分。对于 Cloudflare 的 Workers AI,预期的输入和响应与您选择的模型相关联。
设置 REST 源和 URL
打开您的文本编辑器并创建一个嵌入器对象。为其命名并将其 source 设置为 "rest"
{
"EMBEDDER_NAME": {
"source": "rest"
}
}
接下来,配置 Meilisearch 应使用哪个 URL 来联系嵌入提供商
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL"
}
}
为所有 REST 嵌入器设置嵌入器名称、source
和 url
是强制性的。
Meilisearch 的 request
字段定义了它将发送给提供商的输入结构。您必须如何填充此字段因每个提供商而异。
例如,Mistral 需要两个强制参数:model
和 input
。它还接受一个可选参数:encoding_format
。而 Cloudflare 只接受一个字段,text
。
选择模型
在许多情况下,您的提供商要求您明确设置要用于创建嵌入的模型。例如,在 Mistral 中,model
必须是指定有效 Mistral 模型的字符串。
更新您的嵌入器对象,添加此字段及其值
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME"
}
}
}
在 Cloudflare 的情况下,模型是 API 路由本身的一部分,不需要在您的 request
中指定。
嵌入提示
提示对应于提供商将用于生成文档嵌入的数据。其具体名称因您选择的提供商而异。在 Mistral 中,这是 input
字段。在 Cloudflare 中,它被称为 text
。
大多数提供商接受字符串或字符串数组。单个字符串将为数据库中的每个文档生成一个请求
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME",
"input": "{{text}}"
}
}
}
{{text}}
表示 Meilisearch 应将字段内容替换为您的文档数据,如嵌入器的 documentTemplate
中所示。
字符串数组允许 Meilisearch 在一个请求中发送多达 10 个文档,从而减少对提供商的 API 调用次数
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME",
"input": [
"{{text}}",
"{{..}}"
]
}
}
}
使用数组提示时,第一个项必须是 {{text}}
。如果您想在单个请求中发送多个文档,第二个数组项必须是 {{..}}
。使用 "{{..}}"
时,它必须同时存在于 request
和 response
中。
使用其他嵌入提供商时,input
可能被称为其他名称,例如 text
或 prompt
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME",
"text": "{{text}}"
}
}
}
提供其他请求字段
您可以根据需要向 request
对象添加任意数量的字段。Meilisearch 在查询嵌入提供商时会包含它们。
例如,Mistral 允许您选择配置 encoding_format
。通过在嵌入器的 request
中声明此字段来设置它
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME",
"input": ["{{text}}", "{{..}}"],
"encoding_format": "float"
}
}
}
嵌入响应
您必须指明 Meilisearch 可以在提供商响应中的何处找到文档嵌入。请查阅提供商的 API 文档,注意其放置嵌入的位置。
Cloudflare 的嵌入位于 response.result.data
内的一个数组中。在嵌入器的 response
中描述嵌入数组的完整路径。第一个数组项必须是 "{{embedding}}"
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"text": "{{text}}"
},
"response": {
"result": {
"data": ["{{embedding}}"]
}
}
}
}
如果响应包含多个嵌入,请使用 "{{..}}"
作为其第二个值
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME",
"input": [
"{{text}}",
"{{..}}"
]
},
"response": {
"data": [
{
"embedding": "{{embedding}}"
},
"{{..}}"
]
}
}
}
使用 "{{..}}"
时,它必须同时存在于 request
和 response
中。
响应中可能包含单个嵌入而不是数组。使用 "{{embedding}}"
作为其值
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME",
"input": "{{text}}"
},
"response": {
"data": {
"text": "{{embedding}}"
}
}
}
}
响应也可能是一个未嵌套在对象中的单个项或数组
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME",
"input": [
"{{text}}",
"{{..}}"
]
},
"response": [
"{{embedding}}",
"{{..}}"
]
}
}
提示数据类型不一定与响应数据类型匹配。例如,Cloudflare 总是返回一个嵌入数组,即使您请求中的提示是字符串。
Meilisearch 会静默忽略不指向 "{{embedding}}"
值的 response
字段。
您的提供商也可能要求您在请求中添加特定的头。例如,Azure 的 AI 服务需要一个包含 API 密钥的 api-key
头。
将 headers
字段添加到您的嵌入器对象中
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"text": "{{text}}"
},
"response": {
"result": {
"data": ["{{embedding}}"]
}
},
"headers": {
"FIELD_NAME": "FIELD_VALUE"
}
}
}
默认情况下,Meilisearch 包含 Content-Type
头。如果您提供了 API 密钥,它也可能包含一个授权 bearer token。
配置嵌入器的其余部分
source
、request
、response
和 header
是 REST 嵌入器特有的字段。
与其他远程嵌入器一样,您可能需要提供一个 apiKey
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME",
"input": ["{{text}}", "{{..}}"],
"encoding_format": "float"
},
"response": {
"data": [
{
"embedding": "{{embedding}}"
},
"{{..}}"
]
},
"apiKey": "PROVIDER_API_KEY",
}
}
您还应该设置一个 documentTemplate
。好的模板应该简短,并且只包含高度相关的文档数据
{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME",
"input": ["{{text}}", "{{..}}"],
"encoding_format": "float"
},
"response": {
"data": [
{
"embedding": "{{embedding}}"
},
"{{..}}"
]
},
"apiKey": "PROVIDER_API_KEY",
"documentTemplate": "SHORT_AND_RELEVANT_DOCUMENT_TEMPLATE"
}
}
更新您的索引设置
现在嵌入器对象已完成,更新您的索引设置
curl \
-X PATCH 'MEILISEARCH_URL/indexes/INDEX_NAME/settings/embedders' \
-H 'Content-Type: application/json' \
--data-binary '{
"EMBEDDER_NAME": {
"source": "rest",
"url": "PROVIDER_URL",
"request": {
"model": "MODEL_NAME",
"input": ["{{text}}", "{{..}}"],
},
"response": {
"data": [
{
"embedding": "{{embedding}}"
},
"{{..}}"
]
},
"apiKey": "PROVIDER_API_KEY",
"documentTemplate": "SHORT_AND_RELEVANT_DOCUMENT_TEMPLATE"
}
}'
在本指南中,您已经看到了在 Meilisearch 中配置 REST 嵌入器的一些示例。尽管本指南使用了 Mistral 和 Cloudflare,但对于所有提供商来说,通用步骤保持不变
- 查找提供商的 REST API 文档
- 识别嵌入创建请求参数
- 在嵌入器的
request
中包含参数
- 识别嵌入创建响应
- 在嵌入器的
response
中重现返回嵌入的路径
- 将任何必需的 HTTP 头添加到嵌入器的
header
中
- 使用新的嵌入器更新您的索引设置