图:Carolina Prysyazhnyuk / Wikimedia Commons / CC BY-SA 2.0
“我让它查一下还有没有没归还的投影仪,它说全部已归还。可我明明看见登记表上还挂着两台没还。”
周三下午,管办公设备的小许拿着笔记本过来找我。办公室这个本地 Agent 是我接的,能查设备借用记录、发归还提醒,大家用得挺顺手。这回它答得干脆,但答错了。
我先把那次调用的记录翻出来。Agent 调的是“查询借用记录”这个工具,工具背后是设备登记系统的接口,一次最多返回二十条,结果里带着一个“还有下一页”的标记。那天符合条件的记录一共五十三条,前二十条恰好都是已归还的,没还的两台排在第三页。Agent 只拿了第一页,看了一圈全是“已归还”,就下了结论。
我又回查了最近一个月所有调用这个工具的记录,一共两百多次,其中有四十多次返回结果超过一页,而 Agent 翻过第二页的只有五次。也就是说,很多“没有”“全部”“都已经”之类的回答,其实只是根据第一页说的。
小许问:“那是不是让它每次都把所有记录拉下来?”我说那样也不对,记录多了既慢又占上下文。后来我改了三处。
图:Michael Holley Swtpc6800 / Wikimedia Commons
第一处,改工具的返回格式。每次返回除了当前这一页的数据,还要明确写上总条数、当前是第几页、一共几页。原来那个不起眼的“还有下一页”标记,改成一句模型一眼能看懂的话:“共五十三条,本页显示第一到二十条,还有两页未读。”
第二处,给工具加筛选参数,并在工具说明里写清楚:问“有没有”“还剩多少”这类问题时,优先带上状态条件去查,比如直接查“状态为未归还”的记录,而不是把全部记录拉回来再自己挑。这样大部分问题一页就能查完。
第三处,改回答规则。凡是结论里带“全部”“没有”“都”这类词的,必须先确认已经读完所有页,回答里要写明“共查询某某条记录”。如果因为条数太多没读完,就要老实说“只查看了前多少条”,不许下全称结论。
改完我做了验收。从过去一个月的真实提问里挑了四十条,其中二十二条的答案依赖第一页以后的数据。改之前,这二十二条里有十七条给出了错误的全称结论;改之后,二十二条全部答对,其中十九条是靠筛选条件一页查完的,三条是逐页读完的。另外十八条一页就够的问题,回答速度和原来基本一样,平均只多了不到两秒。
小许又问了一遍投影仪的事,这次 Agent 回答:“按未归还条件查询,共两条”,后面列了借用人和借出日期。
图:Michael Holley Swtpc6800 / Wikimedia Commons
Agent 最容易让人放松警惕的,就是它说话的那种笃定。你们给 Agent 接查询类工具的时候,是怎么处理分页和返回条数的?欢迎在评论区聊聊。
关于工具返回格式和全称结论的检查规则,我在 evafang.com 上留了一份笔记。