背景
想验证一个很朴素的想法:能不能用最少代码,把「思考 → 调用工具 → 再思考」这条链路跑通。
目标不是做产品,是先确认循环结构本身没问题。
我做了什么
用一个极简循环:
- 把用户问题丢给模型
- 模型返回是否需要调用工具
- 若需要,执行本地函数并把结果塞回上下文
- 再让模型继续
工具只放了两个:查当前时间、读本地笔记摘要。
结果
第一天直接翻车:模型明明说要调用工具,循环却直接打印了最终答案。
原因
我把「有 tool_calls」和「结束生成」判断写反了。
当返回里带工具调用时,我却走了终止分支。
最终结构(能跑通的版本)
while true:
response = model(messages)
if response.tool_calls:
messages.append(response)
for call in response.tool_calls:
result = run_tool(call)
messages.append(tool_result(call, result))
continue
return response.content
关键只有一点:先消费工具结果,再谈结束。
下一步
- 加错误重试:工具超时不要直接炸整轮
- 给每个工具写失败样例,而不是只写 happy path
- 把观察记录结构化,方便后面写成复盘