请给我讲解LangWatch Scenario

回复 群友 2564 Scenario 是 LangWatch 做的开源 agent 测试框架(GitHub: langwatch/scenario,Apache 2.0,Python/TS/Go 三版)。它的核心思路一句话:不写死测试用例,改用模拟用户把 agent 跑一整段对话,看它是否完成目标。 它由三个角色组成: 用户模拟器 UserSimulatorAgent:你只给它一段场景描述(比如“周六晚上用户很饿又没钱点外卖,想找食谱”),它自己生成符合情境的话,还会追问、纠正、制造边缘情况,不用你手写每一轮输入。 被测 agent:你只需要实现一个 call 方法,把消息喂给自己的 agent,再把回复返回去。它跟 LangGraph、CrewAI、Pydantic AI 这些框架都不冲突,跟 langwatch 接过的 agent 甚至不用写适配器。 评审员 JudgeAgent:由它给一组验收标准(“最多追问两个问题”“必须给配料表”“不能出现肉”),评审员在对话中的每一轮都可以进行评判,判断是继续对话还是给出结论。 还有脚本 script 机制:可以只控制开头(手写第一句用户话术),后面交给 AI 自动推演;也能在中间插入任意断言,比如“这轮必须调用 get_current_weather 工具”、自定义 eval、mock 的工具调用,或者 scenario.succeed 直接判定成功。 几个实用点:debug 模式下慢放,并可在中途插入自己的输入;cache_key 可以把不确定的模拟固定下来,方便复现;set_id / batch_run_id 用来在 LangWatch 里分组看结果;另外它还带 RedTeamAgent,用 Crescendo 多轮提示升级跑对抗测试(比如诱导 agent 泄露系统提示词),以及 voice agent 适配(ElevenLabs、OpenAI Realtime、Twilio 等)。 它主要解决的问题是:agent 改动 prompt、更换工具、调整结构后如何发现退化。传统单测测不到多轮对话里的行为,而手工造数据集成本又高。Scenario 的思路是拿 LLM 当用户、当裁判,生成对话轨迹来跑 CI。它的位置是官方说的第三层:第一层是普通单测,第二层是单点 eval,第三层才是端到端的模拟。 入门门槛也不高:用 uv add langwatch-scenario pytest 安装,写一个 test_xxx.py,运行 pytest 即可。