【AI基础专题】自主循环
上一节中,我们给模型增加了工具调用的能力,让模型能够动嘴又动手。但目前为止,模型还是被动地等待用户输入指令来调用工具。本节我们通过一个猜数字的例子,来演示如何让模型实现自主循环,根据工具的结果决定下一步的行动。
首先来定一个tools guess_number,它的功能是根据用户的猜测返回提示信息,文件路径src/tools/guess.ts:
1 | export const guessTool: Tool = { |
然后来看看改造之前的模型表现:


特意贴了两张图,但是本质都是一样的。第一次猜测,工具提示他猜小了,但是这一次对话已经结束了,所以他只能等待用户再次输入来继续游戏。第二次猜测,工具提示他猜大了,但同样的,这一次对话也结束了。之所以会有图片里两种情况,是因为模型的输出是有随机性的,第一张图片里,模型没有回答问题,回了一个继续猜测的工具调用;第二张图片里,模型基于工具提示给出了总结和继续的请求。
接下来我们做一个小小的改动,我们将 src/index.ts从
1 | // 省略前面部分 |
改为
1 | // 省略前面部分 |
只是从if改成了while,但是这个小小的改动就让模型具备了自主循环的能力。现在模型在第一次猜测后,工具提示他猜小了,但这一次对话并没有结束,而是继续等待模型的下一步输出。模型基于工具提示分析后,继续猜测,这样循环往复,直到模型猜对了为止。
最后我们重新设计一下系统提示词,来让模型的输出不至于太失控:
1 | 你是一个自主智能体,能够使用工具来完成目标。 |
来看看最后的表现:
现在agent已经能够自主进行多轮工具调用了。每当模型调用工具后,工具的结果会被加入上下文,模型会基于新的上下文继续分析和决策,直到完成目标或者遇到困难为止。