SH

Soloharness

概念 · 辨析 · Agent

← 返回概念辨析

Concept Contrast Fable

工具调用和工具注册表

一个是伸手拿工具的瞬间动作,一个是放工具的柜子本身。柜子里的工具再多再全,伸手这一步卡住了,功能还是用不上。反过来,伸得再快,柜子里的工具描述错了,拿回来的也是错的。

寓言

能拿的仓库和拿不到的仓库

老马开了一间木工坊,专门接定制家具的活。工坊里工具齐全——锯子、刨子、凿子、角尺、墨斗,每种工具都有固定位置,编了号,挂在整面工具墙上。老马花了三个月把墙整理得漂漂亮亮,每一把工具上都贴着标签,连铆钉枪都备了三种型号,墙上没有空位也没有重样。

工坊新来了一个学徒叫小张。小张手巧,但第一天就出了状况。客户送来一块木板,要求侧面开一道槽。小张走到工具墙前站了半分钟,拿了一把凿子回来,硬生生用手凿。槽倒是凿出来了,歪歪扭扭,边上还崩了一块木头。老马在旁边看了没吭声。

晚上收工,老马把小张叫到工具墙前面,指着一把电动修边机说:开槽要用这个。小张低头看了看修边机上贴的标签——「木工修边设备B型」——他说:师傅,我看过这个标签,但不知道它跟开槽有什么关系。标签上写的是设备型号,不是「开槽就用它」。

老马那天半夜没睡着。工具墙是他亲手整理的,编号清晰、位置固定、一把不少。但小张不认识的不是工具,小张不认识的是标签上那个名字跟他要干的活之间的关联。工具墙告诉你有工具、在哪、怎么调;它没告诉你什么活该拿哪一把。

第二天,老马在工具墙旁边挂了一块新板子,叫「活计索引」。上面只写干活场景:「木板开槽→修边机」「面板拼接→饼干榫机」「圆角处理→倒角刨刀」「榫头切割→台锯配榫头夹具」。每一行从「遇到什么情况」开始,最后一列指向墙上那把工具。

老马定了新规矩:每进一把新工具,必须同时在两面墙上各加一条记录。左墙加工具编号和存放位置,右墙加两条以上的使用场景描述和对应指向。两面墙同步更新,不同步的工具不准上墙。

一个月后,小张已经能独立接活了。有同行来工坊参观,看到两面墙,问老马有什么讲究。老马说:左墙是库房账本——工具有多少、放哪、什么规格。右墙是师傅经验——什么活拿什么工具、先拿哪个后拿哪个。库房整齐不等于学徒会干活,两面墙都齐了才算。

后来同行把这套做法学走了。老马跟徒弟说:你们记住,左墙管「有什么」,右墙管「怎么用」。前头那堵墙上少了一样工具,是库存问题。后头那堵墙上少了一条场景,是你明知道有工具但想不到去拿。两种空,账要分开算。

工具调用 (Function Calling)

模型在对话或推理过程中,根据上下文判断是否需要调用外部工具,选择合适的工具,构造正确的参数,执行调用,并将结果整合回当前任务的动态过程。

工具注册表

一个包含所有可用工具的目录或配置集,定义每个工具的名称、接口参数、权限范围和返回格式。它是静态的资源清单,负责回答「有哪些工具可用」和「每个工具长什么样」。

故事对应

  • 工具墙整整齐齐但学徒拿错了凿子去开槽:仓库全不全和拿得对不对是两件独立的事。
  • 标签写的是「木工修边设备B型」学徒不知道这是开槽用的:注册描述面向谁写,决定了调用能不能触发。
  • 活计索引板从「遇到什么情况」出发指向工具:调用指引要的是情景化描述,不需要技术命名。
  • 两面墙同步更新——不同步不准上墙:注册和调用必须在一个节奏里维护,缺一面就是缺口。
  • 左墙管「有什么」右墙管「怎么用」:资源目录和决策系统,两本账分开管。

落到项目里

每次新增或修改工具,跑一组端到端的调用测试:用真实用户提问去触发工具选择,验证模型是否选对了工具、参数是否正确。不要只跑 API 连通性测试就通过了。工具注册表的验收标准和工具调用的验收标准分开写,前者查接口完备性,后者查情景匹配度。