AI Agent 从入门到封神:24 讲打造你的超级智能体~系列文章18:用LangGraph搭建“AI团队“
用LangGraph搭建AI团队产品经理Agent程序员Agent测试Agent协作实战 导读上期我们学了Multi-Agent的架构理论今天直接动手用LangGraph搭建一个完整的AI软件开发团队——产品经理Agent负责需求、程序员Agent负责编码、测试Agent负责测试。三者协作自动完成从需求到代码的全流程一、项目目标 我们要搭建一个AI开发团队包含三个角色角色职责输入输出产品经理Agent分析需求编写PRD用户原始需求结构化需求文档程序员Agent根据PRD编写代码需求文档Python代码测试Agent审查代码运行测试代码测试报告修改建议工作流PRD代码通过不通过 用户 产品经理 程序员 测试员 交付二、完整代码实现 2.1 定义状态fromtypingimportAnnotatedfromlanggraph.graphimportMessagesState,StateGraph,START,ENDfromlanggraph.graph.messageimportadd_messagesfromlangchain_core.messagesimportAnyMessage,SystemMessage,HumanMessagefromlangchain_openaiimportChatOpenAIclassTeamState(MessagesState):messages:Annotated[list[AnyMessage],add_messages]user_requirement:str# 用户原始需求prd:str# 产品需求文档code:str# 代码review_result:str# 审查结果is_approved:boolFalse# 是否通过revision_count:int0# 修改次数2.2 三个Agent角色llmChatOpenAI(modelgpt-4o,temperature0.7)# 产品经理Agent defproduct_manager(state:TeamState)-dict:产品经理分析需求编写PRDresponsellm.invoke([SystemMessage(content你是一位资深产品经理。 根据用户的原始需求编写一份清晰的产品需求文档(PRD)。 PRD格式 ## 功能描述 [一句话描述] ## 用户故事 作为[角色]我希望[功能]以便[价值] ## 功能需求 1. [具体需求1] 2. [具体需求2] ## 技术要求 - 语言Python - 输入[输入格式] - 输出[输出格式] ## 验收标准 - [ ] [标准1] - [ ] [标准2]),HumanMessage(contentf用户需求{state[user_requirement]})])return{prd:response.content,messages:[response]}# 程序员Agent defdeveloper(state:TeamState)-dict:程序员根据PRD编写代码feedbackifstate.get(review_result):feedbackf\n\n测试员的反馈\n{state[review_result]}\n请根据反馈修改代码。responsellm.invoke([SystemMessage(content你是一位Python高级工程师。 根据产品需求文档编写高质量的Python代码。 要求 1. 代码要有完整的注释 2. 包含错误处理 3. 包含简单的使用示例 4. 代码要可以直接运行),HumanMessage(contentf需求文档\n{state[prd]}{feedback})])return{code:response.content,messages:[response]}# 测试Agent deftester(state:TeamState)-dict:测试员审查代码给出测试报告responsellm.invoke([SystemMessage(content你是一位QA测试工程师。 审查程序员提交的代码从以下维度评估 1. **功能完整性**是否满足PRD所有需求 2. **代码质量**命名规范、注释完整、结构清晰 3. **错误处理**异常情况是否处理 4. **可运行性**代码能否直接运行 输出格式 ## 测试报告 - 功能完整性PASS/FAIL [说明] - 代码质量PASS/FAIL [说明] - 错误处理PASS/FAIL [说明] - 可运行性PASS/FAIL [说明] ## 总体结论 APPROVED 或 REJECTED ## 修改建议如果REJECTED 1. [建议1] 2. [建议2]),HumanMessage(contentfPRD\n{state[prd]}\n\n代码\n{state[code]})])is_approvedAPPROVEDinresponse.content.upper()return{review_result:response.content,is_approved:is_approved,revision_count:state.get(revision_count,0)1,messages:[response]}# 路由函数 defshould_continue(state:TeamState)-str:决定下一步ifstate.get(is_approved,False):returnapprovedifstate.get(revision_count,0)3:# 最多修改3次returnapproved# 强制通过returnrejected2.3 构建工作流# 构建图workflowStateGraph(TeamState)# 添加节点workflow.add_node(product_manager,product_manager)workflow.add_node(developer,developer)workflow.add_node(tester,tester)# 添加边workflow.add_edge(START,product_manager)workflow.add_edge(product_manager,developer)workflow.add_edge(developer,tester)workflow.add_conditional_edges(tester,should_continue,{approved:END,rejected:developer# 不通过返回程序员修改})# 编译teamworkflow.compile()2.4 运行测试# 运行AI开发团队resultteam.invoke({user_requirement:写一个Python函数实现CSV文件的数据分析功能包括均值、中位数、标准差统计,messages:[]})print(*60)print( 产品需求文档(PRD))print(result[prd])print(*60)print( 最终代码)print(result[code])print(*60)print( 测试报告)print(result[review_result])print(f修改次数{result[revision_count]})三、运行效果展示 产品需求文档(PRD) ## 功能描述 CSV数据分析工具支持计算均值、中位数、标准差 ## 用户故事 作为数据分析师我希望能快速分析CSV文件的数值列统计信息 ## 功能需求 1. 读取CSV文件 2. 自动识别数值列 3. 计算均值、中位数、标准差 4. 输出格式化的统计报告 ## 技术要求 - 语言Python - 依赖csv, statistics标准库 ## 验收标准 - [ ] 能正确读取CSV - [ ] 统计结果准确 - [ ] 有错误处理 最终代码 import csv import statistics def analyze_csv(file_path): 分析CSV文件的数值列统计信息 ...完整代码 测试报告 - 功能完整性PASS - 代码质量PASS - 错误处理PASS - 可运行性PASS 总体结论APPROVED 修改次数1四、进阶添加更多角色 角色职责加入时机 产品经理需求分析第一步️ 架构师技术方案设计产品经理之后 程序员编写代码架构师之后 测试员代码审查程序员之后 技术文档编写文档测试通过后 安全审计安全检查最终交付前五、本期小结 知识点核心内容AI团队组成产品经理程序员测试员三角色协作模式流水线式带反馈循环质量控制测试Agent审查不通过返回修改防止死循环设置最大修改次数3次这就是AI团队的雏形未来这样的AI团队可以完成越来越复杂的软件开发任务。作为开发者你的角色将从写代码变成管理AI团队 下期预告《Agent通信协议A2A深度解读Google的Agent互联网野心》—— Agent之间怎么说话A2A协议告诉你答案三连走起AI团队未来开发的新范式专栏第18/24期多Agent协作篇进行中…作者高炉炼铁智能化技术研究者专注钢铁冶金与人工智能 交叉领域。 如果觉得有帮助请点赞、收藏、转发版权归作者所有未经许可请勿抄袭套用商用(或其它具有利益性行为)。 关注专栏不错过后续精彩内容