问题所在
有些请求的路线是事先知道的。「把我周四的会面挪到周五,并通知参与者」:我们知道要做什么,也知道顺序。另一些则不然。「如果不下雨,帮我找个周六出去玩的地方」取决于天气,然后取决于你家附近有什么活动,然后可能还取决于路线。每一步都取决于上一步找到了什么。
事先定好的计划非常适合第一个请求,对第二个就差多了。每一步都思考的循环适合第二个,但用在第一个上就太贵了。
我想要什么
我不想替你做选择。所以 LIA 保留了两种模式,提供同样的保障,你可以用屏幕顶部的模式按钮在两者之间切换。你的选择会在之后的消息中保留下来。
Pipeline:规划、核实、执行
这是默认模式。LIA 先写出一份完整的计划,在任何调用之前先核实它,然后并行执行所有可以并行的部分。模型不必在每一步都重读整段对话,这让这种模式消耗的令牌明显更少,令牌就是模型服务商计费的文本单位。它的局限在于:计划是在看到结果之前写好的。如果某一步失败了,Pipeline 会告诉你,而不会自己去找另一条路。
ReAct:一边读结果一边前进
在 ReAct 模式下(意思是「推理并行动」),模型调用一个工具,读取返回的内容,然后决定下一步。以你的周六出游为例:先查天气;如果天气好,再查附近的活动;对你喜欢的那一个,再查路线。我给这个循环加上了好几道保护措施。
- 靠成果赢得的预算。循环开始时有一定的尝试次数,只要它不断取得结果,次数就会延长。失败或空结果什么也换不来。你花在确认某个操作上的时间,也不计入它的时限。
- 以结果来评判。LIA 会核实每个工具的回应是否真的回答了你的问题:日期对不对,地点对不对,列表是否完整。你问的是明天,拿到的却是今天的天气,这和出错一样,都是障碍。这时她会修正自己的调用,然后尝试另一个来源,并如实标明它是替代来源。仍然没能得到的内容,她会在最后列出来,并附上她尝试过的办法。
- 不絮叨。用完全相同的参数多次调用同一个工具,最终会被拒绝:一个不断重复自己的代理已经不再前进。
- 诚实的结尾。如果预算用完,LIA 会用她已经得到的内容来回答,而不会向你宣布她原本正准备做什么。
- 精确的计算。两种模式都配有一个精确的计算器和一个日期工具。ReAct 还可以写一段简短的 Python 脚本,在一个隔离的容器中运行,用完即丢弃,用来比对两份列表,或者对大量行进行统计。如果你的安装允许,它可以通过一个只开放已声明地址的中继访问在线服务。你的访问密钥不会进入容器;对于没有人授权过的地址,LIA 会征求你的意见。
不变的是什么
两种模式读取的是同样的记忆、同样的个人档案和同样的知识空间。它们遵循同样的确认规则,并就哪些成功、哪些失败给你同样的报告。每个例程或工单都有自己的模式,由你为每一个单独选择。
你的交流节奏
在 ReAct 中,你还可以在设置 › 偏好设置 › 个性化 › 使用偏好中告诉 LIA 你是怎么使用她的。选择频繁交流时,她会让你的所有工具随时可用,并为每一轮做好准备,让服务商以较低的价格从缓存中重读上一轮:第一条消息稍贵一些,之后的消息便宜得多,前提是你的消息接连不断,而且所选的模型有缓存;否则,偶尔交流仍然更便宜。选择偶尔交流时,她会为每个问题挑选有用的工具,成本与两条消息之间相隔多久无关。新账户默认从偶尔交流开始。
如何选择
对于一个明确、你知道步骤的请求,Pipeline 更快也更便宜。对于开放式的搜索、根据找到的内容而分岔的问题,或者需要分几步使用的工具,ReAct 做得更好。我的建议是:日常使用 Pipeline,当你觉得答案需要探索时,再切换到 ReAct。
