检索增强生成代理

基于Microsoft Agentic Framework (MAF)和Azure AI Search的Serverless Python Azure Function应用,提供MCP工具和HTTP端点,支持检索增强生成(RAG)。

  • by azure-data-ai-hub
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 azure-data-ai-hub/azure-ai-foundry-MAF-RAG-MCP-agent

使用说明

Azure AI Foundry MAF RAG MCP代理

无服务器Python Azure Function应用程序,公开了由Microsoft代理框架(MAF)和Azure AI搜索支持的MCP工具和HTTP端点,用于检索增强生成(RAG)。

建筑

下图显示了端到端的参考架构。用户与 M365副驾驶,由a配置 副驾驶管理员 通过 副驾驶工作室 浮出水面 代理。代理与 API MCP/HTTP上的层,反过来调用 Azure AI Foundry (AI代理/AOAI/GPT-4o)用于推理和生成。API还直接向 Azure人工智能搜索源于M365 Copilot的源文件存储为 内容,已编入Azure AI搜索。AI Foundry驱动了填充搜索索引的矢量化管道,实现了检索增强生成(RAG)。

flowchart LR
    Users(["Users"])
    CopilotAdmin(["Copilot Admin"])
    M365["M365 Copilot"]
    CopilotStudio["Copilot Studio"]
    Agent["Agent"]
    API["API"]
    AIFoundry["AI Foundry\n(AI Agents / AOAI / GPT-4o)"]
    AISearch["Azure AI Search"]
    Content["Content"]

    Users --> M365
    CopilotAdmin <--> CopilotStudio
    CopilotStudio --> Agent
    M365 <--> Agent
    Agent <-->|"MCP/HTTP"| API
    API <--> AIFoundry
    API -->|"Search Query"| AISearch
    Content -->|"Index"| AISearch
    M365 -->|"Source File"| Content
    AIFoundry -->|"Vectorization"| AISearch

特性

  • MAF驱动的MCP工具: getTagLine 和 getContractAnalysis 工具通过Azure AI项目/代理框架执行。
  • HTTP API:
    • GET /api/rag-query?question=... 展示了基于Azure AI搜索的RAG。
    • GET /api/contract-analysis?contractName=... 通过HTTP调用合同分析代理。
  • 首先管理身份:用途 DefaultAzureCredential,因此它可以在本地与Azure CLI身份验证和Azure中的托管身份一起使用。

需求

Python依赖关系

在中声明的包裹 requirements.txt:

  • azure-functions>=1.24.0
  • azure-ai-projects
  • azure-identity
  • agent-framework
  • azure-search-documents>=11.6.0

通过以下方式在本地安装:

python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt

配置

填充 local.settings.json (本地使用)或Azure功能应用程序 配置 与:

  • AZURE_AI_PROJECT_ENDPOINT –AI项目端点URL
  • AZURE_AI_MODEL_DEPLOYMENT_NAME –部署ID(例如。 gpt-4o)
  • CONTRACT_ANALYSIS_AGENT_ID –用于合同分析的预先创建的代理ID
  • AZURE_SEARCH_ENDPOINT –搜索服务端点
  • AZURE_SEARCH_INDEX_NAME –索引名称
  • AZURE_SEARCH_SEMANTIC_CONFIG –语义配置(可选)
  • AZURE_SEARCH_CONTENT_FIELD –包含段落文本的字段(默认值 content)
  • AZURE_SEARCH_TOP_K –要获取的段落数(默认值 3)

确保执行标识具有数据平面角色:

  • Search Index Data Reader 关于搜索服务
  • AI Developer (或同等)人工智能项目

本地开发

启动Azure Functions主机:

func start

本地运行时的HTTP调用示例:

curl "http://localhost:7071/api/rag-query?question=Summarize%20our%20contract" \
  --header "Content-Type: application/json"

curl "http://localhost:7071/api/contract-analysis?contractName=Contract123"

部署

  1. 使用Functions v4和Python 3.10在Windows/Linux上创建或重用Python函数应用程序。
  2. 配置上述环境变量。
  3. 从此仓库部署:
func azure functionapp publish <YourFunctionAppName> --python

如果使用Azure DevOps或GitHub Actions,请运行 pip install -r requirements.txt 然后 func azure functionapp publish (或 az functionapp deployment source config-zip)在您的CI管道中。

MCP检查员

MCP Inspector帮助在本地练习MCP工具。运行通过 npx (按需下载):

npx @modelcontextprotocol/inspector --endpoint http://localhost:7071/api

选择 getTagLine 或 getContractAnalysis 工具并提供有效载荷JSON以验证响应。

故障排除

  • 禁止/凭据错误 –验证 az login 本地或分配Function App的托管身份 Search Index Data Reader 和 AI Developer 角色。
  • 未返回任何文件 –确认搜索索引字段名称与中的值匹配 AZURE_SEARCH_CONTENT_FIELD 并且填充索引。
  • 代理创建失败 –确保AI项目包含活动的MAF部署,并且允许您的身份创建代理。