ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何用 activity-labels 评估 harness 对提示词变体批量评分并用 rescore 免重跑省 API 费用

如何用 activity-labels 评估 harness 对提示词变体批量评分并用 rescore 免重跑省 API 费用 如何用 activity-labels 评估 harness 对提示词变体批量评分并用 rescore 免重跑省 API 费用【免费下载链接】LibreChatEnhanced ChatGPT Clone: Features Agents, MCP, Skills, DeepSeek, Anthropic, AWS, OpenAI, Responses API, Azure, Groq, o1, GPT-5, Mistral, OpenRouter, Vertex AI, Gemini, Artifacts, AI model switching, message search, Code Interpreter, langchain, DALL-E-3, OpenAPI Actions, Functions, Secure Multi-User Auth, Presets, open-source for self-hosting. Active项目地址: https://gitcode.com/GitHub_Trending/li/LibreChat当你修改了 LibreChat agent 中activityLabel折叠工具调用组的单行标题的生成指令后需要判断改动是变好还是变坏——盯着一两个会话肉眼看并不可靠。scripts/activity-labels/目录下的 eval harness 把这件事变成了一条可重复的执行路径把固定语料corpus对着多个指令变体variants批量回放用机械检查项打分把结果落盘成 JSON之后任何只改评分逻辑、不改模型输出的调整都可以用rescore.mts对已存结果重新计算分数不再花一次 API 调用。整套流程需要 Node.js 环境、一个ANTHROPIC_API_KEY环境变量或仓库根目录的.env均可以及一份已构建的packages/api产物下文准备条件中说明。一次全量 sweep 按 README 的估计约为每个 variant $0.03、耗时约 45 秒。harness 如何打分先理解 corpus、variant 和 checks 三要素在跑命令之前值得先弄清三件事否则读不懂latest.md里的表格。corpuscorpus.mts17 个 case / 28 个 step。其中sandbox-probe-run是 9 个从 Langfuse 原样抓取的线上真实 payload见 captured.json每个 step 带着线上实际发出的productionLabel其余是合成 case覆盖全部失败、部分失败、并行批次、快速重复、条目溢出、输出截断、错误形态的成功等线上没跑到的模式。多 step 的 case 会把每一步生成的 label 链入下一步的previousLabels上下文用来测跨批次冗余。variantsvariants.mts每个变体是相对生产指令的单因子改动保证一个结果只对应一个假设。内置变体有baseline、legacy、verbs、ordered、continuity、examples、composed、shipping-full、shipping。baseline直接从已构建的packages/apidist 里读ACTIVITY_INSTRUCTION保证不会拿一份过期副本来评。checkschecks.mts机械评分覆盖 4–9 词长度、句尾标点、引号、markdown 残留、Ran/Used/Executed之类泛化开头opener、工具名复读tool-echo、数量复读count-echo以及与前序 label 的 Jaccard 内容重叠。重叠超过 0.5 时再细分为restate高重叠且无新信息——生产上真正出过的问题和template同句式但带了新数字/路径通常可接受。run.mts 按生产 wire 形状发请求system为指令变体、user为 SDK 拼出的 prompt、max_tokens: 256默认模型claude-haiku-4-5、并发 6遇到 429/500/529 会按retry-after最多重试 3 次。准备条件先有 dist再有 keybaseline变体必须从已构建的packages/api加载指令。加载顺序是环境变量LABEL_EVAL_DIST指向的路径 →librechat/api工作区解析 →packages/api/dist/index.cjs。如果三者都取不到harness 会直接报错并给出两条出路variants.mts 中的提示原文# 方式一从仓库根目录构建依次构建>ANTHROPIC_API_KEYsk-… node scripts/activity-labels/run.mts其中sk-…替换为你自己的 key。可选地先用 strict 的 no-emit 配置做类型检查确认 harness 本身没写坏npx tsc -p scripts/activity-labels/tsconfig.json执行步骤先 dry 渲染再小范围最后全量可选--dry验证 prompt 渲染不花一分钱--dry只渲染 prompt、不调用 API、也不要求 key。适合在改过 prompt.mts 或 corpus 后确认字节形状是否符合预期node scripts/activity-labels/run.mts --dry --cases mega-batch它会打印前 3 条渲染结果--- variant / case / step ---后跟完整 prompt最后输出rendered N prompts (showing 3)。主路径全量批量评分# 全部 9 个变体 × 全部 17 个 case × 1 sample node scripts/activity-labels/run.mts # 每个 case 采 3 个 sample观察方差 node scripts/activity-labels/run.mts --samples 3运行时第一行会打印实际组合例如model claude-haiku-4-5 · 9 variants × 1 samples × 17 cases (28 steps each pass)结束后打印done in Ns和 Aggregate 汇总表。替代路径用--variants/--cases缩小范围验证某一两个假设时不必全量跑。README 给出的组合示例node scripts/activity-labels/run.mts --variants baseline,shipping --cases fib-rapid--cases fib-rapid对应 corpus 里三个几乎相同批次连续出现——冗余压力的合成 case。注意选错名字不会静默跳过——过滤后为空会直接抛nothing selected — check --variants / --cases names。其他可调参数见 run.mts 头部注释参数默认值用途--samples N1每个 case 重复采样次数用于看随机性带来的方差--model idclaude-haiku-4-5换模型回放--concurrency N6并发请求池大小读取结果Aggregate 是回归护栏Per-case 表才是召回工具每次运行后results/目录gitignored会新增一个时间戳 JSON全部 record并覆盖写results/latest.md。报告由 report.mts 渲染分两部分Aggregate 表每个 variant 一行列包括 steps含N err错误数、各 flag 类型计数、distinct openers、top opener、avg words、平均延迟以及cost列——费用按claude-haiku-4-5的 $1/$5每百万 input/output token计价换--model跑时该列显示n/a。Per-case 表逐 step 列出各变体生成的 label带⚠flag标注有productionLabel的 case即真实回放 case会并排一列production方便和线上实际发出的标题对照。README 对两者分工的判断是机械检查抓得住格式违规和词面重复但线上真实出过的失效——信息上冗余、词面上不重复的标题——往往在重叠阈值之下不触发任何 flag。所以results/latest.md的 per-case 表要靠人眼读聚合表只当回归护栏。用 rescore 免重跑改评分逻辑后不再花 API 钱run.mts和rescore.mts共用同一套aggregate/markdownReportreport.mts 头部注释明确这一点metric 修复永远不需要再花钱调 API。当你调整的是 checks.mts 里的阈值或 flag 逻辑、而不是模型输出本身时用离线重算# 默认取 results/ 下最新的 JSON node scripts/activity-labels/rescore.mts # 或指定某个历史结果文件 node scripts/activity-labels/rescore.mts results/2026-07-29T12-00-00-000Z.json参数是任意一个已存的带时间戳 JSON 文件名results/目录里的产物不传参数时 rescore.mts 取目录中按文件名排序最新的.json一个都没有则报no stored results to rescore。rescore 的工作方式从存储的 label 按 push 顺序重建每条 case 的 chainsteps 本来串行执行对每条 record 重算flags/wordCount/firstWord然后重新渲染报告。两点副作用要知道它会原地改写存储 JSON 里的检查字段并覆盖results/latest.md所以重算历史文件时最新报告对应的就是这个文件。结尾输出rescored 文件名、Aggregate 汇总和 per-case 表位置提示作为重算完成的确认。边界与已知限制results/是 gitignored 的JSON 记录不入库rescore 的前提是本机留着之前的运行产物换机器后无法对旧结果免重跑。cost 计价表只内置了claude-haiku-4-5--model换成其他模型时 cost 列为n/a费用估算需要自己换算。baseline 依赖构建产物dist 里取不到ACTIVITY_INSTRUCTION时整个 harness 起不来这是构建顺序问题而不是 key 问题先区分开再排查。机械检查不是全部commit-log 级别的可读性仍需人工过latest.md这是 checks.mts 注释里明确写下的分工。harness 本身跑出了几条反直觉的结论写在 README 的 Findings 里可作为读懂评分表时的背景把格式约束移到内容规则之后可测量地减少长度违规列举可用开头动词反而让Confirmed从 18 次涨到 23 次锚定效应回喂已提交的 headercontinuity消除了复述且顺带阻止 setup 批次被贴上工具尚未证实的结论3 条 label 的窗口足够无界历史没有更好82input tokens by batch 9按activityMaxPerRun默认 20 外推约250。下一步如果是要把验证过的指令改动落回产品改的是 SDK 的ACTIVITY_INSTRUCTION改完重新npm run build:api再跑一轮--variants baseline对比即可确认分支没有 drift。【免费下载链接】LibreChatEnhanced ChatGPT Clone: Features Agents, MCP, Skills, DeepSeek, Anthropic, AWS, OpenAI, Responses API, Azure, Groq, o1, GPT-5, Mistral, OpenRouter, Vertex AI, Gemini, Artifacts, AI model switching, message search, Code Interpreter, langchain, DALL-E-3, OpenAPI Actions, Functions, Secure Multi-User Auth, Presets, open-source for self-hosting. Active项目地址: https://gitcode.com/GitHub_Trending/li/LibreChat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表