ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

从零构建多智能体协作系统:基于LangChain的代码生成与审查实战

2026/8/10 6:49:56 拓冰建站 浏览量
从零构建多智能体协作系统:基于LangChain的代码生成与审查实战 如果你最近关注AI新闻可能会被一条消息刷屏OpenAI的AI智能体在内部秘密协作数月完成了复杂的软件开发任务而人类团队直到项目后期才意识到这一点。这听起来像是科幻小说的情节但它指向了一个正在发生的、深刻的技术变革AI智能体Agent已经不再是简单的聊天机器人而是能够自主规划、协作并执行复杂任务的“数字员工”。对于开发者而言这不仅仅是茶余饭后的谈资。它意味着我们构建软件的方式、团队协作的模式甚至个人职业发展的路径都可能被重塑。你可能会困惑智能体到底是什么它们如何协作OpenAI内部到底发生了什么更重要的是作为一个开发者我现在应该学什么、做什么才能不被这股浪潮抛下本文将为你拆解“智能体秘密协作”背后的技术逻辑、核心框架与实战路径。我们不会停留在概念讨论而是直接深入到代码和架构层面告诉你如何从零开始搭建一个具备基础协作能力的多智能体系统并分析其背后的工程挑战与未来趋势。无论你是想了解前沿动态还是准备亲手实践这篇文章都将提供清晰的路线图。1. 智能体协作从科幻到现实的工程挑战“秘密协作数月未被发现”这个描述虽然带有媒体渲染的色彩但它精准地戳中了当前AI智能体发展的核心特征自主性和隐匿性。传统的自动化脚本或RPA机器人其行为路径是预设的、透明的。而基于大语言模型LLM的智能体则具备了理解模糊指令、动态规划任务、在失败时自我调整ReAct的能力。这种能力带来的工程挑战是全新的不可预测性智能体的决策链可能很长中间过程对人类而言不透明。协作复杂性多个智能体如何分配任务、共享信息、避免冲突责任归属当智能体协作产出代码或决策时如何追溯和审计OpenAI内部实验的价值在于它验证了在受控环境下智能体协作完成复杂任务如软件开发的可行性。这并非取代人类程序员而是将人类从繁琐、重复的编码劳动中解放出来转向更高层的架构设计、需求审核和创造性工作。2. 核心概念智能体、工具与工作流在深入实战前必须厘清几个容易混淆的概念。智能体Agent一个能够感知环境、进行决策并执行动作以达成目标的系统。在本文语境下特指基于大语言模型如GPT-4的、能够调用工具Tools的程序。通俗理解它像一个有专业技能的虚拟员工。你告诉它目标“建一个用户登录页面”它会自己思考步骤设计UI - 写前端代码 - 写后端API - 测试并调用相应的工具代码编辑器、命令行、浏览器去执行。工具Tools智能体可以调用的具体能力。一个工具通常是一个函数或API。示例search_web搜索网络、execute_python运行Python代码、write_file写文件、call_api调用外部服务。工作流Workflow多个智能体按照特定顺序和规则协同完成任务的过程。这是实现“协作”的关键。典型模式“主管-员工”模式。一个“主管智能体”负责拆解任务并分配给不同的“专家智能体”如前端智能体、后端智能体、测试智能体。多智能体系统Multi-Agent System由多个智能体组成的系统智能体之间通过通信如发送消息进行协作、竞争或协商。为了更清晰地区分请看下表概念本质类比在开发中的角色大语言模型 (LLM)预测下一个token的概率模型一个博学但“手无缚鸡之力”的大脑提供理解、规划和生成能力智能体 (Agent)LLM 记忆 规划 工具调用一个配备了手脚和记事本的大脑执行具体任务的自治单元工具 (Tool)可供调用的函数/API锤子、螺丝刀、搜索引擎扩展智能体能力的具体手段工作流 (Workflow)任务执行的有向图工厂的生产流水线定义任务如何被分解和执行多智能体系统多个智能体组成的网络一个项目团队有经理、开发、测试解决需要多种技能协作的复杂问题理解这些概念后我们就能明白OpenAI的“秘密协作”本质上是构建了一个高效的多智能体工作流并且这个工作流在相当长的时间内稳定运行产出了可用的成果。3. 环境准备构建你的第一个智能体实验场理论需要实践来验证。我们将使用目前最流行、对开发者最友好的框架之一——LangChain来搭建实验环境。LangChain提供了丰富的模块来组装智能体。前置条件操作系统Windows/macOS/Linux均可本文以macOS/Linux命令为例。Python版本 3.8。OpenAI API密钥你需要一个有效的OpenAI API Key。如果你没有可以访问OpenAI官网注册获取。请注意使用API会产生费用请合理控制用量。第一步创建虚拟环境并安装依赖隔离项目环境是Python开发的最佳实践。# 1. 创建项目目录并进入 mkdir multi-agent-lab cd multi-agent-lab # 2. 创建Python虚拟环境 python3 -m venv venv # 3. 激活虚拟环境 # macOS/Linux: source venv/bin/activate # Windows: # venv\Scripts\activate # 4. 安装核心依赖 pip install langchain langchain-openai langchain-community # langchain: 核心框架 # langchain-openai: OpenAI模型集成 # langchain-community: 社区贡献的大量第三方工具集成第二步设置环境变量将你的OpenAI API Key设置为环境变量避免硬编码在代码中。# macOS/Linux export OPENAI_API_KEY你的-api-key-here # Windows (PowerShell) # $env:OPENAI_API_KEY你的-api-key-here或者在代码中通过os.environ设置import os os.environ[OPENAI_API_KEY] 你的-api-key-here环境准备就绪接下来我们将从最简单的单智能体开始逐步构建一个协作系统。4. 核心流程拆解从单智能体到多智能体协作智能体的构建并非一蹴而就。遵循从简到繁的路径能帮你更好地理解每个环节。流程总览创建单智能体赋予它思考和调用工具的能力。为智能体装配工具让它从“思考者”变为“行动者”。设计智能体协作流程定义多个智能体如何交互。运行与观察执行任务并分析其决策过程。5. 完整示例构建一个代码生成与审查的双智能体系统让我们实现一个经典场景一个开发者智能体负责编写代码一个审查者智能体负责检查代码质量并提出修改建议。这模拟了简单的结对编程或代码审查流程。项目结构multi-agent-lab/ ├── venv/ # 虚拟环境目录 ├── agents.py # 智能体定义文件 ├── tools.py # 自定义工具定义文件 └── main.py # 主运行文件5.1 定义工具Tools首先我们创建一些简单的工具。在tools.py中# tools.py import subprocess import sys def run_python_code(code: str) - str: 执行一段Python代码并返回结果或错误信息。 这是一个高风险工具在实际生产中必须严格限制和沙箱化。 try: # 注意此处仅为演示。在生产环境中必须在安全的沙箱环境中执行未知代码。 result subprocess.run( [sys.executable, -c, code], capture_outputTrue, textTrue, timeout10 ) if result.returncode 0: return f执行成功:\n{result.stdout} else: return f执行出错:\n{result.stderr} except subprocess.TimeoutExpired: return 错误代码执行超时。 except Exception as e: return f工具调用出错{str(e)} def write_to_file(filename: str, content: str) - str: 将内容写入指定文件。 try: with open(filename, w, encodingutf-8) as f: f.write(content) return f成功将内容写入文件{filename} except Exception as e: return f写入文件失败{str(e)} def read_from_file(filename: str) - str: 从指定文件读取内容。 try: with open(filename, r, encodingutf-8) as f: content f.read() return f文件 {filename} 的内容是\n\n{content}\n except FileNotFoundError: return f错误文件 {filename} 不存在。 except Exception as e: return f读取文件失败{str(e)}5.2 创建智能体Agents在agents.py中我们使用LangChain的create_react_agent来构建智能体。ReActReason Act是让智能体进行链式思考“我该怎么做”和行动“调用工具”的关键范式。# agents.py from langchain import hub from langchain.agents import create_react_agent, AgentExecutor from langchain_openai import ChatOpenAI from langchain_core.tools import Tool from .tools import run_python_code, write_to_file, read_from_file # 导入自定义工具 # 1. 初始化大语言模型 # 使用gpt-3.5-turbo以控制成本可根据需要换成gpt-4 llm ChatOpenAI(modelgpt-3.5-turbo, temperature0) # 2. 定义工具列表 tools [ Tool( namePythonCodeExecutor, funcrun_python_code, description用于执行一段Python代码字符串。输入必须是有效的Python代码。 谨慎使用确保代码安全无害。 ), Tool( nameFileWriter, funcwrite_to_file, description将文本内容写入指定的文件。输入格式filename,content。 ), Tool( nameFileReader, funcread_from_file, description读取指定文件的内容。输入是文件名。 ) ] # 3. 从LangChain Hub拉取一个优秀的ReAct提示词模板 # 这个模板会指导智能体按“思考-行动-观察”的循环工作 prompt hub.pull(hwchase17/react) # 4. 创建开发者智能体 developer_agent create_react_agent(llm, tools, prompt) developer_agent_executor AgentExecutor( agentdeveloper_agent, toolstools, handle_parsing_errorsTrue, # 优雅处理解析错误 verboseTrue # 开启详细日志方便观察思考过程 ) # 5. 创建审查者智能体 # 审查者可能不需要所有工具可以定制。这里为简化使用同一套工具。 reviewer_agent create_react_agent(llm, tools, prompt) reviewer_agent_executor AgentExecutor( agentreviewer_agent, toolstools, handle_parsing_errorsTrue, verboseTrue ) # 注意这里创建了两个独立的智能体执行器。它们拥有相同的“大脑”LLM和工具 # 但通过不同的提示词后续可定制和独立的对话历史可以扮演不同角色。5.3 实现协作工作流Main Workflow在main.py中我们编写一个简单的工作流来协调两个智能体。# main.py import asyncio from agents import developer_agent_executor, reviewer_agent_executor from tools import write_to_file, read_from_file async def code_review_workflow(task_description: str, output_file: str generated_code.py): 一个简单的代码生成与审查工作流。 1. 开发者智能体根据描述编写代码。 2. 审查者智能体审查代码并提出修改建议。 3. 可选开发者根据建议修改代码。 print(f【任务开始】: {task_description}) print(- * 50) # 阶段1开发者编写代码 print(【阶段1】开发者智能体正在编写代码...) dev_task f 请完成以下任务{task_description} 请将最终生成的代码写入文件 {output_file} 中。 在编写过程中你可以使用PythonCodeExecutor工具来测试你的代码片段。 try: dev_result await developer_agent_executor.ainvoke({input: dev_task}) print(f开发者完成。结果{dev_result[output][:200]}...) # 截断输出 except Exception as e: print(f开发者智能体执行出错{e}) return # 读取生成的代码 code_content read_from_file(output_file) print(f\n【生成的代码】已保存至 {output_file}) print(- * 50) # 阶段2审查者审查代码 print(【阶段2】审查者智能体正在审查代码...) review_task f 请审查以下Python代码检查其是否存在 1. 语法错误或明显的运行时错误。 2. 潜在的安全风险如任意代码执行。 3. 代码风格问题如命名不规范、缺少注释。 4. 逻辑错误或可以优化的地方。 请给出具体的修改建议。如果需要你可以使用PythonCodeExecutor工具来运行代码以验证其功能。 需要审查的代码文件是{output_file}。请先读取文件内容。 try: review_result await reviewer_agent_executor.ainvoke({input: review_task}) print(f审查者完成。审查意见\n{review_result[output]}) except Exception as e: print(f审查者智能体执行出错{e}) return print(- * 50) print(【工作流执行完毕】) print(f最终代码文件{output_file}) print(f审查意见已在上方输出。) if __name__ __main__: # 定义一个简单的任务 task 编写一个Python函数用于计算斐波那契数列的第n项并进行缓存优化。 # 运行异步工作流 asyncio.run(code_review_workflow(task))6. 运行结果与效果验证现在让我们运行这个系统看看智能体如何协作。运行命令# 确保在项目根目录下且虚拟环境已激活 python main.py预期输出简化版【任务开始】: 编写一个Python函数用于计算斐波那契数列的第n项并进行缓存优化。 -------------------------------------------------- 【阶段1】开发者智能体正在编写代码... 进入新的AgentExecutor链... 思考我需要写一个带缓存的斐波那契函数。我应该先写代码然后用PythonCodeExecutor测试一下。 行动使用工具FileWriter输入generated_code.py, from functools import lru_cache\n\nlru_cache(maxsizeNone)\ndef fibonacci(n: int) - int:\n if n 1:\n return n\n return fibonacci(n-1) fibonacci(n-2)\n\nif __name__ __main__:\n print(fibonacci(10)) 观察成功将内容写入文件generated_code.py 思考现在我需要测试这个函数。 行动使用工具PythonCodeExecutor输入from functools import lru_cache\n\nlru_cache(maxsizeNone)\ndef fibonacci(n):\n if n 1:\n return n\n return fibonacci(n-1) fibonacci(n-2)\n\nprint(fibonacci(10)) 观察执行成功: 55 ... (链式思考继续) ... 链结束。 开发者完成。结果我已成功编写并测试了带缓存的斐波那契函数... 【生成的代码】已保存至 generated_code.py -------------------------------------------------- 【阶段2】审查者智能体正在审查代码... 进入新的AgentExecutor链... 思考我需要先读取代码文件内容。 行动使用工具FileReader输入generated_code.py 观察文件 generated_code.py 的内容是(显示代码) 思考现在我来检查代码。首先类型注解n: int和- int是好的。lru_cache是标准的缓存方式。我运行一下看看。 行动使用工具PythonCodeExecutor输入(把文件内容贴进来) 观察执行成功: 55 思考代码运行正确。但我注意到函数没有处理负数输入。另外main部分可以更完善。 行动使用工具FileWriter输入suggestions.txt内容为“1. 建议添加对负数输入的处理例如if n 0: raise ValueError(...)。2. if __name__ __main__:部分可以添加更多测试用例如打印前10项。” 观察成功将内容写入文件suggestions.txt ... (链式思考继续) ... 链结束。 审查者完成。审查意见 代码功能正确使用了lru_cache进行优化。提出两点改进建议1. 增加输入验证... 2. 增强测试用例... -------------------------------------------------- 【工作流执行完毕】 最终代码文件generated_code.py 审查意见已在上方输出。如何验证成功检查生成文件查看项目目录下是否生成了generated_code.py和suggestions.txt。阅读代码和意见打开这两个文件确认代码符合任务要求审查意见具有建设性。观察思考过程通过verboseTrue输出的日志你可以清晰地看到每个智能体的“思考-行动-观察”循环这是理解其工作原理的关键。7. 常见问题与排查思路在实际搭建和运行过程中你可能会遇到以下问题问题现象可能原因排查方式解决方案导入错误ModuleNotFoundError依赖未安装或虚拟环境未激活。1. 运行pip list | grep langchain。2. 检查终端提示符前是否有(venv)。1. 激活虚拟环境source venv/bin/activate。2. 安装依赖pip install -r requirements.txt如果存在。API错误AuthenticationErrorOpenAI API Key 未设置或无效。1. 运行echo $OPENAI_API_KEYLinux/Mac检查。2. 在OpenAI平台检查额度与状态。1. 正确设置环境变量。2. 在代码中直接通过ChatOpenAI(api_keysk-...)传入不推荐用于生产。3. 确保账户有可用额度。智能体陷入循环或行为怪异提示词Prompt不清晰或温度temperature过高。观察verbose日志看智能体的“思考”是否偏离主题。1. 降低temperature如设为0以获得更确定性的输出。2. 优化提示词给予更明确的指令和约束。3. 为工具提供更精确的description。工具调用失败或报错工具函数本身有Bug或输入格式不符合预期。1. 检查工具函数的代码逻辑和异常处理。2. 查看智能体传递给工具的输入参数。1. 单独测试工具函数。2. 在工具描述中明确输入格式。3. 在AgentExecutor中设置handle_parsing_errorsTrue。执行速度慢网络延迟或GPT-3.5/4响应慢复杂任务步骤多。使用更轻量模型测试或检查网络。1. 对于简单任务可考虑使用本地模型如通过Ollama部署。2. 优化工作流减少不必要的智能体间来回。3. 设置超时timeout。生成代码有安全风险智能体被诱导执行危险操作如rm -rf。审查智能体调用的所有工具。至关重要1. 对工具进行严格的输入验证和沙箱化如使用Docker容器。2. 遵循最小权限原则智能体不应拥有高危系统权限。3. 在生产环境中必须建立人工审核或安全护栏。8. 最佳实践与工程建议将智能体系统从实验推向生产需要严谨的工程化考量。提示词工程是核心智能体的行为高度依赖提示词。为不同角色的智能体设计专属的“角色扮演”提示词System Prompt明确其职责、约束和输出格式。# 示例更专业的审查者提示词 reviewer_prompt 你是一个资深的Python代码审查专家。你的职责是严格检查代码质量。 你必须关注以下方面 - 安全性禁止任何形式的os.system, subprocess, eval等危险调用。 - 正确性逻辑是否正确边界条件是否处理。 - 可读性命名、注释、代码结构。 - 性能是否有明显的性能瓶颈。 请以清晰的列表形式给出修改建议并标注优先级高/中/低。 被审查的代码是{code} 工具设计需谨慎权限最小化每个工具只授予完成其任务所需的最小权限。输入验证对所有输入进行严格的清洗和验证。沙箱环境执行代码、访问网络等高风险操作必须在隔离的沙箱中进行。引入记忆与状态管理简单的对话历史不能满足复杂协作。需要为智能体引入更长期的记忆如向量数据库存储对话和共享状态如通过Redis存储任务上下文使它们能记住之前的决策和结果。设计健壮的工作流超时与重试为每个智能体调用设置超时并设计合理的重试机制。错误处理与降级当某个智能体失败时工作流应能捕获异常并尝试其他路径或通知人类。可观测性记录完整的执行轨迹Thought, Action, Observation便于调试和审计。LangChain的LangSmith平台是很好的选择。人类在环Human-in-the-loop对于关键决策或高风险操作必须设置检查点让人工进行确认。例如在智能体试图向生产环境部署代码前必须触发人工审批。成本控制智能体的每次思考、每次工具调用都可能产生API费用。需要监控Token消耗对任务复杂度设置上限并对缓存进行优化。9. 总结与后续学习方向OpenAI的“秘密协作”实验与其说是一个具体的产品不如说是一个强烈的信号基于大模型的多智能体协作系统已经具备了解决复杂现实任务如软件开发的潜力。这不再是实验室里的玩具而是正在进入工程实践领域的新范式。通过本文你不仅理解了这一趋势背后的核心概念智能体、工具、工作流更重要的是你亲手搭建了一个能够“写代码-审代码”的双智能体协作系统。你看到了它们如何思考、如何行动、如何通过简单的流程进行配合。下一步你可以沿着这些方向深入探索更强大的框架除了LangChain深入研究AutoGen微软、CrewAI等专门为多智能体协作设计的框架。它们提供了更成熟的角色定义、任务编排和通信机制。尝试本地模型为了降低成本和控制数据隐私可以学习使用Ollama、LM Studio等工具在本地部署开源模型如Qwen、Llama并让其通过类OpenAI的API与你的智能体框架交互。攻克复杂场景将智能体应用于更复杂的场景如自动化测试、数据分析报告生成、客服工单处理等设计包含更多角色产品经理、测试员、运维的工作流。关注安全与伦理随着智能体能力增强其安全性、可控性和伦理对齐变得至关重要。这是未来研究和工程的重点。技术的浪潮滚滚向前从单点工具到智能体协作人机交互的界面正在上移。作为开发者我们的价值不在于重复编写那些即将被自动化的代码而在于深刻理解问题、设计优雅的系统架构并驾驭这些强大的“数字同事”去解决更具挑战性的问题。现在正是开始探索和实践的最佳时机。