第6周学习总结:代码执行工具 + 多工具初步整合
本周完成了代码执行工具的安全沙箱设计,并为 Agent 添加了联网搜索能力,工具集扩展至 4 个,实现了从“只说不做”到“既说又做”的能力升级。
第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白名单限制可用模块(禁用os、sys、subprocess等) - 用
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.js→highlight.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 对非代码请求一律返回"我是代码审查助手,无法回答"。
排查过程:
- 首先怀疑系统提示词限制过严 → 修改
REVIEW_SYSTEM_PROMPT,加入工具使用说明 → 无效 - 然后怀疑意图拦截逻辑 → 注释掉
if not is_code_review_intent(request.input)→ 部分有效 - 最终定位到
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 从"只说不做"升级为"既说又做",这是一个质的飞跃。
更多推荐



所有评论(0)