看看promptfoo repo里面的一些examples吧

回复 joye: 看了。examples 目录里跟 eval 最相关的那一批,挑几个真有信息量的说一下。 跟 Agent 直接相关的首选 claude-agent-sdk 这个例子,它本身就是一套完整教案,按难度分了好几层:basic 目录是临时目录、零工具、当成普通 Anthropic provider 用,里面还有个 promptfooconfig.tracing.yaml,开 OTEL tracing 后用 trace-span-count 数 gen_ai.turn 的 span 数量,直接断言「这个任务跑了几轮」,而且必须加 --no-cache,否则缓存命中会提前短路、数不到 span。working-dir 目录挂一个塞了 bug 的 Python/TS/JS 项目,只读工具 Read、Grep、Glob、LS。advanced 目录才是重头戏:append_allowed_tools 加上 Write/Edit/MultiEdit,permission_mode 设 acceptEdits,然后用 hooks.js 里的 beforeAll / afterEach / afterAll 钩子把 workspace 管起来——测试前 git init,每个 case 跑完抓一次带时间戳的 diff 存成 markdown 报告,然后 reset,最后删掉.git,还配了 maxConcurrency: 1 防并发踩踏。这套就是「不靠 agent 自述,靠工作区真实 diff 验结果」的最小实现。再往后 mcp 目录接 MCP weather server 测工具权限,structured-output 用 JSON schema 锁输出,skills 目录测 SKILL.md 被正确调用(断言归一化后的 metadata.skillCalls),skill-comparison 拿同一个 skill 的两个版本跑同一批 review 任务做对比,plugins 目录则是从 Claude Code plugin 而不是 setting_sources 加载 skills。 compare-agentic-sdks 也很值得看:同一份故意留洞的 Python 代码库(MD5 存密码、时序攻击、可预测 session token、金额用 float、日志打 CVV),四个 provider 并排跑——Codex SDK 隐式读文件 + output_schema 出结构化 JSON,Claude Agent SDK 显式用 Read/Grep/Glob 出自然语言,OpenCode SDK 工具用法类似但换 provider 只要配置,最后一个是纯 LLM baseline。baseline 这栏是精髓:它读不了文件,只能「教你如何做安全审计」,一对比就知道文件访问到底贡献了什么。 再往下,eval-tool-use 值得单独提,它示范了 finish-reason 断言——模型该不该停下来发起工具调用,是可以直接断言的,比如问波士顿天气就该以 tool_calls 结束;另外 Anthropic 那边开了 strict: true,工具入参严格对齐 schema。config-multi-turn 和 config-stateful-session-management 管多轮会话状态,integration-crewai、integration-e2b、integration-docker、integration-browser 是把 agent 放进真实运行时或沙箱里跑,integration-github-action 是把 eval 挂进 CI。eval-rag、eval-rag-full、eval-context-relevance-grader-output 这一组是 RAG 检索质量,eval-self-grading / eval-custom-grading-prompt / eval-search-rubric 是拿模型当裁判的几种写法。 配套的 evaluate-coding-agents 文档里有几条具体到能直接抄的实践。一是 trace 断言:trajectory:step-count,value 里写 {type: command pattern: 'pytest*' min: 1},意思是必须真的执行过 pytest,而不是嘴上说跑了;想卡工具路径就用 trajectory:tool-used 和 trajectory:tool-sequence。二是 agent 任务比纯 LLM 贵得多,一次安全审计 0.1 到 0.3 美元、30 到 120 秒,所以配 cost 和 latency 阈值当回归红线,比如 threshold: 0.25、threshold:。三是看 token 分布反推行为,prompt token 大而 completion 小说明在读文件,反过来就是你在测模型而不是测 agent。四是非确定性要用 --repeat 3 量方差,开发期一律 --no-cache 免得缓存盖住回归。五是它的 QA checklist 基本就是 PR 门禁清单:必须有 baseline、至少一个结构化断言、有成本延迟阈值、写操作放一次性工作区、路径重要就上 trace 断言、预期稳定的 prompt 要跑 repeat。 安全口径也写得很硬:Codex 侧没明确要求就 sandbox_mode: read-only,network_access_enabled、web_search_mode 默认关,环境变量用 cli_env 白名单传;Claude Agent SDK 和 OpenCode 从只读文件工具起步,要放开写、Bash、MCP 得是测试直接断言这些行为才开,不想要就直接 disallowed_tools: ['Bash']。还有个 cyber-espionage 例子,照着 Anthropic 那篇 Disrupting AI Espionage 搭了模拟靶场(配置文件、凭证、日志、敏感数据)配 jailbreak:meta、jailbreak:hydra、crescendo、goat 这些攻击策略和 excessive-agency、ssrf、pii 插件,做红队用。 一句话:这套 examples 正好把「eval 怎么做」落到了可运行的配置上,你要给群友 2523那个问题补具体例子,从这里挑几个就够了,比讲概念管用。要我把其中某一个 example 的 config 拆开细讲也行。