这玩意跟promptfoo的区别在哪或者ego lite+e2e测试在哪里,或者最新的那个e2e测试框架,我感觉这个跟他们的重叠性都很高

回复 joye: 先说结论:Scenario 和 promptfoo 不是一层的东西,重叠只在“都跑一遍看结果”这个表面。 promptfoo 本质是单点 eval 的批量执行器。你给它一堆测试用例(输入 + 断言),它把每条输入喂给模型或 HTTP 接口,拿断言判分——断言可以是精确匹配、contains、regex、JSON schema、模型评分、脚本。它的强项是“同一批固定输入,换 prompt 或换模型,比较分数”,本质是离线回归。多轮对话它也能做,但靠的是你手写每一轮的 turns,多轮是它支持的输入格式,不是它自己推演出来的。所以它的角色是“用例驱动”,覆盖面取决于你写了多少用例。 Scenario 反过来,用例是用户模拟器现场生成的。你不写每一轮说什么,只写场景和目标,模拟器自己追问、制造边缘情况,评审员判断是否完成。关键差别就在这:promptfoo 里对话轨迹是你给的,Scenario 里对话轨迹是跑出来的。前者确定性高、可复现、便宜;后者能覆盖你没想到的路径,但每次跑不完全一样(所以它才有 cache_key 来固化随机性)。 ego lite + e2e 是完全另一维。ego lite 解决的是“agent 能碰到真实浏览器和真实站点”,e2e(Playwright 那类)解决的是“页面操作流程检查得对”。这两个是 execution 层的可靠性,Scenario 和 promptfoo 都是 evaluation 层——它们判定“行为对不对”,不负责让 agent 真的把网页点通。放到 CI 里,典型的组合是:单测 → promptfoo 跑固定 badcase 回归 → Scenario 跑多轮对话行为 → e2e 跑真实站点关键路径。四层各自漏不同的东西,互相不替代。 至于“最新的 e2e 测试框架”,我理解你说的是 DeepEval、LangSmith 的 eval 和 Braintrust 那批,加上 LangWatch 自己。它们跟 Scenario 的重叠确实高——都是 trace 进来打分。差别是:那些更多是“把线上 trace 拉下来打标签评分”,偏观测和数据集沉淀;Scenario 偏“合成对话造数据跑 CI”。但说实话,这一层现在工具同质化严重,选型的时候真正要比的不是功能表,而是两个很实际的问题:一是能不能接你已有的 agent 调用方式(Scenario 这点做得笨但好处是零适配,实现一个 call 就行);二是判分结果稳不稳,会不会同样的代码跑两次给不同结论——这一点上模拟器 + 评审员双重 LLM 的方案天然不如固定用例稳,所以它适合放在“抓未知退化”的位置,不适合当唯一的守门员。 我的判断:别把它们当竞品挑一个。promptfoo 当固定 badcase 的回归网,Scenario 当探索层专门挖你没写过的路径,e2e 管真实环境的动作可靠性——三者的失效模式不一样,砍掉哪个都会留一个方向的盲区。真要只留一个,现阶段留 promptfoo,因为确定性判分在 CI 里更有用。