深度研究报告生成工具

一个基于Azure AI和Bing搜索的自动化深度研究报告生成工具,支持多种报告类型和语言输出,适用于研究和数据分析场景。

  • by alfredzouang
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 alfredzouang/deep_research_mcp

使用说明

深入研究MCP部署

该项目使用Docker、Helm和Kubernetes为Deep Research MCP Python应用程序提供了一个生产就绪的部署工作流。它旨在通过存储在Azure容器注册表(ACR)中的映像无缝部署到Azure Kubernetes服务(AKS),并与Mac M1(arm64)和amd64平台完全兼容。


项目结构

  • deep_research_mcp.py --主Python应用程序(FastMCP服务器,监听端口8001)
  • .env --Azure AI/代理集成所需的环境变量
  • Dockerfile --多阶段构建,针对大小和安全性进行了优化,暴露了端口8001
  • helm/deep-research-mcp/ --Kubernetes部署的Helm图
  • deploy.sh --构建、推送和部署应用程序的自动化脚本

MCP工具:深度研究报告

MCP服务器公开了一个名为 检索深度搜索报告 通过FastMCP,在 deep_research_mcp.py。此工具支持使用Azure AI代理和Bing搜索对任意主题进行程序化、自动化的研究。

工具功能

检索深度搜索报告
检索用户指定主题的研究报告,利用外部Bing搜索和大型语言模型(LLM)进行综合。该工具支持不同的报告长度、输出语言和可选的自定义指令。

参数

  • research_topic (str,必填):要研究的主题。
  • report_type (str,可选):要生成的报告类型。…之一 'brief', 'medium',或 'comprehensive'默认值: 'comprehensive'.
  • language (str,可选):ISO 639-1格式的输出语言(例如。, 'en' 对于英语, 'zh' 中国人)。违约: 'en'.
  • other_instructions (str,可选):代理的其他说明(例如,样式、焦点、排除)。

行为与实施

  • 在调用时,该工具:

    1. 使用环境变量通过Azure AI项目进行身份验证。
    2. 查找Bing搜索连接和深度研究模型部署。
    3. 使用附加的深度研究工具创建新代理。
    4. 启动一个新线程,并发送一条包含格式化指令的用户消息。
    5. 启动跑步并轮询完成情况(可能需要几分钟)。
    6. 流式传输代理响应和运行状态更新。
    7. 完成后,获取最终的代理消息并生成Markdown研究摘要,包括参考文献/引文(如果可用)。
    8. 通过删除代理进行清理。
  • 工具是 异步 根据研究主题和报告类型的复杂性,可能需要几分钟才能完成。

  • 输出是一份Markdown格式的研究报告,可选地包括一个“参考”部分,其中包含代理引用的唯一URL。

示例用法

索取一份关于“量子计算”的全面英文报告:

{
  "research_topic": "quantum computing",
  "report_type": "comprehensive",
  "language": "en"
}

备注

  • 该工具专为与MCP兼容的编排器集成而设计,可以通过HTTP(默认端口8001)调用。
  • 有关深度研究工具的更多详细信息,请参阅:https://aka.ms/agents-deep-research
  • 必须为Azure身份验证和资源访问设置环境变量(见下文)。

Azure先决条件

在部署Helm chart之前,请确保您已完成以下步骤,以在Azure AI Foundry中启用Deep Research工具:

  • Azure订阅:您必须拥有Azure订阅,并有权创建AI Foundry项目、使用Bing搜索资源以及在以下任一位置进行模型部署 美国西部 或 挪威东部 区域。
  • 模型访问:
    • 如果您已经可以访问Azure OpenAI o3 模型,你可以使用 o3-deep-research 模型直接。否则, 在此处请求访问权限.
  • 所需Azure资源:
    • 一 AI铸造项目 美国西部或挪威东部。
    • A. 使用Bing搜索 与您的项目关联的资源。
    • 模型部署用于:
      • o3-deep-research (版本 2025-06-26)美国西部或挪威东部。
      • gpt-4o 意图澄清模型,部署在同一地区。
  • 区域限制:所有资源(项目、模型、Bing搜索)必须位于同一Azure订阅和地区(美国西部或挪威东部)。
  • 计费和合规:在Bing搜索中使用Grounding可能会产生额外费用,并涉及Azure合规边界之外的数据传输。查看 使用Bing搜索使用条款 和 定价.
  • 官方设置指南:有关详细的最新说明,请参阅 深度研究工具文档.

先决条件

  • Docker(支持buildx进行多拱形构建)
  • 舵
  • Azure命令行界面(az)
  • yq (YAML处理器,例如。 brew install yq)
  • 访问Azure容器注册表(ACR)和AKS集群
  • Kubernetes上下文设置到目标集群

在Azure Kubernetes服务(AKS)中启用工作负载标识

本节提供了一个分步指南,按照Microsoft官方文档在您的AKS集群上启用Azure AD工作负载标识:
https://learn.microsoft.com/en-us/azure/aks/workload-identity-deploy-cluster

