ai-rag
ai-rag 插件为大语言模型提供了检索增强生成(RAG)能力。它支持从外部数据源高效检索相关文档或信息,用于增强大语言模型的响应,从而提高生成输出的准确性和上下文相关性。
该插件支持使用 Azure OpenAI 和 Azure AI Search 服务来生成嵌入和执行向量搜索。
示例
要跟随示例进行操作,请先创建一个 Azure 账户 并完成以下步骤:
- 在 Azure AI Foundry 中部署一个生成式对话模型(如
gpt-4o)和一个嵌入模型(如text-embedding-3-large)。获取 API 密钥和模型端点。 - 按照 Azure 的示例 使用 Python 在 Azure AI Search 中准备向量搜索。该示例将创建一个名为
vectest的搜索索引,并包含所需的架构,同时上传包含 108 条各类 Azure 服务描述的示例数据,以便根据title和content生成嵌入titleVector和contentVector。在 Python 中执行向量搜索之前,请完成所有设置。 - 在 Azure AI Search 中,获取 Azure 向量搜索 API 密钥和搜索服务端点。
将 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
与 Azure 集成以实现 RAG 增强响应
以下示例演示了如何使用 ai-proxy 插件代理请求到 Azure OpenAI 大语言模型,并使用 ai-rag 插件生成嵌入并执行向量搜索,以增强大语言模型的响应。
创建路由如下:
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "ai-rag-route",
"uri": "/rag",
"plugins": {
"ai-rag": {
"embeddings_provider": {
"azure_openai": {
"endpoint": "'"$AZ_EMBEDDINGS_ENDPOINT"'",
"api_key": "'"$AZ_OPENAI_API_KEY"'"
}
},
"vector_search_provider": {
"azure_ai_search": {
"endpoint": "'"$AZ_AI_SEARCH_ENDPOINT"'",
"api_key": "'"$AZ_AI_SEARCH_KEY"'"
}
}
},
"ai-proxy": {
"provider": "openai",
"auth": {
"header": {
"api-key": "'"$AZ_OPENAI_API_KEY"'"
}
},
"model": "gpt-4o",
"override": {
"endpoint": "'"$AZ_CHAT_ENDPOINT"'"
}
}
}
}'
向该路由发送一个 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":"哪些 Azure 服务适合 DevOps?",
"dimensions":1024
}
}
}'
你应该会收到类似于以下的 HTTP/1.1 200 OK 响应:
{
"choices": [
{
"content_filter_results": {
...
},
"finish_reason": "length",
"index": 0,
"logprobs": null,
"message": {
"content": "以下是按类别列出的 Azure 服务列表,以及基于提供的 JSON 数据的简要说明:\n\n### 开发人员工具\n- **Azure DevOps**:一套帮助你规划、构建和部署应用程序的服务,包括 Azure Boards、Azure Repos、Azure Pipelines、Azure Test Plans 和 Azure Artifacts。\n- **Azure DevTest Labs**:一项完全托管的服务,用于在 Azure 中创建、管理和共享开发与测试环境,支持自定义模板、成本管理以及与 Azure DevOps 的集成。\n\n### 容器\n- **Azure Kubernetes Service (AKS)**:基于 Kubernetes 的托管容器编排服务,简化了容器化应用程序的部署和管理,具有自动升级和扩展等功能。\n- **Azure Container Instances**:一种无服务器容器运行时,无需管理底层基础设施即可运行和扩展容器化应用程序。\n- **Azure Container Registry**:一项完全托管的 Docker 注册表服务,用于存储和管理容器镜像和制品。\n\n### Web\n- **Azure App Service**:一个完全托管的平台,用于构建、部署和扩展 Web 应用程序、移动应用后端和 RESTful API,支持多种编程语言。\n- **Azure SignalR Service**:一项完全托管的实时消息传递服务,用于构建和扩展实时 Web 应用程序。\n- **Azure Static Web Apps**:一种无服务器托管服务,适用于使用静态前端技术和无服务器 API 的现代 Web 应用程序。\n\n### 计算\n- **Azure Virtual Machines**:基础设施即服务(IaaS)产品,用于在云中部署和管理虚拟机。\n- **Azure Functions**:一种无服务器计算服务,无需管理基础设施即可运行事件驱动的代码。\n- **Azure Batch**:一项作业调度服务,用于运行大规模并行和高性能计算(HPC)应用程序。\n- **Azure Service Fabric**:一个构建、部署和管理可扩展且可靠的微服务及基于容器的应用程序的平台。\n- **Azure Quantum**:一项量子计算服务,用于构建和运行量子应用程序。\n- **Azure Stack Edge**:一种托管边缘计算设备,用于在本地或边缘运行 Azure 服务和 AI 工作负载。\n\n### 安全\n- **Azure Bastion**:一项完全托管的服务,为虚拟机提供安全且可扩展的远程访问。\n- **Azure Security Center**:一个统一的安全管理服务,用于保护 Azure 和本地基础设施中的工作负载。\n- **Azure DDoS Protection**:一种基于云的服务,用于保护应用程序和资源免受分布式拒绝服务(DDoS)攻击。\n\n### 数据库\n",
"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": {
...
}
}