多代理开发管道
基于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______________________________________________________________________
