背景

想验证一个很朴素的想法:能不能用最少代码,把「思考 → 调用工具 → 再思考」这条链路跑通。
目标不是做产品,是先确认循环结构本身没问题。

我做了什么

用一个极简循环:

  1. 把用户问题丢给模型
  2. 模型返回是否需要调用工具
  3. 若需要,执行本地函数并把结果塞回上下文
  4. 再让模型继续

工具只放了两个:查当前时间、读本地笔记摘要。

结果

第一天直接翻车:模型明明说要调用工具,循环却直接打印了最终答案。

原因

我把「有 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
  • 把观察记录结构化,方便后面写成复盘