第6周学习总结:代码执行工具 + 多工具初步整合

📅 时间线

日期 原计划任务 实际完成内容
5.5-5.6 PromptTemplate + Few-shot ✅ 前期已完成
5.7 代码生成 Chain ✅ 5.8完成
5.8 前端代码高亮 ✅ 5.9完成
5.9 代码执行工具(PythonREPL) ✅ 5.10完成
5.10 安全增强(超时限制) ✅ 5.11完成
5.11 第7周开端:搜索工具 ✅ 5.11完成

一、本周核心收获

1. 代码生成 Chain → 代码执行工具:形成"生成-执行"闭环

上周最大的突破在于打通了代码生成 → 代码执行的完整链路。

之前:Agent 只能审查代码、生成代码建议,但无法验证代码是否正确。

现在:Agent 能写代码、执行代码、根据结果修正代码——这是一个质的飞跃。

实现方式

  • 创建 code_executor.py,封装 execute_python_code 工具
  • 使用 SAFE_GLOBALS 白名单限制可用模块(禁用 ossyssubprocess 等)
  • io.StringIO 捕获 stdout 输出并返回
  • 添加超时限制(5秒)和输出长度截断(2000字符)

测试用例

帮我计算 1 到 100 之间所有偶数的和,写出完整的 Python 代码并执行

Agent 生成代码 → 调用执行工具 → 返回 2550


2. 前端代码高亮:从"能看"到"专业"

为前端聊天页面引入了 highlight.js,让 AI 回复中的代码块显示语法着色。

关键操作

  • marked.use() 替代废弃的 marked.setOptions()
  • 为流式发送的 AI 消息手动触发 hljs.highlightElement()
  • 修复了 CDN 路径问题(lib/core.min.jshighlight.min.js

效果对比:代码块从纯灰色背景变为彩色语法着色(关键字蓝色、注释绿色、字符串橙色)。


3. 添加搜索工具:Agent 工具集扩展至 4 个

为 Agent 添加了 DuckDuckGo 联网搜索能力,使工具集从 3 个扩展到 4 个:

工具 功能
get_current_time 获取当前时间
calculator 数学计算
execute_python_code 执行 Python 代码
search_web 联网搜索

实现过程

  • 安装 ddgs 库(duckduckgo_search 重命名后的新包)
  • 封装 search_web 工具函数
  • 更新系统提示词,让 Agent 知道何时使用搜索工具

踩坑:初始安装的 duckduckgo_search 库出现 RuntimeWarning,提示包已重命名为 ddgs,切换到新版 ddgs 后解决。


二、关键问题与解决方案

问题 1:Agent 拒绝调用工具(时间查询、计算请求等)

现象:Agent 对非代码请求一律返回"我是代码审查助手,无法回答"。

排查过程

  1. 首先怀疑系统提示词限制过严 → 修改 REVIEW_SYSTEM_PROMPT,加入工具使用说明 → 无效
  2. 然后怀疑意图拦截逻辑 → 注释掉 if not is_code_review_intent(request.input)部分有效
  3. 最终定位到 get_current_time 工具的 docstring → 发现根源

根本原因get_current_time 工具的 docstring 中明确写着"对于普通的’现在几点’闲聊问题,直接拒绝回答,表明自己是代码审查助手"。Agent 在决策时读取工具描述,遵守了这个"拒绝"指令。

解决方案

  • 修改 get_current_time 的 docstring,去掉"拒绝回答"字眼
  • 注释掉 /agent/memory/agent/memory/stream 中的意图拦截逻辑
  • 让 Agent 通过系统提示词和工具描述自主决策

问题 2:ChatPromptTemplate 花括号解析错误

现象:在 CODE_GEN_SYSTEM_PROMPT 中包含 JSON 示例时,PromptTemplate 将花括号 {} 当作占位符,导致 ValueError: unexpected '{' in field name

解决方案

  • 改用 RunnableLambda 手动构建消息列表,避免花括号被解析
  • 或者将 JSON 示例中的花括号转义为 {{}}

三、项目当前能力清单

接口 功能 状态
/agent/memory 多轮对话代码审查
/agent/memory/stream 流式输出审查过程
/agent/memory/history 查看/清除对话历史
/review 结构化审查(JSON输出)
/review/safe 带容错的结构化审查
/code_gen 需求 → 代码生成
搜索能力 Agent 可联网搜索信息 ✅ 本周新增
代码执行 Agent 可执行 Python 代码 ✅ 本周新增

四、下一步计划

进入第7周核心任务:多工具与规划。重点包括:

  • 三个工具联调(时间 + 代码执行 + 搜索)
  • 测试复杂任务,观察 Agent 的任务分解能力
  • 优化工具描述,减少调用错误
  • 封装 /multi-agent 接口

五、本周总结

本周从"单工具 Agent"正式迈入"多工具 Agent"阶段。Agent 现在拥有 4 个可用工具,能根据用户请求自主选择调用哪个。同时,代码执行工具的加入让 Agent 从"只说不做"升级为"既说又做",这是一个质的飞跃。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