使用说明
深入研究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--多阶段构建,针对大小和安全性进行了优化,暴露了端口8001helm/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,可选):代理的其他说明(例如,样式、焦点、排除)。
行为与实施
-
在调用时,该工具:
- 使用环境变量通过Azure AI项目进行身份验证。
- 查找Bing搜索连接和深度研究模型部署。
- 使用附加的深度研究工具创建新代理。
- 启动一个新线程,并发送一条包含格式化指令的用户消息。
- 启动跑步并轮询完成情况(可能需要几分钟)。
- 流式传输代理响应和运行状态更新。
- 完成后,获取最终的代理消息并生成Markdown研究摘要,包括参考文献/引文(如果可用)。
- 通过删除代理进行清理。
-
工具是 异步 根据研究主题和报告类型的复杂性,可能需要几分钟才能完成。
-
输出是一份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 OpenAI
- 所需Azure资源:
- 区域限制:所有资源(项目、模型、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_ENDPOINTMODEL_DEPLOYMENT_NAMEDEEP_RESEARCH_MODEL_DEPLOYMENT_NAMEBING_RESOURCE_NAME
这些通过Kubernetes ConfigMap加载到容器中。
Docker文件详情
- 多阶段构建,实现高效、安全的图像
- 在虚拟环境中安装 Python 依赖项
- 仅将必要的文件复制到最终图像
- 暴露端口 8001 (与FastMCP服务器匹配)
Helm图表
位于 helm/deep-research-mcp/:
- 配置映射:负载
.env并将所有变量注入容器 - 部署:使用来自的图像和标签
values.yaml,从ConfigMap装载env,暴露端口8001 - 服务:类型
LoadBalancer用于端口8001上的公共互联网接入 - 帮助物体:用于命名的标准Helm模板帮助程序
部署说明
-
设置您的
.env文件
填写所有必需的Azure环境变量。 -
使用Azure和ACR进行身份验证
az login az acr login --name tradingaz -
构建、推送和部署
chmod +x deploy.sh ./deploy.sh此脚本将:
- 构建一个多拱形Docker镜像(
amd64) - 推到
tradingaz.azurecr.io - 用图像信息更新Helm值
- 复制
.env将ConfigMap注入到Helm图表中 - 将Helm版本部署(或升级)到Kubernetes集群
- 构建一个多拱形Docker镜像(
-
访问服务
- 部署后,获取外部IP:
kubectl get svc deep-research-mcp - 该服务将在
http://<EXTERNAL-IP>:8001/
- 部署后,获取外部IP:
更新环境变量
- 编辑您的
.env文件需要。 - 重新运行
./deploy.sh更新ConfigMap并重新部署。
备注
- Helm图表和部署经过验证,符合应用程序的要求。
- 对于自定义(副本、资源、入口等),请根据需要编辑Helm图表。
- 要进行故障排除,请检查吊舱日志:
kubectl logs deployment/deep-research-mcp
许可证
MIT许可证(c)微软公司