Python全栈项目--多智能体协作代码生成器

项目简介

在AI驱动的软件开发时代,我们可以利用多个智能体协作来完成复杂的编程任务。本项目将构建一个多智能体协作系统,其中一个智能体负责生成详细的实施方案,另一个智能体则根据方案编写具体代码。这种分工协作的方式模拟了真实软件开发中"架构师"和"工程师"的协作模式。

系统架构

核心组件

  1. 规划智能体(Planner Agent)

    • 负责分析用户需求
    • 生成详细的技术实施方案
    • 制定代码结构和模块划分
  2. 编码智能体(Coder Agent)

    • 接收规划智能体的方案
    • 按照方案逐步实现代码
    • 生成完整的可执行代码
  3. 协调器(Coordinator)

    • 管理两个智能体之间的通信
    • 控制工作流程
    • 处理结果的整合和展示

技术栈

  • 后端框架: Flask
  • AI模型: Claude API (Anthropic)
  • 前端: HTML + CSS + JavaScript
  • 数据处理: JSON

核心实现

1. 智能体基类

import anthropic
import os

class BaseAgent:
    """智能体基类"""
    def __init__(self, role, system_prompt):
        self.role = role
        self.system_prompt = system_prompt
        self.client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))
    
    def execute(self, user_input, context=""):
        """执行智能体任务"""
        messages = []
        if context:
            messages.append({
                "role": "user",
                "content": f"上下文信息:\n{context}\n\n当前任务:\n{user_input}"
            })
        else:
            messages.append({
                "role": "user",
                "content": user_input
            })
        
        response = self.client.messages.create(
            model="claude-sonnet-4-20250514",
            max_tokens=4000,
            system=self.system_prompt,
            messages=messages
        )
        
        return response.content[0].text

2. 规划智能体

class PlannerAgent(BaseAgent):
    """规划智能体 - 负责生成实施方案"""
    def __init__(self):
        system_prompt = """你是一个资深的软件架构师和技术方案设计专家。
        
你的职责是:
1. 深入分析用户的需求
2. 设计清晰的技术实施方案
3. 规划代码结构和模块划分
4. 列出关键实现步骤和注意事项

请以结构化的方式输出方案,包含:
- 需求分析
- 技术选型
- 系统架构
- 模块设计
- 实现步骤
- 关键代码结构

方案要足够详细,让另一个智能体能够直接按照方案编写代码。"""
        
        super().__init__("Planner", system_prompt)
    
    def generate_plan(self, requirement):
        """生成实施方案"""
        prompt = f"请为以下需求设计详细的技术实施方案:\n\n{requirement}"
        return self.execute(prompt)

3. 编码智能体

class CoderAgent(BaseAgent):
    """编码智能体 - 负责根据方案编写代码"""
    def __init__(self):
        system_prompt = """你是一个经验丰富的Python开发工程师。

你的职责是:
1. 仔细阅读技术实施方案
2. 严格按照方案要求编写代码
3. 确保代码质量和可读性
4. 添加必要的注释和文档

代码要求:
- 遵循PEP 8规范
- 包含完整的错误处理
- 添加清晰的注释
- 确保代码可以直接运行

请输出完整的、可执行的Python代码。"""
        
        super().__init__("Coder", system_prompt)
    
    def generate_code(self, plan, requirement):
        """根据方案生成代码"""
        prompt = f"请根据以下实施方案编写完整的Python代码:\n\n原始需求:\n{requirement}\n\n实施方案:\n{plan}"
        return self.execute(prompt, context=plan)

4. 协调器

class MultiAgentCoordinator:
    """多智能体协调器"""
    def __init__(self):
        self.planner = PlannerAgent()
        self.coder = CoderAgent()
    
    def process_requirement(self, requirement):
        """处理用户需求,协调两个智能体工作"""
        print("=" * 60)
        print("阶段 1: 规划智能体正在生成实施方案...")
        print("=" * 60)
        
        # 第一步: 生成方案
        plan = self.planner.generate_plan(requirement)
        print("\n实施方案:")
        print(plan)
        
        print("\n" + "=" * 60)
        print("阶段 2: 编码智能体正在根据方案编写代码...")
        print("=" * 60)
        
        # 第二步: 生成代码
        code = self.coder.generate_code(plan, requirement)
        print("\n生成的代码:")
        print(code)
        
        return {
            "requirement": requirement,
            "plan": plan,
            "code": code
        }

5. Flask Web应用

from flask import Flask, render_template, request, jsonify

app = Flask(__name__)
coordinator = MultiAgentCoordinator()

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/generate', methods=['POST'])
def generate():
    try:
        data = request.json
        requirement = data.get('requirement', '')
        
        if not requirement:
            return jsonify({"error": "需求不能为空"}), 400
        
        result = coordinator.process_requirement(requirement)
        
        return jsonify({
            "success": True,
            "plan": result["plan"],
            "code": result["code"]
        })
    
    except Exception as e:
        return jsonify({
            "success": False,
            "error": str(e)
        }), 500

