做了一段时间trace的分析,脑袋逐渐迷糊,需要复盘一下最近的工作。
为什么我们需要对trace进行分析?
现在的agent是model+harness,因此任务失败的时候,我们要去探究到底是模型能力不足,还是工具错误,还是harness的上下文管理出现问题。
评测集能告诉我们agent执行的结果好不好,但是我们想知道为什么好/不好,就要去观测trace,来解释agent执行的结果,从而优化耗时、成本。
我们关注哪些维度?
使用ai的场景有两种:ai能在相同时间下完成更多任务;ai能在相同成本下完成更多任务。反过来就是完成同样的任务,ai能花更少的时间/成本。对于人力成本更高的公司来说,时间是最关键的资源,因此我们希望agent的单次执行成功率越高越好,而不是通过多轮的交互来矫正agent的行为。这也是为什么我们会毫不犹豫的购买sota模型资源,而并不去选择更有性价比的模型。
但同时,我们也非常关注token的使用效率,如果一个人一天的token成本上万,浪费了大量token去做无用的调研/测试,这种人员也是我们不喜欢的。这也是为什么各大公司开始收紧模型资源,控制token成本。
总结一下,我们会关注以下几个维度:
- Time:任务总耗时
- Score:任务成功率/经过rubric评判得出的分数。
- Token: 耗费的总token量,缓存命中率,折算出的金钱成本
- Tool Effeciveness: 有效工具调用数/总工具调用数,用来评判agent是否能高效使用工具
- Autonomous Completion Rate: 无需干预的成功任务数/总任务数
- Safety:产出的code是否有严重漏洞/安全风险
当然,我们也需要关注同一任务多次运行的成功率,执行效率,上下文管理效率等等,但我需要先跑通一套mvp,做完基本的分析后,再去叠加维度。
还有一个比较重要的维度,就是agent的是否说人话,但是这种可以通过skill/prompt来优化,所以我们目前不加入分析维度。
我们要记录哪些信息?
根据奥卡姆剃刀原理,我们需要尽量减少不必要的数据采集。因为记录更多更详细的信息,不但提高采集器的要求,还增大了存储压力,建索引的时间,以及服务器的成本。
- 时间信息,包括模型/工具的起止时间,耗时等
- 模型信息:model call发送的信息,返回的信息,token usage
- 工具信息:名称,输入输出,状态,终端返回等
- 用户信息:user query,审批,引导等
- 关联信息:与单次span关联的session/轮次,调用之间的关联
- 事件信息:任务开始/完成/中断
- 环境信息:harness版本,模型版本,运行配置