图:Breather breather / Wikimedia Commons
“我只说了一句‘帮我约一下市场部,下周碰一下活动方案’,它就直接把会议定在了周三下午三点,还订了二号会议室。可周三下午市场部全员在外面跑客户。”
周五早上,项目组的老周端着杯子站到我工位旁边。办公室里这个能订会议室、发会议邀请的本地 Agent 是我接的,平时大家说一句话它就把事办了,省了不少来回。这次它办得太快了,快到没问一句就替人做了决定。
我先把那次调用的记录翻出来。订会议这个工具需要四个参数:日期、时间、时长、会议室。老周的那句话里,只有“下周”和“市场部”是确定的。剩下三个参数,记录里写得清清楚楚,是模型自己补的:日期挑了下周三,时间写了下午三点,会议室选了最常用的二号。它没有去查任何人的日程,就是“看起来合理”地填上了。
我又回查了最近一个月所有订会议的调用,一共一百一十二次,其中有三十一次至少一个关键参数是用户没说、模型自己补的。有四次和别人的会撞了,大家还以为是系统出了毛病。
老周问:“那以后是不是得把时间地点都说全了它才肯干?”我说不至于,但该问的得问。后来我改了三处。
图:Breather breather / Wikimedia Commons
第一处,在工具说明里把参数分成两类。日期、时间、参会人属于“必须由用户给出或确认”的;时长、会议室属于“可以按习惯默认”的,比如默认一小时、优先选空着的小会议室。前一类缺了,Agent 不许自己填,只能停下来问。
第二处,加一个“先查再问”的步骤。缺时间的时候,Agent 先去查参会人共享日程里的空档,挑出两到三个都有空的时段,再把这几个选项摆给用户选,而不是只丢一句“请问什么时间”。老周说这样反而更快。
第三处,执行之前给一张确认卡。卡片上列出所有参数,并标明哪些是用户说的、哪些是默认的、哪些是从日程里查出来的。用户点确认才真正发邀请、订房间。
改完我做了一轮验收:从过去一个月的真实请求里挑了四十条,故意保留各种缺信息的说法,比如“下周找个时间”“明天碰一下”“和老王他们开个会”。改之前,四十条里有二十六条被直接定了时间;改之后,二十六条全部先给出了空档选项,没有一条是模型自己拍板的时间。另外,十四条信息完整的请求,确认卡一步就过,平均多花的时间不到十秒。
老周最后用新流程约了市场部,Agent 给了三个大家都空的时段,他选了周四上午,市场部那边一个改期的都没有。
图:Breather breather / Wikimedia Commons
现在回头看,Agent 最让人头疼的往往不是做不到,而是做得太主动。你们给 Agent 接工具的时候,是怎么处理用户没说全的参数的?欢迎在评论区聊聊。
关于参数分级和确认卡的写法,我在 evafang.com 上留了一份笔记。