多代理开发管道

一个由AI驱动的软件开发工作流,通过三个自治代理(产品经理、开发者和架构师)模拟真实开发团队,从自然语言需求到代码提交和审查的全流程自动化。

  • by VitalyTarasiu
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 VitalyTarasiu/MCP-dev-pipline

使用说明

多代理开发管道

基于AI构建的软件开发工作流程 微软AutoGen v0.4三个自主代理模拟了一个真实的开发团队: 产品经理 创建Jira任务,a 开发者 编写代码并打开PR,以及 建筑师 审查代码——所有这些都是由单一的自然语言需求驱动的。


代理

代理 LLM模型 角色 工具
产品经理 gpt-4o-mini 将用户需求转化为结构化的Jira任务 create_jira_issue
开发者 gpt-4o-mini 读取Jira票证,探索仓库,实现代码,创建PR get_jira_issue, get_repo_tree, get_file_content, create_branch, create_or_update_file, create_pull_request, add_jira_comment
建筑师 gpt-4o 审查PR差异,批准或请求更改 get_pr_diff, get_pr_files, get_file_content, add_pr_review, approve_pull_request
开发人员(修复模式) gpt-4o-mini 读取架构师的审查意见,将修复推送到同一分支 get_pr_reviews, get_pr_review_comments, get_file_content, create_or_update_file