if __name__ == '__main__':
    app.run(debug=True, port=5000)

6. 前端界面

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>多智能体协作代码生成器</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            padding: 20px;
        }
        
        .container {
            max-width: 1200px;
            margin: 0 auto;
            background: white;
            border-radius: 20px;
            box-shadow: 0 20px 60px rgba(0,0,0,0.3);
            overflow: hidden;
        }
        
        header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            text-align: center;
        }
        
        h1 {
            font-size: 2em;
            margin-bottom: 10px;
        }
        
        .subtitle {
            opacity: 0.9;
            font-size: 1.1em;
        }
        
        .content {
            padding: 40px;
        }
        
        .input-section {
            margin-bottom: 30px;
        }
        
        label {
            display: block;
            font-weight: 600;
            margin-bottom: 10px;
            color: #333;
            font-size: 1.1em;
        }
        
        textarea {
            width: 100%;
            padding: 15px;
            border: 2px solid #e0e0e0;
            border-radius: 10px;
            font-size: 1em;
            font-family: inherit;
            resize: vertical;
            transition: border-color 0.3s;
        }
        
        textarea:focus {
            outline: none;
            border-color: #667eea;
        }
        
        button {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            border: none;
            padding: 15px 40px;
            font-size: 1.1em;
            border-radius: 10px;
            cursor: pointer;
            transition: transform 0.2s, box-shadow 0.2s;
            font-weight: 600;
        }
        
        button:hover {
            transform: translateY(-2px);
            box-shadow: 0 10px 20px rgba(102, 126, 234, 0.4);
        }
        
        button:active {
            transform: translateY(0);
        }
        
        button:disabled {
            opacity: 0.6;
            cursor: not-allowed;
            transform: none;
        }
        
        .results {
            margin-top: 40px;
        }
        
        .result-section {
            margin-bottom: 30px;
            background: #f8f9fa;
            border-radius: 10px;
            overflow: hidden;
        }
        
        .result-header {
            background: #667eea;
            color: white;
            padding: 15px 20px;
            font-weight: 600;
            font-size: 1.1em;
        }
        
        .result-content {
            padding: 20px;
            max-height: 500px;
            overflow-y: auto;
        }
        
        pre {
            background: #2d2d2d;
            color: #f8f8f2;
            padding: 20px;
            border-radius: 8px;
            overflow-x: auto;
            font-size: 0.9em;
            line-height: 1.5;
        }
        
        .loading {
            text-align: center;
            padding: 40px;
            color: #667eea;
            font-size: 1.2em;
        }
        
        .spinner {
            border: 4px solid #f3f3f3;
            border-top: 4px solid #667eea;
            border-radius: 50%;
            width: 40px;
            height: 40px;
            animation: spin 1s linear infinite;
            margin: 20px auto;
        }
        
        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }
        
        .hidden {
            display: none;
        }
        
        .error {
            background: #fee;
            color: #c33;
            padding: 15px;
            border-radius: 8px;
            margin-top: 20px;
        }
    </style>
</head>
<body>
    <div class="container">
        <header>
            <h1>🤖 多智能体协作代码生成器</h1>
            <p class="subtitle">规划智能体 + 编码智能体 = 高效代码生成</p>
        </header>
        
        <div class="content">
            <div class="input-section">
                <label for="requirement">请输入您的需求描述:</label>
                <textarea 
                    id="requirement" 
                    rows="6" 
                    placeholder="例如:创建一个简单的待办事项管理系统,支持添加、删除、标记完成功能..."></textarea>
                <br><br>
                <button onclick="generateCode()" id="generateBtn">
                    🚀 开始生成
                </button>
            </div>
            
            <div id="loading" class="loading hidden">
                <div class="spinner"></div>
                <p>智能体正在协作处理中,请稍候...</p>
            </div>
            
            <div id="error" class="error hidden"></div>
            
            <div id="results" class="results hidden">
                <div class="result-section">
                    <div class="result-header">
                        📋 规划智能体 - 实施方案
                    </div>
                    <div class="result-content">
                        <pre id="planOutput"></pre>
                    </div>
                </div>
                
                <div class="result-section">
                    <div class="result-header">
                        💻 编码智能体 - 生成代码
                    </div>
                    <div class="result-content">
                        <pre id="codeOutput"></pre>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    <script>
        async function generateCode() {
            const requirement = document.getElementById('requirement').value.trim();
            const generateBtn = document.getElementById('generateBtn');
            const loading = document.getElementById('loading');
            const results = document.getElementById('results');
            const error = document.getElementById('error');
            
            if (!requirement) {
                error.textContent = '请输入需求描述';
                error.classList.remove('hidden');
                return;
            }
            
            // 重置状态
            error.classList.add('hidden');
            results.classList.add('hidden');
            loading.classList.remove('hidden');
            generateBtn.disabled = true;
            
            try {
                const response = await fetch('/generate', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify({ requirement })
                });
                
                const data = await response.json();
                
                if (data.success) {
                    document.getElementById('planOutput').textContent = data.plan;
                    document.getElementById('codeOutput').textContent = data.code;
                    results.classList.remove('hidden');
                } else {
                    throw new Error(data.error || '生成失败');
                }
            } catch (err) {
                error.textContent = '错误: ' + err.message;
                error.classList.remove('hidden');
            } finally {
                loading.classList.add('hidden');
                generateBtn.disabled = false;
            }
        }
        
        // 支持Enter键提交(Ctrl+Enter)
        document.getElementById('requirement').addEventListener('keydown', function(e) {
            if (e.ctrlKey && e.key === 'Enter') {
                generateCode();
            }
        });
    </script>
