十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于 hello-agents 框架构建多智能体智能编程导师:从 A2A 工具编排到代码评审的实战解析

基于 hello-agents 框架构建多智能体智能编程导师:从 A2A 工具编排到代码评审的实战解析 基于 hello-agents 框架构建多智能体智能编程导师从 A2A 工具编排到代码评审的实战解析【免费下载链接】hello-agents 《从零开始构建智能体》——从零开始的智能体原理与实践教程项目地址: https://gitcode.com/datawhalechina/hello-agents智能编程导师Intelligent Programming Tutor是 hello-agents 共创项目中的一个多智能体学习助手它基于 HelloAgents 框架将「学习路径规划、智能出题、代码评审」三大教学环节分别交给四个分工明确的智能体协作完成。本文以 Co-creation-projects/chen070808-ProgrammingTutor/README.md 为主线深入源码解析其「Agent 即工具」的编排模式、基于文本协议的工具调用机制以及安全代码执行方案读者读完可以掌握如何用 hello-agents 快速组装一个可运行、可扩展的多智能体教学系统。一、项目定位与核心能力智能编程导师是一个基于 HelloAgents 框架的个性化编程学习系统核心价值在于把「教」这件事拆解为可编排的智能体流水线先由规划师定制学习路径再由出题人依据学习内容生成练习最后由评审员对用户提交的代码给出专业反馈形成规划 → 练习 → 评审的完整学习闭环。核心功能学习路径规划根据用户的学习目标和当前水平制定个性化的学习计划智能出题根据学习内容自动生成结构化的编程练习题代码评审对提交的代码进行专业评审提供改进建议与最佳实践指导且评审前会先实际运行代码验证正确性。多智能体架构系统采用四智能体协同模式每个智能体职责单一智能体角色职责TutorAgent导师主协调者理解用户意图通过工具调用调度子智能体PlannerAgent规划师学习规划制定个性化学习计划和路径ExerciseAgent出题人练习生成根据学习内容生成编程练习题ReviewerAgent评审员代码评审评审代码并提供专业反馈支持代码执行验证从源码实现看这正是一种典型的主从Orchestrator-Worker多智能体架构TutorAgent作为编排者不亲自生产内容而是通过三个工具接口把任务分发给专家智能体详见 tutor.py 的类注释。二、项目结构chen070808-ProgrammingTutor/ ├── src/ │ ├── agents/ # 智能体定义 │ │ ├── tutor.py # 主导师智能体 │ │ ├── planner.py # 学习规划智能体 │ │ ├── exercise.py # 出题智能体 │ │ └── reviewer.py # 代码评审智能体 │ └── tools/ # 工具定义 │ ├── agent_tool.py # A2A 智能体工具包装 │ └── code_runner.py # 代码执行工具 ├── main.ipynb # 示例演示 Notebook含三个完整测试场景与真实输出 ├── requirements.txt # 项目依赖 └── .env # 环境配置需自行创建其中 main.ipynb 是整个系统的可运行说明书按顺序执行即可复现学习计划、练习题、代码评审三个完整场景仓库中保留了每一轮的 stdout 输出可供对照验证。三、安装与配置1. 环境要求Python 3.8Notebook 实际运行环境为 Python 3.12HelloAgents 框架通过hello-agents[all]安装最低版本 0.2.72. 安装依赖项目的 requirements.txt 内容如下hello-agents[all]0.2.7 jupyterlab python-dotenvpip install -r requirements.txthello-agents[all]框架本体提供SimpleAgent、HelloAgentsLLM、Tool等核心类jupyterlab用于运行main.ipynb演示python-dotenv用于加载.env环境变量Notebook 与示例代码中均通过load_dotenv()读取配置。3. 配置环境变量在项目根目录创建.env文件配置以下参数# LLM 模型配置 LLM_MODEL_IDQwen/Qwen2.5-72B-Instruct LLM_API_KEYyour_api_key_here LLM_BASE_URLhttps://api-inference.modelscope.cn/v1 LLM_TIMEOUT60参数说明参数作用示例/默认值LLM_MODEL_ID指定使用的模型标识Qwen/Qwen2.5-72B-InstructLLM_API_KEY调用 LLM 服务的 API 密钥必填需自行申请LLM_BASE_URLLLM 服务的接口地址如 ModelScope 推理地址https://api-inference.modelscope.cn/v1LLM_TIMEOUT单次 LLM 调用的超时时间秒示例为60在 Notebook 的初始化单元格中通过from dotenv import load_dotenv; load_dotenv()加载配置后直接以llm HelloAgentsLLM()无参构造即可从环境变量完成 LLM 初始化见 main.ipynb 的步骤 1环境设置。这意味着更换模型供应商时只需修改.env无需改动任何业务代码。四、源码级架构解析Agent 即工具的多智能体编排README 中提到的「Agent-to-Agent (A2A) 工具调用模式」在本项目中有非常轻量的实现把一个子智能体直接包装成父智能体的一个工具。这比独立的 A2A 协议通信更简单适合智能体之间信任度高、部署在同一进程内的场景。1. AgentTool把智能体变成工具agent_tool.py 定义了AgentTool其核心思路如下继承框架的Tool基类持有被包装的SimpleAgent实例get_parameters()声明唯一的字符串参数query发送给智能体的查询或指令必填run(parameters)内部直接调用self.agent.run(query)并把结果作为工具返回值返回异常时返回错误信息而不中断主流程。class AgentTool(Tool): def __init__(self, agent: SimpleAgent, name: str, description: str): self.agent agent self._name name self._description description def run(self, parameters: Dict[str, Any]) - str: query parameters.get(query, ) if not query: return 错误需要提供 query 参数 try: return self.agent.run(query) # 直接调用子智能体 except Exception as e: return f调用 {self.name} 时出错: {str(e)}文件头注释明确写道这是比 A2A 协议更简单的多智能体模式。可以推断AgentTool复用了框架统一的工具注册与调用链路让智能体间的协作工具化从而无缝接入框架已有的工具调度循环。2. TutorAgent编排者的构建tutor.py 展示了主智能体的完整组装过程分三步第一步创建子智能体self.planner PlannerAgent(llm) self.exercise ExerciseAgent(llm) self.reviewer ReviewerAgent(llm, tools[CodeRunner()])注意ReviewerAgent在创建时就注入了CodeRunner工具这是评审前先运行代码的能力来源。第二步编写系统提示词向 LLM 明确声明可用工具、调用格式与铁律你拥有以下专业助手工具 - call_planner: 课程规划师制定个性化学习计划 - call_exercise: 出题人生成编程练习题 - call_reviewer: 评审员评审代码并提供反馈 **关键你必须使用工具不能自己完成这些任务** 工具调用格式严格遵守此格式 [TOOL_CALL:工具名称:参数]提示词通过正反示例强约束 LLM 的行为边界禁止自己制定计划、禁止自己出题、禁止自己评审代码、禁止说工具调用失败后越俎代庖必须识别意图后立即生成[TOOL_CALL:...]文本标记。第三步将子智能体包装为工具并注册self.add_tool(AgentTool( self.planner, namecall_planner, description调用课程规划师为用户制定个性化的学习计划 )) self.add_tool(AgentTool( self.exercise, namecall_exercise, description调用出题人根据学习内容生成编程练习题 )) self.add_tool(AgentTool( self.reviewer, namecall_reviewer, description调用评审员对用户提交的代码进行评审和反馈 ))初始化完成后Notebook 会打印出工具注册日志✅ 工具 code_runner 已注册。✅ 工具 call_planner 已注册。✅ 工具 call_exercise 已注册。✅ 工具 call_reviewer 已注册。直观呈现了整套工具集。3. 文本协议 [TOOL_CALL] 与框架的对接[TOOL_CALL:工具名:参数]这一文本调用格式并非本项目独创而是 hello-agents 框架约定俗成的工具调用协议。可参照框架章节代码 code/chapter7/my_simple_agent.py框架在系统提示词中注入工具调用格式说明并通过正则r\[TOOL_CALL:([^:]):([^\]])\]解析工具名与参数见 my_simple_agent.py执行工具后把结果拼接回消息列表再驱动 LLM 基于结果产出最终回答my_simple_agent.py 的_run_with_tools循环。因此本项目的 Tutor → 子智能体调用链为用户输入 → TutorAgent.run() → LLM 输出 [TOOL_CALL:call_planner:query...] → 框架解析工具调用 → AgentTool.run() → PlannerAgent.run()递归的 SimpleAgent 执行 → 结果回填 → Tutor 基于结果组织最终回复4. 子智能体的专业提示词设计三个子智能体都继承SimpleAgent差异完全体现在system_prompt上这印证了提示词即智能体行为定义的框架设计哲学PlannerAgent要求把学习目标拆解为逻辑模块/里程碑每个模块列出关键概念并以 Markdown 输出结构化计划更新计划时回顾近期表现、调整进度与深度。ExerciseAgent要求围绕给定主题与难度生成题目描述、输入/输出示例、约束条件并默认不直接给出解决方案代码刻意保留思考空间给学习者。ReviewerAgent提示词最为精细要求先识别代码形式可直接运行的代码片段 / 以 def 开头的函数定义 / 缺少语法元素的不完整代码再按运行代码 → 分析逻辑 → 检查风格 → 性能分析 → 建设性反馈六步流程评审并特别强调代码能正常运行就不要说不完整先肯定做得好的地方再提改进建议不直接给完整解决方案除非用户多次尝试失败。5. CodeRunner受限作用域的代码执行code_runner.py 实现了一个可被ReviewerAgent调用的代码执行工具with contextlib.redirect_stdout(stdout_capture), contextlib.redirect_stderr(stderr_capture): safe_globals { __builtins__: __builtins__, print: print, range: range, len: len, } exec(code, safe_globals)实现要点通过contextlib.redirect_stdout/redirect_stderr把标准输出与错误捕获到内存缓冲工具最终返回输出 错误的组合文本通过受限的safe_globals白名单仅暴露print、range、len等少量内置函数降低恶意代码风险运行时异常被try/except捕获并以运行时错误: ...文本返回保证评审流程不中断代码执行成功但无输出时返回 代码执行成功无输出。需要特别强调的是源码注释明确警告此工具基于exec()在生产环境中不安全真实产品应改用 Docker 等沙箱环境。这一点在本文注意事项章节会再次强调。五、使用方式方式一Jupyter Notebook推荐入门打开 main.ipynb 并按顺序运行单元格环境设置加载.env、把src加入sys.path、初始化HelloAgentsLLM初始化 TutorTutorAgent(llm)自动创建全部子智能体并注册四个工具测试 1学习路径规划——体验 Tutor → Planner 协作测试 2获取编程练习题——体验 Tutor → Exercise 协作测试 3提交代码评审——体验 Tutor → Reviewer → CodeRunner 的多层协作。方式二Python 代码在.env配置完成后可直接编写脚本使用from hello_agents import HelloAgentsLLM from src.agents.tutor import TutorAgent # 初始化 LLM llm HelloAgentsLLM.from_env() # 创建导师智能体 tutor TutorAgent(llm) # 示例 1请求学习计划 response tutor.run(我想学习 Python 中的列表推导式) print(response) # 示例 2请求练习题 response tutor.run(请给我出一道关于列表推导式的练习题) print(response) # 示例 3代码评审 code numbers [1, 2, 3, 4, 5] squares [] for n in numbers: squares.append(n * n) response tutor.run(f请评审以下代码{code}) print(response)Notebook 中的实际写法与之等价但略有差异先load_dotenv()再llm HelloAgentsLLM()见 main.ipynb 的步骤 1单元格并需保证src目录在导入路径中sys.path.append(os.path.abspath(src))。六、示例场景与真实运行效果场景 1学习路径规划用户输入我想学习 Python 中的装饰器但我只了解基础的函数定义系统响应导师调用call_planner生成包含前置知识检查、分阶段学习目标、推荐学习资源、实践项目建议的学习计划。Notebook 中同场景的真实输出目标为学习 Python 列表推导式展示了一份完整计划分为「基础概念与语法2-3 天→ 条件过滤3-4 天→ 复杂表达式与嵌套4-5 天→ 高级应用与其他推导式3-4 天→ 实战项目与优化3-5 天」五个模块每个模块列出具体知识点与语法示例并给出每日练习量建议、可读性提醒与预计总时长约 2-3 周。场景 2获取练习题用户输入请给我出一道关于装饰器的练习题系统响应ExerciseAgent生成一道练习题包含题目描述与要求、输入输出示例、难度级别、考察知识点。Notebook 真实输出给出了filter_and_square_numbers(numbers, threshold)练习题包含题目描述、三个覆盖边界情况的输入输出示例含空结果[]、约束条件必须使用列表推导式、禁止 for/while 循环、需处理空列表以及函数签名与提示。场景 3代码评审用户输入decorator def greet(name): print(fHello, {name})系统响应ReviewerAgent执行四条流程——执行代码检查语法与运行时错误 → 分析代码质量与最佳实践 → 提供改进建议 → 指出潜在问题。Notebook 中的评审案例用户提交了缺少threshold参数、硬编码n 0条件的实现展示了评审报告结构总体评价、逐条发现的问题函数签名不完整、逻辑不符合题目要求、硬编码条件、改进建议代码、针对用户测试用例的结果分析以及三项评分功能正确性 ⭐⭐⭐☆☆、代码质量 ⭐⭐⭐⭐☆、符合要求 ⭐⭐☆☆☆。这充分体现了运行代码后基于事实评审的价值——评审意见全部锚定在真实执行结果之上。七、开发与扩展添加新的智能体在src/agents/目录下创建新的智能体类继承SimpleAgent基类重写system_prompt定义其专业领域参考 planner.py 的三步式分析目标 → 拆解模块 → 输出结构在TutorAgent.__init__中用AgentTool包装并注册为工具起名并撰写清晰的descriptiondescription 会被注入提示词直接影响 LLM 选工具的准确率。自定义工具在src/tools/目录下创建新工具类继承Tool基类实现get_parameters()声明参数 schema与run()核心执行逻辑将工具注入相应智能体ReviewerAgent(llm, tools[CodeRunner(), YourTool()])。从框架视角看SimpleAgent.add_tool()与ToolRegistry机制可参考 code/chapter7/my_simple_agent.py 的add_tool/list_tools/remove_tool便捷方法提供了统一的工具生命周期管理任何新工具都能无缝挂接。可选的演进方向Notebook 总结部分给出了可扩展方向添加学习进度追踪、支持更多编程语言、集成 Pylint 等代码风格检查、引入知识库检索增强RAG等。八、注意事项与安全边界API 密钥确保.env文件配置正确尤其是LLM_API_KEYLLM_BASE_URL须指向可访问的模型服务地址代码执行安全CodeRunner基于exec()实现默认仅通过白名单内置函数做受限防护源码与 README 均明确建议不要执行不可信代码生产环境务必替换为 Docker 等真正的沙箱网络依赖LLM 调用需要网络连接请确保网络畅通必要时调整LLM_TIMEOUT版本前提本项目依赖hello-agents[all]0.2.7示例代码中HelloAgentsLLM.from_env()与HelloAgentsLLM()两种初始化方式在不同版本下均可使用以实际安装版本与.env配置为准。九、总结智能编程导师项目以极低的复杂度演示了 hello-agents 框架的多智能体协作范式用AgentTool将子智能体包装为工具以统一的[TOOL_CALL:工具名:参数]文本协议驱动调度再用CodeRunner赋予评审智能体动手验证的能力。它证明了在现有框架之上仅靠精心设计的系统提示词与工具封装即可组装出规划 → 出题 → 评审的完整教学闭环也为读者后续在 hello-agents 上搭建更复杂的多智能体应用提供了一个清晰、可复用的参考模板。【免费下载链接】hello-agents 《从零开始构建智能体》——从零开始的智能体原理与实践教程项目地址: https://gitcode.com/datawhalechina/hello-agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表