先决条件

  • Azure CLI版本2.44.1或更高版本(az version)
  • 运行Kubernetes 1.24或更高版本的AKS集群
  • 足够的权限来更新AKS集群功能

1.在AKS集群上启用OIDC颁发者和工作负载标识

az aks update \
  --resource-group <RESOURCE_GROUP> \
  --name <CLUSTER_NAME> \
  --enable-oidc-issuer \
  --enable-workload-identity

2.验证OIDC发卡机构URL

az aks show \
  --resource-group <RESOURCE_GROUP> \
  --name <CLUSTER_NAME> \
  --query "oidcIssuerProfile.issuerUrl" \
  -o tsv

3.创建用户分配的托管身份

az identity create \
  --name <MANAGED_IDENTITY_NAME> \
  --resource-group <RESOURCE_GROUP>

获取客户端ID和资源ID:

az identity show \
  --name <MANAGED_IDENTITY_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --query "{clientId:clientId,resourceId:id}"

4.创建联合身份凭证

您必须使用OIDC颁发者URL、Kubernetes服务帐户名和命名空间为托管身份创建联合身份凭据。
这可以通过Azure门户、Azure CLI或ARM/Diber模板完成。

使用Azure CLI的示例:

az identity federated-credential create \
  --name <FEDERATED_CREDENTIAL_NAME> \
  --identity-name <MANAGED_IDENTITY_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --issuer <OIDC_ISSUER_URL> \
  --subject system:serviceaccount:<K8S_NAMESPACE>:<KSA_NAME> \
  --audience api://AzureADTokenExchange

5.为Kubernetes服务帐户添加注释

kubectl annotate serviceaccount <KSA_NAME> \
  --namespace <K8S_NAMESPACE> \
  azure.workload.identity/client-id=<MANAGED_IDENTITY_CLIENT_ID>

6.分配Azure RBAC权限

为托管标识分配必要的Azure RBAC角色,以便您的工作负载可以访问所需的Azure资源。
例如,要授予对Azure密钥库的访问权限:

az role assignment create \
  --role "Key Vault Secrets User" \
  --assignee <MANAGED_IDENTITY_CLIENT_ID> \
  --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.KeyVault/vaults/<KEYVAULT_NAME>

7.测试工作负载身份集成

使用带注释的服务帐户部署测试pod,并验证它是否可以使用托管身份访问Azure资源。


注意事项和故障排除

  • 确保您的Azure CLI是最新的。
  • 在更新群集之前,请等待功能注册达到“已注册”状态。
  • 如果您遇到问题,请参阅官方文档中的“疑难解答”部分。
  • 有关高级场景(多租户、多个联合凭据等),请参阅官方文档。

参考:
有关最新和最详细的说明,请始终参阅:
https://learn.microsoft.com/en-us/azure/aks/workload-identity-deploy-cluster


环境变量

应用程序需要以下环境变量(在中设置 .env):

  • PROJECT_ENDPOINT
  • MODEL_DEPLOYMENT_NAME
  • DEEP_RESEARCH_MODEL_DEPLOYMENT_NAME
  • BING_RESOURCE_NAME

这些通过Kubernetes ConfigMap加载到容器中。


Docker文件详情

  • 多阶段构建,实现高效、安全的图像
  • 在虚拟环境中安装 Python 依赖项
  • 仅将必要的文件复制到最终图像
  • 暴露端口 8001 (与FastMCP服务器匹配)

Helm图表

位于 helm/deep-research-mcp/:

  • 配置映射:负载 .env 并将所有变量注入容器
  • 部署:使用来自的图像和标签 values.yaml,从ConfigMap装载env,暴露端口8001
  • 服务:类型 LoadBalancer 用于端口8001上的公共互联网接入
  • 帮助物体:用于命名的标准Helm模板帮助程序

部署说明

  1. 设置您的 .env 文件
    填写所有必需的Azure环境变量。

  2. 使用Azure和ACR进行身份验证

    az login
    az acr login --name tradingaz
    
  3. 构建、推送和部署

    chmod +x deploy.sh
    ./deploy.sh
    

    此脚本将:

    • 构建一个多拱形Docker镜像(amd64)
    • 推到 tradingaz.azurecr.io
    • 用图像信息更新Helm值
    • 复制 .env 将ConfigMap注入到Helm图表中
    • 将Helm版本部署(或升级)到Kubernetes集群
  4. 访问服务

    • 部署后,获取外部IP:
      kubectl get svc deep-research-mcp
      
    • 该服务将在 http://<EXTERNAL-IP>:8001/

更新环境变量

  • 编辑您的 .env 文件需要。
  • 重新运行 ./deploy.sh 更新ConfigMap并重新部署。

备注

  • Helm图表和部署经过验证,符合应用程序的要求。
  • 对于自定义(副本、资源、入口等),请根据需要编辑Helm图表。
  • 要进行故障排除,请检查吊舱日志:
    kubectl logs deployment/deep-research-mcp
    

许可证

MIT许可证(c)微软公司