Lab 4.1–4.4 无需 key;Lab 4.5 可选需 key。预计 75–100 分钟。
任务:运行并改造 examples/tool_loop.py:
get_weather_forecast 的缺参调用剧情:Claude 传了空 location,应用校验 schema 后回传 is_error: true("Missing required 'location' parameter"),观察 Claude 补参重试(参考官方"若调用无效,Claude 会重试 2–3 次自我修正",来源: https://platform.claude.com/docs/en/agents-and-tools/tool-use/handle-tool-calls(访问于 2026-08-30))。验收:能白板画出消息数组从第 0 步到结束的完整演进。
任务:给下面这个"坏工具"写改版(依据 README §3 官方最佳实践):
{"name": "db", "description": "Runs a database query.",
"input_schema": {"type": "object", "properties": {"sql": {"type": "string"}}, "required": ["sql"]}}
要求改版包含:命名空间化命名、3–4 句 description(何时用/何时不用/返回什么/限制)、把裸 SQL 换成语义化参数、返回高信号结果(而不是全表行)。再回答:这个工具暴露给 auto 模式有什么安全风险?(提示:LLM 指令 ≠ 应用强制;模块 11)
任务:填完下表并给每行一个业务例子:
| 需求 | tool_choice | 副作用要处理什么 |
|---|---|---|
| 客服自由决定查不查订单 | auto | 可能不调工具直接答(知识截止风险) |
| 强制每个回答先检索知识库 | ? | 无自然语言解释;messages 缓存作废 |
| 流水线第 2 步必须抽取实体 | ? | prefill assistant;无解释 |
| 用户闲聊回合禁止工具 | ? | —— |
| 并行调用导致订单重复创建 | ? | ? |
(依据: https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools(访问于 2026-08-30))
任务:为下列工具标注权限策略(直接执行 / 执行+审计 / 人审)并说明理由:
get_order update_order_address send_customer_email issue_refund bulk_reimport web_search
判据(README §6):不可逆?高代价?低可解释性×高影响?合规?然后写人审 tool_result 的错误文案(要"有指导性",让 Claude 能向用户解释被拒原因与替代路径)。
任务:把 tool_loop.py 的 fake_claude 换成真实 Messages API 调用(SDK 或 urllib,key 从环境注入):
stop_reason: "tool_use"。tool_choice: {"type": "any"}:观察响应是否直接是 tool_use 而没有解释文本。cache_read_input_tokens(tools 前缀被缓存)。