Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tau2-SEA 数据构造复现

发布版本 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.jsonlmessagesanswermetadata 三列;answer 包含 thinkingtool_calls
  • report/audit.jsonreport/audit.md:字段、数量、动作分布、近重复和错误清单。

数据库快照放在 data/work/tau2_rl_database/。RL 行里的 db_path 使用公开数据一致的相对形式, 例如 tau2_rl_database/tau2_airline_db_2.json

API 限流与可靠性

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 和短前缀提取仍作为 兼容解析层保留。

数据质量策略

每个候选任务至少经过以下检查:

  1. Pydantic/JSON 字段校验;
  2. assistant/user tool 名称、requestor 和参数 JSON Schema 校验;
  3. 数据库标识符 grounding 检查;
  4. Airline 在完整数据库上重绑动态 reservation id、订票金额和更新付款方式,并检查完整行程;
  5. τ² Task 模型校验;
  6. 在候选指定的数据库快照上顺序回放 golden actions;
  7. 执行 env_assertions
  8. LLM judge 对策略合规、可解性、渐进披露、动作顺序和唯一解做复核;
  9. SimHash 近重复过滤;
  10. 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.json

scripts/inspect_reference.py 还可以检查公开 RL/SFT 的字段、领域和动作分布。

复现边界与可调选项

  • 数据库扩增:官方生成器未开源。本项目保留所有 ID 和历史记录,只扰动航班库存/价格及商品 库存/价格,优先保证可执行性。若你已有公开数据库快照,可直接替换 snapshot manifest。
  • Plan 与 prompt:结构来自论文 Figure 1、Section 4 和 EigenData DataAgent 描述,具体措辞是重建版。
  • SFT reasoning:若兼容接口返回 reasoning_contentreasoning<think>...</think>,会写入 answer.thinking;接口不返回时保持空字符串,不伪造思维链。设置 rollout.include_reasoning=false 时即使上游意外返回 reasoning 也不会写入 SFT。
  • teacher moderollout.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 分别遵守各自许可证。

About

Reproducible tau2-SEA dataset generation pipeline using the official DeepSeek API

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages