Skip to main content
Version: 3.17

ai-rag

描述#

ai-rag 插件为 LLM 提供检索增强生成(Retrieval-Augmented Generation,RAG)功能。它促进从外部数据源高效检索相关文档或信息,这些信息用于增强 LLM 响应,从而提高生成输出的准确性和上下文相关性。

该插件支持使用 Azure OpenAIAzure AI Search 服务来生成嵌入和执行向量搜索。欢迎提交 PR 以引入对其他服务提供商的支持。

插件属性#

名称类型必选项默认值有效值描述
embeddings_providerobject嵌入模型提供商的配置。
embeddings_provider.azure_openaiobjectAzure OpenAI 嵌入模型的配置。
embeddings_provider.azure_openai.endpointstringAzure OpenAI 嵌入模型端点。
embeddings_provider.azure_openai.api_keystringAzure OpenAI API 密钥。
vector_search_providerobject向量搜索提供商的配置。
vector_search_provider.azure_ai_searchobjectAzure AI Search 的配置。
vector_search_provider.azure_ai_search.endpointstringAzure AI Search 端点。
vector_search_provider.azure_ai_search.api_keystringAzure AI Search API 密钥。

请求体格式#

请求体中必须包含以下字段。

字段类型描述
ai_ragObject请求体 RAG 规范。
ai_rag.embeddingsObject生成嵌入所需的请求参数。内容取决于配置的提供商的 API 规范。
ai_rag.vector_searchObject执行向量搜索所需的请求参数。内容取决于配置的提供商的 API 规范。
  • ai_rag.embeddings 的参数

    • Azure OpenAI
    名称必选项类型描述
    inputString用于计算嵌入的输入文本,编码为字符串。
    userString代表最终用户的唯一标识符,可帮助监控和检测滥用行为。
    encoding_formatString返回嵌入的格式。可以是 floatbase64。默认为 float
    dimensionsInteger输出嵌入的维数。它应与你的嵌入模型的维数匹配。例如,text-embedding-ada-002 的维数固定为 1536。对于 text-embedding-3-smalltext-embedding-3-large,维数范围分别为 1 到 1536 和 3072。

    有关其他参数,请参阅 Azure OpenAI 嵌入文档

  • ai_rag.vector_search 的参数

    • Azure AI Search
    字段必选项类型描述
    fieldsString向量搜索的字段。

    有关其他参数,请参阅 Azure AI Search 文档。此外,还支持这些向量查询参数

示例请求体:

{
"ai_rag": {
"vector_search": { "fields": "contentVector" },
"embeddings": {
"input": "which service is good for devops",
"dimensions": 1024
}
}
}

示例#

要跟随示例操作,请创建一个 Azure 账户并完成以下步骤:

将 API 密钥和端点保存到环境变量:

# 替换为你的值

AZ_OPENAI_DOMAIN=https://ai-plugin-developer.openai.azure.com
AZ_OPENAI_API_KEY=9m7VYroxITMDEqKKEnpOknn1rV7QNQT7DrIBApcwMLYJQQJ99ALACYeBjFXJ3w3AAABACOGXGcd
AZ_CHAT_ENDPOINT=${AZ_OPENAI_DOMAIN}/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-15-preview
AZ_EMBEDDING_MODEL=text-embedding-3-large
AZ_EMBEDDINGS_ENDPOINT=${AZ_OPENAI_DOMAIN}/openai/deployments/${AZ_EMBEDDING_MODEL}/embeddings?api-version=2023-05-15

AZ_AI_SEARCH_SVC_DOMAIN=https://ai-plugin-developer.search.windows.net
AZ_AI_SEARCH_KEY=IFZBp3fKVdq7loEVe9LdwMvVdZrad9A4lPH90AzSeC06SlR
AZ_AI_SEARCH_INDEX=vectest
AZ_AI_SEARCH_ENDPOINT=${AZ_AI_SEARCH_SVC_DOMAIN}/indexes/${AZ_AI_SEARCH_INDEX}/docs/search?api-version=2024-07-01
note

你可以使用以下命令从 config.yaml 获取 admin_key 并保存到环境变量中:

admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 's/"//g')

与 Azure 集成以获得 RAG 增强响应#

以下示例演示了如何使用 ai-proxy 插件将请求代理到 Azure OpenAI LLM,并使用 ai-rag 插件生成嵌入和执行向量搜索以增强 LLM 响应。

向路由发送 POST 请求,在请求体中包含向量字段名称、嵌入模型维度和输入提示:

curl "http://127.0.0.1:9080/rag" -X POST \
-H "Content-Type: application/json" \
-d '{
"ai_rag":{
"vector_search":{
"fields":"contentVector"
},
"embeddings":{
"input":"Which Azure services are good for DevOps?",
"dimensions":1024
}
}
}'

你应该收到类似以下的 HTTP/1.1 200 OK 响应:

{
"choices": [
{
"content_filter_results": {
...
},
"finish_reason": "length",
"index": 0,
"logprobs": null,
"message": {
"content": "Here is a list of Azure services ...",
"role": "assistant"
}
}
],
"created": 1740625850,
"id": "chatcmpl-B54gQdumpfioMPIybFnirr6rq9ZZS",
"model": "gpt-4o-2024-05-13",
"object": "chat.completion",
"prompt_filter_results": [
{
"prompt_index": 0,
"content_filter_results": {
...
}
}
],
"system_fingerprint": "fp_65792305e4",
"usage": {
...
}
}