管道流量

                        ┌─────────────────────────┐
                        │   User types requirement │
                        │   in plain English       │
                        └────────────┬────────────┘
                                     │
                     ┌───────────────▼───────────────┐
                     │  Phase 1: Product Manager     │
                     │  ─────────────────────────    │
                     │  • Parses the requirement     │
                     │  • Creates Jira task           │
                     │  • Auto-assigns to user        │
                     │  Model: gpt-4o-mini            │
                     └───────────────┬───────────────┘
                                     │ Jira key (e.g. TUP-4609)
                     ┌───────────────▼───────────────┐
                     │  Phase 2: Developer            │
                     │  ─────────────────────────     │
                     │  • Reads Jira ticket           │
                     │  • Explores repository tree    │
                     │  • Reads source files           │
                     │  • Creates feature branch      │
                     │  • Commits code changes        │
                     │  • Creates Pull Request        │
                     │  • Comments PR link on Jira    │
                     │  Model: gpt-4o-mini             │
                     │  Context: independent          │
                     └───────────────┬───────────────┘
                                     │ PR number (e.g. #234)
                     ┌───────────────▼───────────────┐
              ┌─────►│  Phase 3a: Architect Review   │
              │      │  ─────────────────────────     │
              │      │  • Gets PR diff                │
              │      │  • Examines changed files      │
              │      │  • Checks correctness,         │
              │      │    completeness, quality,       │
              │      │    security, best practices     │
              │      │  • Submits review              │
              │      │  Model: gpt-4o                  │
              │      │  Context: independent          │
              │      └───────────┬────────┬──────────┘
              │                  │        │
              │            APPROVED   CHANGES_REQUESTED
              │                  │        │
              │                  │   ┌────▼────────────────────┐
              │                  │   │  Phase 3b: Developer Fix│
              │                  │   │  ───────────────────    │
              │                  │   │  • Reads review comments│
              │                  │   │  • Reads current code   │
              │                  │   │  • Pushes fixes         │
              │                  │   │  Model: gpt-4o-mini     │
              │                  │   │  Context: independent   │
              │                  │   └────────────┬───────────┘
              │                  │                │
              └──────────────────┘◄───────────────┘
              (max 3 review rounds)
                                     │
                     ┌───────────────▼───────────────┐
                     │  Pipeline Complete             │
                     │  PR is open — NOT merged       │
                     │  Manual merge required         │
                     └───────────────────────────────┘

AutoGen的使用方法——详细设计

架构:独立的单代理团队

此管道使用 AutoGen v0.4 (autogen-agentchat)经过深思熟虑的设计选择: 每个代理都在自己的独立团队中运行 而不是共享单个群聊。这给了每个代理一个完全独立的上下文——他们永远看不到彼此的内部推理。

# Each phase creates a FRESH agent + single-agent team
agent = AssistantAgent(
    name="developer",
    model_client=OpenAIChatCompletionClient(model="gpt-4o-mini", api_key=...),
    system_message=DEV_SYSTEM_MESSAGE,
    tools=[get_jira_issue, get_repo_tree, ...],
)
team = RoundRobinGroupChat(
    participants=[agent],
    termination_condition=TextMentionTermination("PHASE_COMPLETE") | MaxMessageTermination(60),
)
result = await Console(team.run_stream(task="Read Jira ticket TUP-123 and..."))

为什么选择单代理团队而不是共享群聊?

方法 共享 SelectorGroupChat 独立的单代理团队(我们使用什么)
上下文 所有代理都能看到所有消息 每个代理只能看到自己的任务
独立 代理可能会受到彼此推理的影响 真正的隔离——只能通过Jira/GitHub进行通信
每个代理的型号 每个代理可以有不同的模型✓ 每个代理可以有不同的模型✓
多步骤工具调用 由团队重新提示处理 由 RoundRobinGroupChat 重新提示
审查循环 需要复杂的选择器逻辑 简单的Python for 循环
每轮新的上下文 需要手动 on_reset() 每轮创建一个新的代理实例

使用的关键AutoGen部件

1. AssistantAgent --每个代理都是 AssistantAgent 配置有:

  • A. 系统消息 (角色说明、工作流程步骤、规则)
  • A. 模型客户端 (OpenAIChatCompletionClient 包装OpenAI模型)
  • A. 工具列表 (LLM可以调用的Python函数)

这 AssistantAgent 在内部处理工具调用循环:它调用LLM,如果LLM请求工具调用,则执行LLM,反馈结果,并重复,直到LLM生成最终的文本响应。

2. RoundRobinGroupChat --将单个代理打包成一个“团队”,该团队:

  • 将任务发送给代理
  • 如果代理人回应但没有说 PHASE_COMPLETE,重新提示它继续
  • 这对于 gpt-4o-mini 有时在几个工具调用后停止,而不是完成所有步骤

3. TextMentionTermination --当代理的响应包含特定字符串时,停止团队:

  • 项目经理、开发人员: "PHASE_COMPLETE"
  • 建筑师: "APPROVED" 或 "CHANGES_REQUESTED"

4. MaxMessageTermination --防止无限循环的安全网(每相最多60条消息)。

5. Console --将所有代理事件(工具调用、结果、文本响应)实时流式传输到stdout,以便您可以查看管道的工作情况。

代理商如何沟通

代理 从不 查看彼此的消息。它们仅通过外部系统进行通信:

PM ──creates──► Jira Issue ◄──reads── Developer
                                          │
                                     creates PR
                                          │
Developer ──comments──► Jira      GitHub PR ◄──reviews── Architect
                                          │
                                    review comments
                                          │
Developer (fix) ──reads──► PR reviews ◄──writes── Architect

审查循环(Python编排)

审查循环是一个简单的Python for 循环--不是AutoGen编排:

for round_num in range(1, 4):  # max 3 rounds
    # Create FRESH architect (independent context)
    arch = AssistantAgent(name="architect", model_client=gpt4o, ...)
    arch_team = RoundRobinGroupChat([arch], ...)
    arch_result = await Console(arch_team.run_stream(task=f"Review PR #{pr}"))

    if "APPROVED" in arch_result:
        break  # Done!

    # Create FRESH developer (independent context)
    dev = AssistantAgent(name="developer", model_client=gpt4o_mini, ...)
    dev_team = RoundRobinGroupChat([dev], ...)
    await Console(dev_team.run_stream(task=f"Fix review comments on PR #{pr}"))

每次迭代都会创建 新代理实例 --这保证了架构师在每一轮都会重新审查PR,而不会记住之前的审查,开发人员在没有上下文的情况下阅读最新的审查评论。

自我批准解决方案

GitHub阻止批准您自己的PR(两个代理使用相同的令牌)。工具会自动回退:

APPROVE attempt → GitHub 422 error → fallback to COMMENT with "APPROVED" in body

管道检查 "APPROVED" 在文本中,这可以无缝地工作。


安装

# 1. Clone the repository
git clone https://github.com/VitalyTarasiu/MCP-dev-pipline.git
cd MCP-dev-pipline

# 2. Create virtual environment
python3 -m venv .venv
source .venv/bin/activate        # macOS / Linux
# .venv\Scripts\activate         # Windows

# 3. Install dependencies
pip install -r requirements.txt

依赖项

包装 用途
autogen-agentchat AutoGen v0.4代理框架
autogen-ext[openai] AutoGen的OpenAI模型客户端
tiktoken OpenAI模型的令牌计数
atlassian-python-api Jira REST API客户端
PyGithub GitHub REST API客户端
python-dotenv 负载 .env 配置

用法

python main.py

首次运行--交互式设置

首次运行时,CLI会提示进行Jira/GitHub配置 打开浏览器 对于缺少令牌时的SSO身份验证:

==========================================================
    Multi-Agent Development Pipeline
==========================================================

  Jira Configuration
  ----------------------------------------
  URL [https://think-up.atlassian.net]:
  User email [vitaly.tarasiuk@thinkup.global]:
  Project key [TUP]:

  Jira API token not found. Opening browser for token creation...
  1. Sign in with SSO if prompted
  2. Click 'Create API token'
  3. Name it (e.g. 'MCP Pipeline') and click Create
  4. Copy the token

  Press Enter to open the browser...
  Paste your Jira API token: ****

  GitHub Configuration
  ----------------------------------------
  Repo (owner/repo) [thinkup-global/api-controller]:
  Base branch [dev]:

  Found token from GitHub CLI (gh).       ← auto-detected

==========================================================

  Enter your requirement:
  > Add logging to the applyCoupon method for inactive promotion codes

==========================================================
  Jira     : https://think-up.atlassian.net (TUP)
  GitHub   : thinkup-global/api-controller (branch: dev)
  Assignee : vitaly.tarasiuk@thinkup.global
==========================================================

  Phase 1 -- Product Manager creating Jira task
  ...
  Phase 2 -- Developer implementing changes
  ...
  Phase 3.1a -- Architect reviewing PR #234
  ...
  ──────────────────────────────────────────────────────
  Architect Review (round 1):
  ──────────────────────────────────────────────────────
  The changes introduce proper logging for inactive promotion codes...
  - Correctness: Aligned with Jira task requirements ✓
  - Completeness: All existing code preserved ✓
  ...
  APPROVED
  ──────────────────────────────────────────────────────

  >>> PR #234 APPROVED by architect

==========================================================
  Pipeline Complete
  Jira : https://think-up.atlassian.net/browse/TUP-4609
  PR   : https://github.com/thinkup-global/api-controller/pull/234
  Status: PR is open -- NOT merged (manual merge required)
==========================================================

后续运行

所有凭据都保存到 .env (git忽略)。下一次运行时,您只需确认Jira项目、GitHub仓库,然后键入您的要求:

python main.py

身份验证流程

服务 如何进行身份验证
Jira 打开浏览器→ Atlassian SSO→ 创建API令牌→ 将其粘贴回去
GitHub 自动检测 gh CLI令牌。如果未找到:打开浏览器→ GitHub SSO→ 您可以使用以下命令创建PAT repo 范围→ 粘贴它
开放人工智能 打开浏览器→ OpenAI仪表板→ 复制API密钥→ 粘贴它

所有令牌都存储在 .env 并在未来的运行中重复使用。你可以自由切换Jira项目或GitHub仓库——这些代币在你的所有项目中都有效。


项目结构

MCP-dev-pipline/
├── main.py                  # Interactive CLI — prompts, browser auth, runs pipeline
├── config.py                # Reads .env into a Config dataclass
├── auth.py                  # Browser-based SSO helpers (legacy)
├── pipeline/
│   ├── __init__.py
│   └── dev_pipeline.py      # AutoGen agent orchestration + review loop
├── tools/
│   ├── __init__.py
│   ├── jira_tools.py        # create_jira_issue, get_jira_issue, add_jira_comment
│   └── github_tools.py      # branches, files, PRs, reviews, approve
├── requirements.txt
├── .env.example             # Template for environment variables
├── .env                     # Your credentials (git-ignored, auto-created)
├── .gitignore
└── README.md

配置

环境变量

变量 描述 默认值
OPENAI_API_KEY 用于LLM调用的OpenAI API密钥 (必填)
DEVELOPER_MODEL 开发人员和项目经理代理模型 gpt-4o-mini
ARCHITECT_MODEL 建筑师代理模型 gpt-4o
PM_MODEL PM代理模型 gpt-4o-mini
JIRA_URL 您的Jira实例URL (提示)
JIRA_USER 您的Jira电子邮件 (提示)
JIRA_API_TOKEN Jira API代币 (浏览器SSO)
JIRA_PROJECT_KEY Jira项目密钥(例如。 TUP) (提示)
GITHUB_TOKEN GitHub个人访问令牌 (自动/浏览器)
GITHUB_REPO 目标回购为 owner/repo (提示)
BASE_BRANCH 分行PR目标 dev

自定义模型

编辑 .env 交换模型:

DEVELOPER_MODEL=gpt-4o-mini    # cheap & fast for code generation
ARCHITECT_MODEL=gpt-4o          # smart for code review
PM_MODEL=gpt-4o-mini            # cheap for task creation

需求