工具,其实就是一个普通函数
别被“工具”吓到。给 Agent 的工具,就是你写的一个普通函数,外加一句“这个函数是干嘛的”说明,好让大模型知道什么时候该用它。
def get_weather(city: str) -> str:
"""查询某个城市今天的天气。"""
return weather_api(city)
tools = [get_weather] # 把工具交给 Agent最小 Agent 的样子
把“循环”写成代码,骨架就这么点:模型决定要不要调工具,调了就把结果喂回去,直到它说“我答完了”。
while True:
step = model.think(history, tools)
if step.is_final: # 模型说:可以回答了
return step.answer
result = call_tool(step) # 做:执行工具
history.append(result) # 看:把结果喂回去,进入下一轮模型怎么知道该调哪个工具?
你给它一排工具(查天气、查数据库、发邮件……),它靠每个工具的名字和那句描述来判断这次该用哪个——就像你在工具箱里靠标签找扳手。
所以名字和描述写得越清楚,它用得越准。
自测 · 学完检查一下
想真正动手做题、记进度、攒连胜?到互动课里练。
判断:下面这个“工具”定义合格吗?(Agent 能不能知道它是干嘛、何时该用)
def f(x):
return db(x)答案:不合格
函数名 f、参数 x 含义不明,也没有说明它做什么。大模型靠名字和描述判断何时调用——必须起清楚的名字 + 写一句说明用途。
一个“好工具”的定义,最关键要具备什么?
答案:清晰的名字 + 一句说明它用途的文档
模型靠“名字 + 描述”判断该不该用、什么时候用。说明写清楚,比什么都重要。
代码里 `if step.is_final:` 这一行,判断的是什么?
答案:模型认为已经可以给出最终答案了
is_final = 模型说“够了,可以回答”,于是跳出循环、返回答案。
最小 Agent 循环里,调用工具拿到结果后,要把结果 ___ 回去给模型,它才能进入下一轮思考。
答案:喂
把工具结果加回对话历史(history),模型才看得到“做”的结果,循环才转得起来。
给了 Agent 一排工具,它靠什么决定这次调用哪一个?
答案:每个工具的名字和描述
名字 + 描述就是模型的“说明书”。这也是为什么第 1 题里 f(x) 不合格。
判断:下面这份工具清单,名字和说明都清楚,算不算合格?
def get_order_count(day: str) -> int:
"""查询某天的总下单量。"""
...
def send_email(to: str, body: str) -> None:
"""给指定邮箱发一封邮件。"""
...答案:合格
名字一看就懂、各配了一句用途说明——模型能准确判断何时用哪个。这就是合格的工具定义。