</body>
</html>

项目结构

multi-agent-code-generator/
├── app.py                 # Flask主应用
├── agents/
│   ├── __init__.py
│   ├── base_agent.py     # 智能体基类
│   ├── planner.py        # 规划智能体
│   ├── coder.py          # 编码智能体
│   └── coordinator.py    # 协调器
├── templates/
│   └── index.html        # 前端页面
├── static/
│   ├── css/
│   └── js/
├── requirements.txt      # 依赖包
└── README.md

使用说明

1. 安装依赖

pip install flask anthropic

2. 配置API密钥

export ANTHROPIC_API_KEY="your-api-key-here"

3. 运行应用

python app.py

4. 访问界面

打开浏览器访问 http://localhost:5000

使用示例

示例1:待办事项管理器

输入需求:

创建一个简单的待办事项管理系统,支持:
1. 添加任务
2. 删除任务
3. 标记任务完成
4. 显示所有任务
使用命令行界面

规划智能体输出:

  • 需求分析:简单的CRUD操作
  • 数据结构:使用列表存储任务字典
  • 功能模块:任务管理类 + 用户界面
  • 实现步骤:定义数据结构 → 实现核心功能 → 构建CLI界面

编码智能体输出: 完整的Python代码,包含Task类、TodoManager类和main函数

示例2:文件处理工具

输入需求:

开发一个批量文件重命名工具,可以:
1. 读取指定目录下的所有文件
2. 根据规则批量重命名
3. 支持添加前缀、后缀
4. 支持序号命名

工作流程:

  1. 规划智能体分析需求,设计文件操作流程
  2. 编码智能体实现具体功能代码

核心优势

1. 职责分离

  • 规划智能体专注于架构设计和方案规划
  • 编码智能体专注于代码实现和质量保证
  • 各司其职,提高生成质量

2. 结构化输出

  • 方案和代码分别呈现
  • 便于理解实现思路
  • 方便代码审查和优化

3. 可扩展性

  • 易于添加新的智能体(如测试智能体、优化智能体)
  • 可以构建更复杂的多智能体协作流程
  • 支持不同编程语言的代码生成

4. 实用性强

  • 真实模拟软件开发流程
  • 生成的代码可直接使用
  • 适合学习和实际开发

进阶扩展

1. 添加审查智能体

class ReviewerAgent(BaseAgent):
    """代码审查智能体"""
    def review_code(self, code, plan):
        # 审查代码质量
        # 检查是否符合方案要求
        # 提出改进建议
        pass

2. 添加测试智能体

class TesterAgent(BaseAgent):
    """测试智能体 - 生成测试用例"""
    def generate_tests(self, code):
        # 分析代码
        # 生成单元测试
        # 生成集成测试
        pass

3. 迭代优化流程

  • 规划 → 编码 → 审查 → 优化 → 测试
  • 形成完整的开发闭环

4. 支持多语言

  • 扩展支持Java、JavaScript、Go等
  • 针对不同语言配置不同的编码智能体

最佳实践

  1. 清晰的需求描述:提供详细、明确的需求说明
  2. 合理的任务拆分:将复杂任务分解为多个小任务
  3. 充分的上下文:为智能体提供必要的背景信息
  4. 迭代式优化:根据结果逐步改进需求描述

技术要点

Prompt Engineering

  • 为每个智能体设计专门的系统提示词
  • 明确角色定位和职责边界
  • 提供清晰的输出格式要求

上下文管理

  • 规划方案作为编码智能体的上下文
  • 保持信息在智能体间的有效传递
  • 避免上下文过长导致的性能问题

错误处理

  • 完善的异常捕获机制
  • 友好的错误提示
  • 支持重试和回滚

总结

多智能体协作代码生成器展示了AI在软件开发中的应用潜力。通过合理的分工和协作,可以生成高质量的代码和方案。这个项目不仅是一个实用工具,更是学习AI应用开发、理解多智能体系统的绝佳案例。

未来可以继续扩展更多智能体,构建更完善的AI辅助开发工具链,让AI真正成为开发者的得力助手。


参考资源

项目代码

下载链接

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天进步2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值