
【免费下载链接】harborFramework for evaluating and improving agents项目地址https://gitcode.com/gh_mirrors/harbor17/harbor点击查看免费下载本文以 original_prompt.md 这一 16 行的提示词模板为核心完整拆解它在 BIRD-BenchNL2SQL 基准对等实验parity experiment中的定位与设计意图并结合 run_original_codex.py 的源码说明该模板如何被渲染、喂给 Codex CLI、输出如何解析为 BIRD 官方评估格式最终复现出与官方基准几乎一致的 EX执行准确率指标。读完本文你可以独立理解并运行 Harbor 的 BIRD 对等验证流程。1. 模板在 BIRD 对等实验中的定位Harbor 的 bird_bench 适配器 将 BIRD SQL dev 数据集转换为 Harbor 任务并在 Docker 环境中用内置 Agent如codex求解而为了证明在 Harbor 上跑 BIRD 与在原始 BIRD 环境中跑等价仓库在 adapters/bird_bench/parity/ 下保留了原始基准一侧的完整推理与评测工具链original_prompt.md原始 BIRD 一侧使用的提示词模板本文主角prepare_bird_eval_inputs.py从 dev 数据中抽取 150 题子集生成 gold SQL、难度文件与推理输入run_original_codex.py用 Codex CLI 逐题调用模型把original_prompt.md渲染成完整 prompt 并收集预测format_predictions.py / export_harbor_predictions.py把任意来源的预测整理成 BIRD 官方evaluation.py可消费的predict_dev.json格式。对等实验的结论记录在 parity_experiment.json150 题分层子集seed 42占完整 dev 集 9.8%codex0.77.0openai/gpt-5-mini每个侧各跑 3 次原始基准 EX 为 58.67 ± 0.38%Harbor 适配器为 58.23 ± 0.23%逐次分别为 58.7/59.3/58.0 与 58.0/58.7/58.0。original_prompt.md就是让原始基准侧这一半数字可信的关键输入。2. 提示词模板全文与逐段设计意图模板全文如下共 16 行原样继承未做任何改动You are given a natural language question and a database schema. Your task is to write a single SQLite SQL query that answers the question. Rules: - Output ONLY the SQL query (no code fences, no explanations). - Do not modify the database. - Use the provided schema and evidence if available. Question: {question} Evidence: {evidence} Schema: {schema}逐段看它的设计角色与任务定义第 1–2 行。模板以陈述句而非第二人称祈使句开场明确三件事输入是自然语言问题 数据库 schema输出是单条 SQLite SQL。注意single SQLite SQL query限定了单查询、单方言——BIRD dev 集全部是 SQLite这排除了模型生成多条语句或 MySQL 特有语法的可能。Rules 三条硬约束第 4–7 行Output ONLY the SQL query (no code fences, no explanations)—— 这是给下游解析器的契约。Codex 是通用 Agent CLI默认倾向输出解释性文字和代码围栏这条规则要求裸 SQL 输出使 run_original_codex.py 中的SELECT|WITH|INSERT|UPDATE|DELETE定位正则能可靠截取详见第 5 节。Do not modify the database.—— 原始 BIRD 协议中推理侧数据库是共享只读资源写操作会污染 gold 比对结果这条规则把该约定显式写进 prompt。Use the provided schema and evidence if available.—— if available 与占位符的兜底值精确对应BIRD 中部分题目没有 evidence外部知识提示run_original_codex.py在缺失时会填入N/A第 160 行evidence item.get(evidence) or N/A模板措辞因此不产生误导。三个占位符第 9–16 行。{question}、{evidence}、{schema}是 Pythonstr.format风格占位符由推理脚本统一渲染# adapters/bird_bench/parity/run_original_codex.py 第 167 行 prompt template.format(questionquestion, evidenceevidence, schemaschema)三个字段的数据来源占位符来源说明{question}dev_parity.json中每题的question字段自然语言问题缺失会直接抛错脚本第 162–163 行校验db_id/question{evidence}同文件evidence字段缺失时兜底为N/ABIRD 的外部知识提示帮助模型理解业务缩写如 FRPM stands for Free or Reduced Price Meal program{schema}运行时从 SQLite 文件即时提取的建表 DDL见下节仓库内附带的 parity/bird_eval_inputs/dev_parity.json 就是一个真实样例question_id3、db_idcalifornia_schools含完整的 question 与 evidence 文本可直接作为输入格式参照。3. schema 占位符只读 URI 连接的 DDL 提取{schema}不是数据集里现成的字段而是每次推理前由脚本从对应数据库文件实时生成的。提取逻辑在 run_original_codex.py 的_extract_schema()conn sqlite3.connect(ffile:{db_path.as_posix()}?modero, uriTrue) try: rows conn.execute( SELECT name, sql FROM sqlite_master WHERE typetable AND name NOT LIKE sqlite_% ORDER BY name ).fetchall() stmts [row[1] for row in rows if row[1]] return \n.join(stmt.strip() for stmt in stmts) finally: conn.close()几个值得注意的实现细节modero只读 URI 连接从机制上而非仅靠 prompt 规则保证推理过程无法写库与模板中 Do not modify the database 形成双重保险。typetable AND name NOT LIKE sqlite_%只取用户表的CREATE TABLE语句剔除sqlite_sequence等内部表避免噪声进入 prompt。ORDER BY name 换行拼接表定义按字母序稳定排序后逐条换行保证同一数据库多次运行得到逐字节一致的 prompt这对 3 次重复实验的可复现性很重要。数据库定位遵循 BIRD 的dev_databases目录约定第 165 行db_path args.db_root / db_id / f{db_id}.sqlite即每个db_id一个子目录、内含同名.sqlite文件。4. 推理管线从模板渲染到 predict_dev.jsonrun_original_codex.py 是模板唯一的消费方其main()流程为读取--prompt-template模板文本与--subset-json子集列表 → 逐题提取 schema、渲染 prompt → 调用 Codex CLI → 解析输出 → 落盘。完整命令与 README 记载一致python adapters/bird_bench/parity/run_original_codex.py \ --subset-json /path/to/bird_eval_inputs/dev_parity.json \ --db-root /path/to/databases \ --prompt-template adapters/bird_bench/parity/original_prompt.md \ --output-dir /path/to/bird_eval_inputs \ --model gpt-5-mini参数说明--subset-json为 150 题推理输入列表--db-root为dev_databases根目录--prompt-template即本文的模板文件required参数--model指定模型名另有--codex-bin默认codex与--log-file默认output-dir/codex_log.jsonl。对每题脚本通过_run_codex()第 53–117 行构造如下子进程codex exec --dangerously-bypass-approvals-and-sandbox \ --skip-git-repo-check \ --model model \ --config model_reasoning_efforthigh \ --json -- rendered_promptprompt 通过--之后的位置参数一次性整段传入即original_prompt.md渲染结果就是模型看到的全部内容——没有工具调用、没有多轮这是与 Harbor 侧交互式 Agent 的本质区别--json让 Codex 以 JSONL 事件流输出脚本逐行解析优先取item.completed中agent_message的文本其次取output字段最后回退到原始 stdout第 103 行 的selected last_agent_message or output_text or proc.stdout.strip()环境变量侧把OPENAI_API_KEY映射为CODEX_API_KEY第 67–68 行每题的返回码、事件数、耗时、prompt 长度与完整 trace 追加写入 JSONL 日志便于事后核查 3 次运行间的差异。最终预测按 BIRD 官方格式写出第 172 行 以索引为键、值为{sql}\t----- bird -----\t{db_id}SQL、分隔符、库名以 Tab 连接第 187–188 行 写入output-dir/predict_dev.json。该格式与 format_predictions.py 中f{sql}\t----- bird -----\t{db_id}的拼接逻辑一致——两条路径Codex 直跑 / 已有预测文件殊途同归保证官方evaluation.py能统一解析。5. 与 ONLY SQL 规则配套的解析容错模板要求裸 SQL但 LLM 仍可能夹带围栏或解释因此脚本内置两级清洗_strip_fences()第 29–38 行若输出以 开头剥掉首围栏含可选的sql语言标注与尾围栏_extract_sql()第 41–50 行用re.search(r\b(SELECT|WITH|INSERT|UPDATE|DELETE)\b, ...)定位首个 SQL 关键字截取从该位置到末尾的文本。BIRD 的 gold 中大量使用WITHCTE开头的查询可参照 parity/bird_eval_inputs/dev_gold.sql 前几行均为WITH ... AS所以正则必须覆盖WITH而不仅是SELECT。这一解析层正是模板 Rules 第 1 条的工程侧呼应prompt 约束降低脏输出概率正则兜底保证流水线不中断。6. 上游输入准备与模板配套的 gold/diff/subset 三件套推理前需用 prepare_bird_eval_inputs.py 为同一 150 题子集生成官方评估所需的输入文件python adapters/bird_bench/parity/prepare_bird_eval_inputs.py \ --data-file /path/to/dev.json \ --subset-file datasets/bird-bench-parity/parity_subset.json \ --output-dir /path/to/bird_eval_inputs \ --data-mode dev \ --subset-json /path/to/bird_eval_inputs/dev_parity.json它产出三个文件仓库内的 parity/bird_eval_inputs/ 即为实例dev_gold.sqlgold SQL 逐行单行化SQL\tdb_id。注意 第 96–114 行 做了多行 SQL 单行化归一splitlines拼接 制表符/回车替换 双空格折叠因为官方evaluation.py按行读取——README 的 Benchmark Issues Handling 一节明确记录了这一兼容性处理dev_diff.json难度标签序列脚本把 BIRD 原始难度词归一化到三档第 17–25 行easy/simple→simple、moderate/medium→moderate、challenging/hard→challengingdev_parity.json按评估顺序排列的子集记录列表即run_original_codex.py的--subset-json输入模板中的question/evidence字段皆取自此处。子集本身由适配器的--parity模式生成150 题、按难度分层、seed 42保证原始侧与 Harbor 侧评测同一批题目uv run bird_bench --parity --parity-size 150 --parity-seed 42 \ --data-file /path/to/dev.json --db-root /path/to/databases \ --output-dir ../../datasets/bird-bench-parity7. 评估闭环EX 指标与官方 evaluation.py 的衔接预测文件predict_dev.json生成后交给 BIRD 官方evaluation.py计算执行准确率python /path/to/bird/llm/src/evaluation.py \ --predicted_sql_path /path/to/bird_eval_inputs/ \ --ground_truth_path /path/to/bird_eval_inputs/ \ --data_mode dev \ --db_root_path /path/to/databases/ \ --diff_json_path /path/to/bird_eval_inputs/dev_diff.json \ --meta_time_out 300 \ --num_cpus 1两点实操注意README 原样记载predicted_sql_path与ground_truth_path必须以/结尾脚本内部直接做文件名拼接meta_time_out 300是单条 SQL 的执行超时防止昂贵查询拖垮评测。EX 的定义是预测 SQL 与 gold SQL 在同一数据库上的执行结果按集合相等——Harbor 侧验证器 tests/evaluate.py 特意对齐了该官方逻辑以避免分数漂移。反向通道同样完备若想把 Harbor 的产物也送进官方评估器可用export_harbor_predictions.py从jobs/job_id/task_id/verifier/answer.sql导出 BIRD 格式预测若你已有自定义预测 JSONdict 或 list 两种结构均可format_predictions.py 的_load_predictions()也能统一转格式。8. 与 Harbor 侧 instruction.md 的对照同一协议两种载体把original_prompt.md与 Harbor 任务模板 task-template/instruction.md 并排读能清晰看出两条评测路径的设计分野维度original_prompt.md原始侧instruction.mdHarbor 侧数据库交付schema DDL 内联进 prompt模型看着schema 写 SQL每任务内嵌真实db.sqlite于容器/app/db.sqliteAgent 可用sqlite3/Python 实际查数占位符Pythonstr.format的{question}/{evidence}/{schema}任务模板渲染变量{{QUESTION}}/{{EVIDENCE_SECTION}}/{{SCHEMA}}输出落点对话消息由 harness 解析写入文件/app/answer.sqlOracle 方案即直接写 gold SQL交互形态单轮、无工具多轮、可执行命令探查数据原始侧 prompt 的schema 全量内联 单条 SQL 直答正是 BIRD 官方推理协议的形态Harbor 侧则允许且常常受益于实际查库。两者共享同一子集、同一 gold、同一 EX 口径最终 0.44 个百分点的差距58.67 vs 58.23均 3 次平均支撑了 parity_experiment.json 的等价性结论。9. 复现清单与限制按 README 的 Reproduction requirements完整复现需要Codex CLI 版本锁定为对等实验所用版本npm install -g openai/codex0.77.0并export OPENAI_API_KEY...BIRD dev 数据dev_20251106.jsondev_databases建议按 README 的Local Dataset Usage小节预下载到adapters/bird_bench/datasets/避免在线下载超时Harbor 侧执行uv run harbor run -c adapters/bird_bench/run_bird-bench-parity.yaml -a codex -m model对应 run_bird-bench-parity.yaml两侧各重复 3 次每次使用独立--output-dir。从模板本身看有两点适用前提值得强调其一它假定输入恒为 SQLite 且 schema 可一次性内联超宽库的 DDL 会显著拉长 prompt模板未做截断策略其二模板不含任何逐步推理引导reasoning_efforthigh完全由 Codex CLI 的配置项承担——若更换模型或 Agent 框架prompt 约束尤其是ONLY SQL与解析侧的正则必须成对迁移否则预测格式会偏离evaluation.py的解析假设。参考文件索引提示词模板adapters/bird_bench/parity/original_prompt.md原始侧推理脚本adapters/bird_bench/parity/run_original_codex.py输入准备 / 预测格式化prepare_bird_eval_inputs.py、format_predictions.py、export_harbor_predictions.py实例数据bird_eval_inputs/dev_parity.json、bird_eval_inputs/dev_gold.sql、bird_eval_inputs/dev_diff.json对等结果与适配器总览parity_experiment.json、adapters/bird_bench/README.mdHarbor 侧任务模板src/bird_bench/task-template/instruction.md、tests/evaluate.py赞分享【免费下载链接】harborFramework for evaluating and improving agents项目地址https://gitcode.com/gh_mirrors/harbor17/harbor点击查看免费下载相关推荐Harbor BIRD-Bench 适配器实战指南NL2SQL 基准转 Harbor 任务与执行正确性评测Harbor BIRD Bench 适配器实战指南NL2SQL 基准转 Harbor 任务与执行正确性评测 本文基于仓库中 BIRD Bench 适配器文档什么是破甲Codex-X提示词注入原理深度解析什么是破甲Codex X提示词注入原理深度解析 Codex X 是一款面向 OpenAI Codex 桌面端 / CLI 的可视化管理工具核心能力之一是 提桌面应用开发者工具AI 应用Codex-X 保留原提示词与替换原提示词有何区别新手友好指南Codex X 保留原提示词与替换原提示词有何区别新手友好指南 Codex X 是 OpenAI Codex 桌面端 / CLI 的可视化管理工具其中提示桌面应用开发者工具AI 应用上一篇Codeforces-Go 题解所有和为 k 的子序列的能量之和——贡献法 二维/一维 0-1 背包计数下一篇OpenDesign Refined 设计系统包使用指南从包契约到组件落地的完整实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考