发布版本
v1.0.0:Airline RL 任务 1,148 条,成功 rollout 749 条,导出 SFT assistant turn 7,089 条,最终审计 PASS。完整数据集通过 GitHub Release 发布。
- 项目结构:目录职责、模块边界、产物生命周期和版本控制边界。
- 数据集与构造过程:数据来源、逐阶段算法、中间文件、质量门和最终结果。
- 问题与解决方法:本轮实际问题、根因、修复方式、证据及遗留风险。
- 复现与运行手册:环境准备、分阶段命令、恢复规则、验收与最终状态。
这个项目重建 AReaL-SEA 论文 与
EigenData 论文 描述的 tau2 数据构造链路,输出与
inclusionAI/AReaL-tau2-data
兼容的 RL 任务和逐 assistant turn 的 SFT JSONL。
需要先说明边界:AReaL 公开仓库中的 examples/tau2
公开了训练和异步 rollout 接入,但没有公开 SEA 的数据生成实现与原始提示词。本项目因此是
“论文忠实、格式兼容、可执行验证”的等价重建,不冒充官方源码。可精确复用的部分直接使用
τ²-bench 的环境、工具、数据库模型和 evaluator;提示词、反思策略和数据库扩增是根据论文与
最终数据反推的实现。
完整数据集位于 GitHub Release v1.0.0,
下载 tau2-sea-airline-v1.0.0.tar.gz 后解压:
curl -LO https://github.com/March-77/EigenData/releases/download/v1.0.0/tau2-sea-airline-v1.0.0.tar.gz
curl -LO https://github.com/March-77/EigenData/releases/download/v1.0.0/SHA256SUMS
shasum -a 256 -c SHA256SUMS
tar -xzf tau2-sea-airline-v1.0.0.tar.gz发布包包含:
| 文件 | 行数 | 用途 |
|---|---|---|
tau2_rl_train.jsonl |
1,148 | 可执行、可验证的 RL 任务 |
tau2_rl_provenance.jsonl |
1,148 | seed、plan、快照和验证 provenance |
tau2_rollouts.jsonl |
1,148 | 完整 rollout 与 reward |
tau2_sft_train.jsonl |
7,089 | 按 assistant turn 切分的 SFT 样本 |
tau2_rl_database/ |
5 个文件 | Airline 环境数据库快照与索引 |
数据格式、字段说明、哈希和发布边界见 dataset/README.md。仓库内同时保留
数据库快照,便于下载代码后直接执行 rollout;大 JSONL 不进入 Git 历史,避免拖慢 clone。
src/tau2sea/ 数据生成、验证、rollout、审计实现
config/ smoke、完整基线、retry 与实验配置
scripts/ 后台运行、恢复、汇总和统计工具
tests/ 不依赖真实批量 API 的测试
dataset/ 数据集卡、发布清单、校验和与数据库快照
docs/ 构造方法、运行手册和排障文档
artifacts/ 最终数据统计图与分析产物
diagrams/ 可编辑流程图及导出图片
τ² 原始数据库/策略/训练 split
│
├─ 约束安全的数据库快照扰动
│
└─ 64 组多样化 synthesis/evaluation plan(full 配置)
│
Task Synthesis Agent
│
静态 schema + ID grounding 检查
│
τ² golden actions 可执行回放
│
Task Verification Agent
│ PASS │ FAIL
▼ ▼
task pool Modify Agent → 重验
│
Reflection Agent 更新独立 plan stream
│
assistant ↔ user simulator ↔ τ² environment rollout
│
τ² state/action reward
│
成功轨迹切成逐 assistant-turn SFT
│
去重、字段审计、分布与质量报告
对应论文的关键机制都保留了:顺序生成互补 plan、每个 plan 独立自演化、任务/轨迹两级质量门、 失败根因归因、repair、批量 reflection、真实工具执行、最终数据库状态奖励、断点续跑和全链路 provenance。
需要 Python 3.10–3.12、uv、Git,以及能够访问 DeepSeek 官方 API 的网络环境。
# 1. 安装项目、测试依赖和论文使用的 tau2 async fork
uv sync --extra tau2 --extra dev
# 2. 拉取固定版本的 tau2 数据文件
uv run tau2-sea bootstrap --destination external/tau2-bench
export TAU2_DATA_DIR="$PWD/external/tau2-bench/data"
# 3. 只通过环境变量提供密钥;项目不会把密钥写到磁盘
export DEEPSEEK_API_KEY="<your-key>"
# 4. 先检查接口,然后运行小规模闭环
uv run tau2-sea api-smoke --config config/smoke.yaml
uv run tau2-sea run-all --config config/smoke.yaml分阶段运行便于检查中间产物:
uv run tau2-sea prepare --config config/smoke.yaml
uv run tau2-sea generate --config config/smoke.yaml
uv run tau2-sea rollout --config config/smoke.yaml
uv run tau2-sea audit --config config/smoke.yaml只验证少量真实轨迹时可加 --limit 1;输出仍使用相同的可断点续跑文件。
config/full-baseline.yaml 按本轮基线口径只生成 Airline 1,148 条,并为每题做最多两次 rollout;Retail
与 Telecom 支持仍保留在代码中,但不会被该配置准备、生成或 rollout。当前 config/full.yaml 是基线
结束后对失败项新增 10 次尝试的历史 retry-10 配置,不适合作为全新运行的默认入口。SFT 数量由成功轨迹
的 assistant turn 数决定。
复现发布版数据时按同一 runs/full 工作目录连续执行两个阶段:
# 第一阶段:生成 1,148 条 RL,并为每题执行最多 2 次 rollout
uv run tau2-sea run-all --config config/full-baseline.yaml
# 第二阶段:只对第一阶段失败项追加最多 10 次尝试,然后重新审计
uv run tau2-sea rollout --config config/full.yaml
uv run tau2-sea audit --config config/full.yaml
uv run python scripts/summarize_rollout_retry10.py模型 API 的采样和服务端版本可能造成新运行结果与发布版不逐字节相同;Release 中的文件及 SHA-256 是本次发布结果的不可变恢复基准,以上命令用于按相同代码、配置和质量门重新执行完整流程。
默认生成到 runs/<name>/generated/:
tau2_rl_train.jsonl:与公开 RL split 相同的核心字段,evaluation_criteria保持 JSON 字符串。tau2_rl_provenance.jsonl:plan 版本、seed pattern、数据库和验证结论;训练前可与核心数据分离。tau2_rollouts.jsonl:完整轨迹、终止原因与 τ² reward breakdown。tau2_sft_train.jsonl:messages、answer、metadata三列;answer包含thinking和tool_calls。report/audit.json与report/audit.md:字段、数量、动作分布、近重复和错误清单。
数据库快照放在 data/work/tau2_rl_database/。RL 行里的 db_path 使用公开数据一致的相对形式,
例如 tau2_rl_database/tau2_airline_db_2.json。
config/full.yaml 使用 2,400 RPM / 4,800,000 TPM 的本地工作负载保护和 256 并发。这些是项目侧
保护值,不代表 DeepSeek 账户额度;运行前应按账户当前容量调整。大 schema 和数据库上下文请求通常先受
本地 TPM 限制。客户端实现了:
- 进程内 60 秒滑动窗口的请求和 token 双限流;
- 全局并发上限;
- 429、连接错误和超时的指数退避;
- 确定性阶段的请求缓存;
- 每次请求的 trace、usage 和耗时记录;
- 原子 JSON/JSONL checkpoint,重复命令会从已有 plan/stream/rollout 恢复。
当前 full/smoke 配置使用 DeepSeek 官方 OpenAI Chat Completions 接口和 deepseek-v4-flash,并开启
structured_output:各阶段发送 response_format.type=json_object,随后在本地做 JSON Schema 校验;
已知的候选字段错位会先安全规范化,仍不合规的输出最多自动重试 3 次。客户端使用 max_tokens,并通过
extra_body.thinking.type=disabled 关闭思考模式。纯 JSON、Markdown JSON fence 和短前缀提取仍作为
兼容解析层保留。
每个候选任务至少经过以下检查:
- Pydantic/JSON 字段校验;
- assistant/user tool 名称、requestor 和参数 JSON Schema 校验;
- 数据库标识符 grounding 检查;
- Airline 在完整数据库上重绑动态 reservation id、订票金额和更新付款方式,并检查完整行程;
- τ²
Task模型校验; - 在候选指定的数据库快照上顺序回放 golden actions;
- 执行
env_assertions; - LLM judge 对策略合规、可解性、渐进披露、动作顺序和唯一解做复核;
- SimHash 近重复过滤;
- rollout 后用任务专属数据库构造 gold/predicted final state 并比较 reward。
已落盘的 accepted checkpoint 采用 append-only 恢复语义:恢复时只检查结构、通过标记和数据库文件, 不让后来新增的质量规则静默删除此前已验证的数据;批次超额 accepted 会通过动态调整未完成 plan 配额 进入最终目标,不再被固定 plan 配额截断。新规则完整应用于所有后续候选。
默认只使用 τ² 的 train seed patterns,避免把 test 任务改写进训练集。source_split 可以修改,
但除非是封闭研究,不建议使用测试 split。
如果本地已有 Hugging Face 的 RL JSONL:
uv run tau2-sea compare \
--reference-rl /path/to/tau2_rl_train.jsonl \
--generated-rl runs/full/generated/tau2_rl_train.jsonl \
--output runs/full/report/reference_comparison.jsonscripts/inspect_reference.py 还可以检查公开 RL/SFT 的字段、领域和动作分布。
- 数据库扩增:官方生成器未开源。本项目保留所有 ID 和历史记录,只扰动航班库存/价格及商品 库存/价格,优先保证可执行性。若你已有公开数据库快照,可直接替换 snapshot manifest。
- Plan 与 prompt:结构来自论文 Figure 1、Section 4 和 EigenData DataAgent 描述,具体措辞是重建版。
- SFT reasoning:若兼容接口返回
reasoning_content、reasoning或<think>...</think>,会写入answer.thinking;接口不返回时保持空字符串,不伪造思维链。设置rollout.include_reasoning=false时即使上游意外返回 reasoning 也不会写入 SFT。 - teacher mode:
rollout.teacher_mode=true可用 golden actions 提高成功率,但导出时会移除包含 resolution steps 的内部 system prompt。默认关闭以获得更高保真度。 - 成本控制:先运行 smoke;全量任务生成还包含 judge、repair 和 rollout,调用数量显著高于目标 task 数。所有阶段可断点恢复。
uv run pytest
uv run ruff check src tests scripts --exclude scripts/generate_dataset_statistics.py项目代码采用 Apache-2.0,详见 LICENSE。数据集发布说明见
dataset/README.md。上游论文、AReaL 和 τ²-bench 分别遵守各自许可证。