Token导航 LogoToken导航TokenDH.com
Azure Foundry Multi Agents Workflow logo
AI代理stdio官方级别未说明来源级核验

Azure Foundry Multi Agents Workflow

MCP Server

一个基于微软智能体框架的多智能体编排系统,支持本地开发或作为托管工作流部署在Azure AI Foundry上。

工具数

3

提示词数

0

GitHub Stars

0

资源数

0
云部署PythonAI代理

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

msftse

提供方

msftse

最后核验

2026/5/17 20:22

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

pip install -e .

详细介绍

使用Microsoft Agent框架的多Agent群聊

系统同时支持这两种功能 本地开发云部署 作为上的托管工作流 Azure AI Foundry.

The multi-agent workflow running in Azure AI Foundry — the Orchestrator routes a user query to the JiraAgent, which returns matching Jira issues via MCP.

目录

- 本地模式 - Azure AI Foundry部署 -

建筑

该项目支持两种编排模式,它们共享相同的代理和MCP工具:

顺序(群聊)

一种中心轮辐模式,编排者委托给 一次一个代理人 在循环中:

                                  ┌──────────────┐
                                  │  SlackAgent   │
                              ┌──>│  (MCP / SSE)  │──> APIM ──> Slack
                              │   └──────────────┘
┌──────┐    ┌──────────────┐  │   ┌──────────────┐
│ User │───>│ Orchestrator │──┼──>│  JiraAgent    │──> APIM ──> Jira
└──────┘    │   (GPT-4o)   │  │   │  (MCP / SSE)  │
            └──────────────┘  │   └──────────────┘
                              │   ┌──────────────┐
                              └──>│ GitHubAgent   │──> GitHub Copilot MCP
                                  │  (MCP / SSE)  │
                                  └──────────────┘

并联(扇出/扇入)

编排者选择 同时使用多个代理,它们都会执行,合成器会将它们的结果组合成一个最终答案:

                              ┌──────────────┐
                          ┌──>│  SlackAgent   │──┐
                          │   └──────────────┘   │
┌──────┐    ┌─────────┐  │   ┌──────────────┐   │   ┌──────────────┐
│ User │───>│ Router  │──┼──>│  JiraAgent    │──┼──>│ Synthesizer  │───> Final Answer
└──────┘    │(GPT-4o) │  │   └──────────────┘   │   │   (GPT-4o)   │
            └─────────┘  │   ┌──────────────┐   │   └──────────────┘
                          └──>│ GitHubAgent   │──┘
                              └──────────────┘
模式入口点代理如何连接到MCP服务器
本地(顺序)main.py定制包装(RawMCPSseTool, RawMCPStdioTool)直接连接
本地(并行)main_parallel.py相同的包装器,代理通过并发运行 asyncio.gather
铸造厂(顺序)pipeline/publish.py本地MCP工具定义(type: "mcp")--Foundry运行时代表代理进行连接
铸造厂(平行)pipeline/publish_parallel.py相同的原生MCP工具,通过条件代理调用扇出

特性

  • 两种编排模式 --顺序(群聊)用于迭代多回合路由,并行(扇出/扇入)用于并发多代理执行,并具有合成结果
  • 基于意图的路由 --编排器分析每个用户消息并将其委托给正确的代理
  • 三名专业代理 --Slack、Jira和GitHub,每个都有完整的MCP工具访问权限
  • 双执行模式 --在本地运行以进行开发或部署到Azure AI Foundry进行生产
  • 本地MCP集成 --Foundry托管代理使用本地MCP工具定义来执行服务器端工具
  • 安全的凭证处理 --通过Foundry进行GitHub MCP认证 项目连接,不是内联秘密
  • 声明性工作流 --Foundry部署使用具有条件路由的YAML工作流

MCP工具服务器

服务器传输端点描述
SlackSSE通过APIMhttps://.azure-api.net/slack-mcp-1/sse频道列表、消息历史、发布消息
JiraSSE通过APIMhttps://.azure-api.net/jira-mcp-1/sse问题搜索、项目列表、冲刺管理
GitHubSSE(远程)https://api.githubcopilot.com/mcp/存储库浏览、文件访问、问题管理

