Agent 系统:最小工具调用 Agent 课堂作业
作业定位
这份作业直接接在下面这组材料之后完成:
6/3-prog:基于 OpenAIProvider 的更简洁版本
目标不是让大家做一个“大而全”的 agent,而是让大家亲手完成一个小而完整的工具调用 agent,并理解:
- agent 和普通聊天程序的真正区别是什么
- tool use 为什么是 agent 的核心能力之一
- 为什么模型接入层、tool、workflow、evaluation 要分开看
作业目标
请基于课程里已经提供的通信 demo,完成一份 “本专业小型工具调用 Agent 设计与对比实验”。
你需要:
- 先跑通课程提供的最小 agent demo
- 再围绕你自己的专业 / 课题方向,设计一个新任务
- 设计并实现
2 个你自己写的工具
- 让 agent 调用工具完成这个任务
- 分析它做对了什么、做错了什么、为什么会错
任务要求
Part A:先跑通课程示例
请先跑通:
你需要确认自己已经看懂:
- prompt 在哪里
- tool 在哪里
- agent 在哪里创建
OpenAIProvider 是怎么把本地 Ollama /v1 接进来的
- 为什么这里把“模型接入层”和“工具逻辑”分开写
Part B:设计一个自己的 agent 小任务
请围绕自己的专业 / 课题方向,选择一个能通过工具调用变得更可靠的小任务。
例如:
- 通信方向:链路预算、路径损耗、SNR、容量、调制选择、频段比较
- 信号方向:采样率换算、时长换算、频率分辨率、FFT 点数建议
- 网络方向:吞吐量估计、时延预算、丢包率解释
- 图像方向:图像尺寸换算、显存估计、分辨率与 patch 数估计
- 系统方向:日志统计、资源估计、配置检查
要求这个任务满足:
- 输入清楚
- 工具函数不超过
3 个
- 结果可以检验
- 不要做成纯聊天问答
- 最好能明确看出“无工具 / 有工具”的差别
Part C:设计两个工具
最低要求:
更推荐:
- 其中一个负责计算
- 另一个负责规则判断、解释或结构化整理
请注意:
- 工具要尽量“小而清楚”
- 参数名要清楚
- docstring 要清楚
- 返回值尽量稳定、可读
Part D:完成一次最小对比
请至少比较下面两种情况:
- 无工具或不要求调用工具
- 有工具并明确要求调用工具
如果你愿意,也可以额外补一个小对比:
- 只有 prompt 改写,但不增加工具
推荐完成路径
第 0 步:先从 6/3-prog 开始
这一版代码更短,更适合第一次改。
第 1 步:复制一份你自己的脚本
建议不要直接改原始示例。
可以复制成一个新文件,例如:
第 2 步:先改 prompt,不改工具
先观察:
- 只改任务描述时,模型会不会开始乱答
- 如果没有合适工具,它会不会仍然说得像对的
第 3 步:再加自己的工具
例如新增:
estimate_fft_resolution
compare_modulation_by_snr
estimate_link_margin
calc_symbol_duration
第 4 步:做一次最小实验
至少保留:
1 次调用工具成功的案例
1 次模型没调好工具或结果不理想的案例
建议提交内容
请提交一个压缩包,包含:
- 你的脚本或 notebook
- 一页到两页短报告
- 终端输出或截图
短报告建议结构
1. 任务说明
- 你设计的 agent 任务是什么
- 它为什么和你的专业 / 课题相关
2. 工具设计
3. 结果对比
请明确回答:
- 没有工具时,模型哪里容易出错
- 有工具后,哪些地方变稳了
- 仍然还有哪些错误
4. 工程分层理解
请再用自己的话区分:
- prompt 在做什么
- tool 在做什么
- 模型接入层在做什么
- workflow / 终止条件在做什么
- evaluation 在做什么
5. context / memory / state
请简要回答:
- 你的这个小 agent 用到了哪些“当前上下文”
- 如果以后这个任务要跨多轮保留经验,你会把什么做成 memory
- 这一步为什么现在先不急着做复杂 memory
评分重点
这份作业不按“做得最复杂”评分,而更看重:
- 是否真的完成了一个可运行的小 agent
- 是否真的设计并实现了两个自己的工具
- 是否做了无工具 / 有工具对比
- 是否看到了 agent 的真实边界
- 是否能说清楚“prompt、tool、模型接入层、workflow、evaluation”分别在做什么
你真正要带走什么
如果做完后只记住一句话,那应该是:
Agent 的关键不只是模型更强,而是让模型在合适的时候,通过合适的流程调用合适的工具。
所以这份作业真正训练的是: