纲要
- 项目背景与目标
- 系统架构与流程
- 团队组成:高级工程师、QA工程师、首席QA
- 工作流:编码 → 审查 → 评估
- 项目结构
- 核心实现:Agent、Task、Crew 的定义
- 完整可运行示例
- 纯代码定义,无需外部配置文件
- 生成贪吃蛇游戏
- 运行与效果展示
- 总结与相关度说明
项目背景
在软件开发中,高质量代码往往需要多人协作:工程师编写、QA审查、架构师评估。CrewAI天然适合模拟这种协作模式。我们用它构建一个游戏开发助手团队,专门负责根据需求文档生成可运行的游戏代码。这个团队包含三名成员:
- 高级软件工程师:负责主编码工作。
- QA工程师:负责审查代码,发现语法错误、逻辑缺陷和安全漏洞。
- 首席QA工程师:负责最终评估,确保代码完整且符合预期功能。
三者按顺序协作,确保输出的代码既正确又健壮。
系统架构与流程
工作流采用顺序执行模式,每个Agent依次处理上一个的输出:
项目结构
使用crewai create crew脚手架生成的标准项目结构,以下是本次游戏助手的主要文件:
game_builder/ ├── src/ │ └── game_builder/ │ ├── config/ │ │ ├── agents.yaml │ │ ├── tasks.yaml │ │ └── game_design.yaml │ ├── crew.py │ └── main.py ├── .env └── pyproject.tomlagents.yaml:定义三个智能体的角色、目标和背景故事。tasks.yaml:定义编码、审查、评估三项任务及依赖关系。game_design.yaml:存储多个游戏的需求文档(如贪吃蛇、吃豆人)。crew.py:组装智能体和任务,配置执行流程。main.py:入口,读取游戏需求并启动团队。
核心实现
Agent 定义
每个Agent都有明确的职责,例如高级工程师:
senior_engineer:role:"高级软件工程师"goal:"根据需求创建完美的软件代码"backstory:"你是一家领先科技公司的高级软件工程师,精通Python编程,致力于编写完美的代码。"QA工程师和首席QA类似,分别侧重代码审查和最终评估。
Task 定义
任务之间通过context建立依赖,确保前一任务完成后才执行下一个:
coding_task:description:"使用Python的Pygame框架创建一个游戏,遵循以下指令:{game_design}"expected_output:"完整的Python代码,仅包含代码本身"agent:senior_engineerreview_task:description:"检查代码中的错误,修正后输出完整代码。"expected_output:"修正后的完整Python代码"agent:qa_engineercontext:[coding_task]evaluate_task:description:"评估代码是否完整且能正常工作,输出最终版本。"expected_output:"最终可运行的完整Python代码"agent:chief_qacontext:[review_task]Crew 组装
在crew.py中使用@CrewBase修饰符将一切整合,并配置为顺序执行。
完整可运行示例
为方便直接运行,以下示例将所有配置内联到一个Python脚本中,无需外部YAML文件。运行后会生成贪吃蛇游戏代码并保存到snake_game.py。
环境准备
pipinstallcrewai langchain-openai python-dotenv代码game_builder.py
importosfromdotenvimportload_dotenvfromcrewaiimportAgent,Task,Crew,Processfromlangchain_openaiimportChatOpenAI load_dotenv()# 自定义大模型(可使用任何兼容OpenAI接口的服务)llm=ChatOpenAI(model=os.getenv("MODEL_NAME","gpt-3.5-turbo"),openai_api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL","https://api.openai.com/v1"))# 游戏需求文档game_design=""" 制作一个经典的贪吃蛇游戏,使用Pygame框架。 具体规则: - 蛇初始长度为3节,位于屏幕中央。 - 使用方向键控制蛇的移动。 - 随机生成食物,蛇吃到食物后长度增加1,分数加10。 - 蛇撞到边界或自身时游戏结束。 - 按空格键重新开始游戏。 - 左上角显示当前分数。 - 蛇身为绿色方块,食物为红色方块,背景为黑色。 """# 定义智能体engineer=Agent(role="高级软件工程师",goal="根据需求创建完美的Python游戏代码",backstory="你精通Python和Pygame,致力于编写清晰、可维护的代码。",llm=llm,verbose=True)qa=Agent(role="QA工程师",goal="审查代码并修正所有错误",backstory="你擅长发现代码中的逻辑错误、语法错误和潜在的bug。",llm=llm,verbose=True)chief=Agent(role="首席QA",goal="确保代码完整且能正常运行",backstory="你严格把关,确保最终交付的代码无懈可击。",llm=llm,verbose=True)# 定义任务coding_task=Task(description=f"使用Pygame创建贪吃蛇游戏。需求如下:{game_design}",agent=engineer,expected_output="完整的、可运行的Python代码,仅输出代码本身")review_task=Task(description="审查上一步生成的代码,找出并修正所有错误(语法、逻辑、导入缺失等),输出修正后的完整代码。",agent=qa,expected_output="修正后的完整Python代码,仅输出代码本身",context=[coding_task])eval_task=Task(description="评估修正后的代码,确认其完整性和正确性,输出最终版本。",agent=chief,expected_output="最终可运行的完整Python代码,仅输出代码本身",context=[review_task])# 组建团队并运行crew=Crew(agents=[engineer,qa,chief],tasks=[coding_task,review_task,eval_task],process=Process.sequential,verbose=True)print("开始生成贪吃蛇游戏...")result=crew.kickoff()# 保存生成的代码output_file="snake_game.py"withopen(output_file,"w",encoding="utf-8")asf:f.write(str(result))print(f"游戏代码已保存到{output_file}")print("运行方式: python snake_game.py")运行说明
- 在
.env文件中设置OPENAI_API_KEY(如果使用其他模型,相应调整MODEL_NAME和OPENAI_BASE_URL)。 - 执行
python game_builder.py,等待智能体协作完成。 - 运行生成的
snake_game.py,体验贪吃蛇游戏。
总结
这个游戏开发助手展示了CrewAI如何通过定义角色和任务来模拟真实开发团队的协作流程。从编码到审查再到评估,每一步都自动化完成,最终输出可直接运行的代码。该模式不仅适用于游戏开发,还可扩展到任何需要“生成-检查-修正”循环的软件工程场景。
本文完整覆盖了游戏开发助手的项目结构、Agent与Task的配置方式、工作流串联、模型集成以及示例代码,并提供了不依赖外部YAML的独立代码。