Slack和Jira MCP服务器托管在 Azure API管理 作为远程MCP网关。有关设置自己的APIM托管MCP服务器,请参阅:

msftse/remote mcp-apim函数python --在具有OAuth 2.0身份验证的APIM网关后面的Azure Functions和容器应用程序上部署远程MCP服务器。

GitHub使用托管 直接通过Foundry项目连接进行身份验证。

项目结构

.
├── main.py                        # Local entrypoint — sequential group chat
├── main_parallel.py               # Local entrypoint — parallel fan-out/fan-in
├── pyproject.toml                 # Project metadata and dependencies
├── .env.example                   # Environment variable template
│
├── .github/workflows/
│   └── ci-cd.yml                  # GitHub Actions: lint → deploy → evaluate
│
├── evaluation/                    # Agent evaluation suite
│   ├── run_evaluation.py          # Agent target evaluation runner
│   ├── agent_eval_data.jsonl      # 40 query-only test cases for live eval
│   ├── evaluation_data.jsonl      # Full test cases with expected agents & tools
│   └── tool_definitions.json      # MCP tool schemas for all agents
│
├── pipeline/                      # Azure AI Foundry deployment
│   ├── agents.py                  # Agent factories — sequential workflow
│   ├── publish.py                 # CLI: register/deploy/verify — sequential
│   ├── workflow.yaml              # Declarative workflow — sequential routing
│   ├── parallel_agents.py         # Agent factories — parallel workflow (Router + Synthesizer + 3 tool agents)
│   ├── publish_parallel.py        # CLI: register/deploy/verify — parallel
│   └── parallel_workflow.yaml     # Declarative workflow — fan-out via 3 ConditionGroups
│
└── src/                           # Core application code
    ├── config.py                  # Centralized configuration from .env
    ├── workflow.py                # GroupChat builder (sequential, local mode)
    ├── parallel_workflow.py       # Fan-out/fan-in builder (parallel, local mode)
    ├── prompts/                   # Agent names, instructions, and descriptions
    │   ├── orchestrator.py        # Sequential orchestrator prompt
    │   ├── parallel_orchestrator.py # Router + Synthesizer prompts
    │   ├── slack.py
    │   ├── jira.py
    │   └── github.py
    ├── agents/                    # Local agent factories with MCP wrappers
    │   ├── orchestrator.py        # Sequential orchestrator factory
    │   ├── parallel_orchestrator.py # Router + Synthesizer factories
    │   ├── slack_agent.py
    │   ├── jira_agent.py
    │   └── github_agent.py
    └── tools/                     # MCP transport wrappers
        ├── raw_mcp_sse.py         # SSE transport (Slack, Jira via APIM)
        └── raw_mcp_stdio.py       # Stdio transport (GitHub MCP server binary)

先决条件

  • Python 3.10+
  • Azure OpenAI 资源与a gpt-4o (或同等)模型部署
  • MCP服务器 可通过APIM(Slack、Jira)或远程(GitHub)访问——请参阅 MCP工具服务器
  • Azure AI Foundry项目 随着 DefaultAzureCredential 访问 *(仅适用于云部署)*

入门指南

1.克隆存储库并安装依赖项

git clone https://github.com//multi-agents-poc-maf.git
cd multi-agents-poc-maf
pip install -e .

2.配置环境变量

cp .env.example .env

编辑 .env 并填写你的价值观。看 .env.example 查看完整列表。

必需变量

变量描述
AZURE_OPENAI_ENDPOINT您的Azure OpenAI资源端点
AZURE_OPENAI_API_KEYAzure OpenAI API密钥
SLACK_MCP_SSE_URLAPIM托管的Slack MCP SSE端点
JIRA_MCP_SSE_URLAPIM托管Jira MCP SSE端点
GITHUB_PERSONAL_ACCESS_TOKEN用于MCP身份验证的GitHub个人访问令牌

Foundry部署所需

变量描述
AZURE_AI_PROJECT_ENDPOINTAzure AI Foundry项目端点
AZURE_SUBSCRIPTION_IDAzure订阅ID
AZURE_AI_RESOURCE_GROUP包含Foundry项目的资源组
AZURE_AI_PROJECT_NAME铸造项目名称

用法

本地模式

在本地运行多代理系统。选择 顺序的 (群聊)或 平行 (扇出/扇入)模式。

顺序(群聊)

编排器在循环中将您的请求一次路由到一个代理:

# Interactive mode
python main.py

# Single task
python main.py "List my Slack channels"
python main.py "What Jira tickets are assigned to me?"
python main.py "List my GitHub repositories"

并联(扇出/扇入)

路由器一次选择多个代理,它们并发执行,合成器组合结果:

# Interactive mode
python main_parallel.py

# Single task — multi-agent queries benefit most from parallel execution
python main_parallel.py "List Slack channels and Jira projects"
python main_parallel.py "Show my GitHub repos and recent Slack messages"

Azure AI Foundry部署

注册代理并将工作流部署到Azure AI Foundry,作为Foundry UI中可见的托管代理。

顺序工作流

# Register agents and workflow
python -m pipeline.publish --register

# Deploy via ARM API
python -m pipeline.publish --deploy

# Verify the deployed workflow
python -m pipeline.publish --verify

并行工作流

# Register agents (Router, Synthesizer, 3 tool agents) and workflow
python -m pipeline.publish_parallel --register

# Deploy via ARM API
python -m pipeline.publish_parallel --deploy

# Verify the deployed workflow
python -m pipeline.publish_parallel --verify

您还可以在Foundry中注册代理,并通过Foundry提供商在本地运行任务:

# Sequential
python -m pipeline.publish --run "Show my recent Slack messages"

# Parallel
python -m pipeline.publish_parallel --run "List Slack channels and Jira projects"

GitHub MCP连接设置

GitHub MCP服务器需要通过 铸造项目连接 (不是内联标头——Foundry拒绝这些标头)。创建一个 CustomKeys Foundry项目中的连接:

选项1:Azure门户

  1. 导航到您的AI Foundry项目 Azure 门户.
  2. 首选 互联资源 > +新建连接 > 自定义密钥.
  3. 凭证名称Authorization凭证值Bearer .
  4. 命名连接 github-mcp-pat.

选项2:Azure CLI

az rest --method put \
  --url "https://management.azure.com//connections/github-mcp-pat?api-version=2025-04-01-preview" \
  --body '{
    "properties": {
      "authType": "CustomKeys",
      "category": "CustomKeys",
      "target": "https://api.githubcopilot.com/mcp/",
      "isSharedToAll": true,
      "credentials": {
        "keys": {
          "Authorization": "Bearer "
        }
      }
    }
  }'
注:project_connection_id 本地MCP工具定义中的字段接受连接 名字 (例如。, github-mcp-pat),不是完整的ARM资源ID。

CI/CD

该存储库包括一个GitHub Actions管道(.github/workflows/ci-cd.yml)它自动化了linting、部署和评估:

Lint  ──>  Deploy to Foundry  ──>  Evaluate Workflow
阶段触发器它的作用
棉绒推送、PR、手动运行 ruff checkruff format --check
部署推到 main,manual在Foundry中注册代理和工作流程,通过ARM API部署,运行烟雾测试。部署步骤公开新注册的代理版本(例如。 MultiAgentGroupChat:21)作为工作输出。
评估推到 main,手动运行官方 microsoft/ai-agent-evals GitHub针对刚刚部署的版本采取行动。结果出现在两个地方:工作流程 评估 Foundry中的选项卡,以及 GitHub操作运行摘要 具有置信区间和(当传递多个代理版本时)成对统计比较。A. 质量门 然后,该步骤解析呈现的分数,当任何评估者低于生产阈值时,该步骤将失败 evaluation/quality_gate.py --因此回归剂阻断PR
注: 在pull请求中,只有Lint阶段运行。部署和评估需要推动 main 或手动触发器。
为什么是官方行动?microsoft/ai-agent-evals Action是微软在CI/CD中评估Foundry代理的标准路径——它处理数据集上传、 azure_ai_agent 目标、评估器接线(包括自动映射 tool_definitions 用于工具调用评估器)、轮询和报告呈现。看 微软学习。

必需的GitHub机密

在中配置这些 设置>秘密和变量>操作:

机密描述
AZURE_CREDENTIALS服务主体JSON(来自 az ad sp create-for-rbac --json-auth)
AZURE_AI_PROJECT_ENDPOINT铸造项目终点(`https://.services.ai.azure.com/api/projects/
`)
AZURE_OPENAI_ENDPOINTAzure OpenAI资源端点
AZURE_OPENAI_API_KEYAzure OpenAI API密钥
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME模型部署名称(例如。 gpt-4o)
AZURE_AI_MODEL_DEPLOYMENT_NAMEFoundry模型部署名称
AZURE_SUBSCRIPTION_IDAzure订阅ID
AZURE_RESOURCE_GROUP一般资源组
AZURE_AI_RESOURCE_GROUP包含Foundry项目的资源组
AZURE_AI_PROJECT_NAME铸造项目名称
SLACK_MCP_SSE_URLAPIM托管的Slack MCP SSE端点
JIRA_MCP_SSE_URLAPIM托管Jira MCP SSE端点
GH_PAT用于MCP身份验证的GitHub个人访问令牌
GH_MCP_URLGitHub Copilot MCP端点

服务主要角色

用于CI/CD的服务主体需要在 认知服务帐户 支持您的Foundry项目:

角色为什么
贡献者ARM级操作(部署工作流、管理资源)
认知服务用户数据平面操作(agents/write, agents/read).必需,因为代理CRUD在以下情况下使用数据操作 Microsoft.CognitiveServices/accounts/AIServices/*,这些不在贡献者或Azure AI开发人员的覆盖范围内。

为他们分配:

# Contributor on the subscription (or scope to resource group)
az role assignment create \
  --assignee  \
  --role "Contributor" \
  --scope /subscriptions/

# Cognitive Services User on the Cognitive Services account
az role assignment create \
  --assignee  \
  --role "Cognitive Services User" \
  --scope /subscriptions//resourceGroups//providers/Microsoft.CognitiveServices/accounts/

手动触发

您可以通过以下方式手动触发管道 操作>CI/CD>运行工作流,可以选择跳过评估步骤。

评估

该项目提供了两种评估部署情况的方法 多代理群聊 工作流程。两者都通过 铸造云评估API 并将结果发布到工作流 评估 Foundry门户中的选项卡。

路径何时使用如何使用
GitHub官方行动 (在CI/CD中推荐)在每个推送/PR/夜间时间表上运行评估microsoft/ai-agent-evals --驱动由 evaluation/agent-eval-dataset.json
Python SDK脚本 (建议本地开发人员使用)迭代评估器配置,探索云评估SDKpython -m evaluation.run_evaluation

评估者

CI/CD数据集(evaluation/agent-eval-dataset.json)连接12个内置评估器,共同发出生产准备就绪信号:

类别评估者它衡量什么
代理人行为builtin.intent_resolution代理是否识别用户的意图?
代理人行为builtin.task_adherence响应是否符合代理分配的任务?
代理人行为builtin.task_completion代理是否端到端完成了任务?
工具使用builtin.tool_call_accuracy客服是否使用正确的参数调用了正确的MCP工具?
工具使用builtin.tool_selection客服是否选择了必要的工具?
工具使用builtin.tool_call_success工具调用是否成功,没有出现技术错误?
质量builtin.coherence反应在逻辑上是否连贯?
质量builtin.fluency回复写得好吗?
安全builtin.violence, builtin.hate_unfairness, builtin.self_harm, builtin.sexual该代理是否会释放不安全的内容?

路径1——微软官方行动(CI/CD)

工作流已经将其连接起来。每次推 main 对刚刚部署的版本运行官方Action,并在GitHub Actions run中呈现摘要表:

- name: Run Microsoft AI Agent Evaluation
  uses: microsoft/ai-agent-evals@v3-beta
  with:
    azure-ai-project-endpoint: ${{ secrets.AZURE_AI_PROJECT_ENDPOINT }}
    deployment-name: ${{ secrets.AZURE_AI_MODEL_DEPLOYMENT_NAME }}
    agent-ids: ${{ needs.deploy.outputs.agent_id }}    # e.g. MultiAgentGroupChat:21
    data-path: ${{ github.workspace }}/evaluation/agent-eval-dataset.json

Action处理数据集上传、评估器连接(包括自动映射) tool_definitions 对于工具调用评估器)、轮询和呈现。要通过统计显著性测试并排比较两个版本,请用逗号分隔:

agent-ids: "MultiAgentGroupChat:20,MultiAgentGroupChat:21"

质量门——块回归

The Action报告得分,但确实如此 以低分不及格。回购船 evaluation/quality_gate.py 它解析Action的GitHub步骤摘要,应用每个评估者的阈值,并在任何回归中退出非零。在操作后立即将其连接到工作流中:

- name: Quality gate
  if: always()
  run: python evaluation/quality_gate.py

编辑 THRESHOLDS dict in quality_gate.py 以匹配您的生产标准(默认值:行为/工具评估员的通过率为70%,响应质量为80-90%,四名安全评估员为95%)。当关卡失败时,作业和PR检查也会失败,降价摘要会得到一个“质量关卡:失败”表,其中包含违规指标和增量,以便审阅者立即看到退化的内容。

路径2-Python SDK脚本(本地开发)

pip install -e ".[eval]"
python -m evaluation.run_evaluation

evaluation/run_evaluation.py 是底层的一个独立示例 azure-ai-projects 云评估SDK --它创建了一个 azure_ai_target_completions 具有a的数据源 azure_ai_agent 目标,附三名评估员(intent_resolution, tool_call_accuracy, task_adherence),轮询完成情况,并将详细结果保存到 evaluation/agent_eval_results.json。当您需要Action不公开的细粒度控制时,请将其用作参考(自定义评估器参数、 azure_ai_responses 用于通过ID等评估过去响应的流程)。

查看结果

  • 铸造门户 --在中打开您的工作流 铸造厂 然后前往 评估 选项卡。
  • GitHub操作摘要 --该操作直接在工作流运行下发布了一个每个评估者的评分表,其中包含置信区间。

评估数据集

40个查询,分为四类:

类别计数路由目标
Slack10SlackAgent
Jira12Jira代理
GitHub12GitHubAgent
多代理6多步查询测试第一跳路由

评估文件

文件描述
evaluation/agent-eval-dataset.json由消耗的CI/CD数据集 microsoft/ai-agent-evals (查询+评估者列表)
evaluation/agent_eval_data.jsonlPython SDK脚本使用的仅查询数据集
evaluation/evaluation_data.jsonl包含预期代理、工具和参数的完整数据集(用于离线分析)
evaluation/tool_definitions.json所有三个代理的MCP工具模式
evaluation/run_evaluation.py云评估SDK示例(路径2)

关键设计决策

决定理由
Foundry的原生MCP工具字典工具代理使用原始 type: "mcp" 字典(不是 FunctionTool 包装器),因此Foundry运行时在执行时连接到MCP服务器。这是必需的,因为Foundry拒绝包含敏感数据的内联身份验证标头。
双执行模式本地模式使用自定义MCP包装器(RawMCPSseTool, RawMCPStdioTool)用于直接连接;Foundry模式使用本机MCP工具定义。两者共享相同的提示和配置。
身份验证的项目连接GitHub MCP认证使用Foundry CustomKeys 连接而不是内联标头,遵循Foundry的敏感凭据安全模型。
声明式工作流YAMLFoundry部署使用 ConditionGroup 用于基于意图的路由和 kind: If 随着 GotoAction 对于多循环,保持编排逻辑的声明性和版本控制。
平行扇出/扇入并行工作流使用Router代理预先选择代理,并发调用它们(通过本地 asyncio.gather,在Foundry通过3独立 ConditionGroup 并且合成器将所有结果组合成单个综合答案。Foundry YAML缺少原生并行原语,因此独立 ConditionGroup 块模拟扇出。
集中式配置所有设置都通过键入的 Config 数据类在 src/config.py,从加载 .env 通过 load_config().

已知限制

  • 多步布线:循环机制(GotoAction)在Foundry托管的工作流中第一个子代理完成后,不会可靠地启动。每个用户的单代理路由正常工作。
  • SDK预览:此项目使用Microsoft Agent Framework SDK的预发布版本。API在未来的版本中可能会发生变化。

资源

目录标签

目录标签

云部署PythonAI代理多智能体协作本地部署AzureAIFoundry模型上下文协议智能路由

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

oauth

工具数量(toolCount,工具数)

3

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiooauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP