实验 2-6 豆包版复现分析:Agent Skills 从论文生成演示文稿
一、实验概述
实验 2-6 的对象是固定版本(69c0b1a)的 Anthropic 官方 PPTX Skill + 一篇真实学术论文
PDF ,由支持 Skills 的智能体运行时执行:Agent 启动时只看到 Skill 元数据,通过渐进式
披露(元数据 → 完整 SKILL.md → html2pptx.md 细则)逐层加载,使用官方
scripts/html2pptx.js 与 scripts/thumbnail.py 工作流,从 Attention Is All You Need
(arXiv:1706.03762)生成 10--15 页演示文稿,并抽取至少三张论文原图嵌入。
按照协议的「运行时无关」验收政策(2026-07-31),豆包路径的设计是:
- 运行时保持 Claude Code CLI 不变 ------渐进式披露、
/pptxSkill 调用、stream-json
事件流等机制与参考路径完全一致,fail-closed 校验器validate_official_run.py的
Claude 分支可直接复用(2026-09-17 对其做过跨平台修复,见该脚本模块 docstring:
路径分隔符归一化、产物键 posix 化、skill_md_loaded接受/pptx展开的等价证据,
关卡语义未放松); - 模型与凭据路由到火山方舟 Coding Plan 的 Anthropic 兼容专属端点
https://ark.cn-beijing.volces.com/api/coding(ANTHROPIC_AUTH_TOKEN携带
coding 套餐专属 ARK_API_KEY); - 默认模型
deepseek-v4-flash,与本书其他豆包复现实验保持一致。
二、运行配置(v1)
| 配置项 | 值 | 来源回执 |
|---|---|---|
| 运行时 | Claude Code CLI(claude.CMD,npm 安装,2.1.186) |
runtime.json |
| 模型 | deepseek-v4-flash |
runtime.json / command.json |
| 端点 | https://ark.cn-beijing.volces.com/api/coding(子进程 env 注入) |
runtime.json |
| 凭据 | ARK_API_KEY,来源 .env(值不落盘、不回显) |
auth_source.json |
| Skill 安装 | copy(symlink→junction→copy 回退链,本机落到整目录复制) |
runtime.json |
| Skill 钉版 | anthropics/skills.git @ 69c0b1a06741...dd202 |
official_skill_receipt.json |
| 提示词 | 逐字复用原版 CLAUDE_PROMPT(/pptx 前缀,1,599 字节) |
prompt.txt |
| 论文 | attention-is-all-you-need.pdf,2,215,244 字节,SHA-256 bdfaa68d...82df697 匹配 |
校验器 gate |
| 协议 | experiment_protocol_doubao.json(SHA-256 14e56f3c...d056a4) |
manifest.json |
三、执行时间线与中间产物(v1,2026-09-17 10:41)
管道在运行时之前的所有阶段全部按设计工作,中间产物完整:
| 阶段 | 产物 | 实测结果 |
|---|---|---|
| 1. 依赖预检 | --- | claude/git/node/npm 全部在 PATH(用户终端) |
| 2. 协议冻结 | experiment_protocol.json |
豆包协议原样拷入 run 目录 |
| 3. 官方 Skill 钉版 | official_skill_receipt.json |
git clone + git checkout --detach 69c0b1a...,HEAD 校验一致;4 个必需文件 hash 齐全(SKILL.md 5b282b89...、html2pptx.md ddcfb3c7...、html2pptx.js cfb023e8...、thumbnail.py 621bfaea...) |
| 4. Skill 安装 | workspace/.claude/skills/pptx/(70+ 文件) |
整树复制成功:SKILL.md 26,034 B、html2pptx.md 20,483 B、scripts/html2pptx.js 38,773 B、scripts/thumbnail.py 15,934 B、ooxml/ 全套 schema 等 |
| 5. 论文下载校验 | workspace/attention-is-all-you-need.pdf |
2,215,244 字节,SHA-256 与预注册值一致(gate 通过) |
| 6. 提示词冻结 | prompt.txt(1,599 B) |
与原版 CLAUDE_PROMPT 逐字一致 |
| 7. 命令构造 | command.json |
claude.CMD <prompt> --print --output-format stream-json --verbose --model deepseek-v4-flash --no-session-persistence --dangerously-skip-permissions --add-dir <skill> |
| 8. 运行时执行 | claude_stream.jsonl(190 B )、claude_stderr.log(0 B)、claude_exit.json(return_code 0) |
事件流仅 1 行纯文本错误(见下) |
| 9. fail-closed 校验 | comparison.json、manifest.json |
15 道关卡:2 过 / 13 挂 |
claude_stream.jsonl 全文(唯一的"模型输出"):
text
Sorry, to prevent abuse of free resources, accounts that have not been
recharged can only try 10 times. You can increase the free quota after
recharging; https://console.aihubmix.com/topup
四、验收关卡结果(15 gates)
| 关卡 | 结果 | 说明 |
|---|---|---|
| source_pdf_hash_matches | ✅ | 论文哈希与预注册一致 |
| credential_scan_passed | ✅ | 事件流中无任何凭据材料(含 ARK Key) |
| claude_run_succeeded | ❌ | 无 type: result 事件,无助手回合 |
| pptx_skill_invoked | ❌ | 运行时未产生任何工具调用 |
| skill_md_loaded | ❌ | 同上 |
| html2pptx_guide_loaded | ❌ | 同上 |
| official_html2pptx_used | ❌ | 同上 |
| official_thumbnail_used | ❌ | 同上 |
| thumbnail_visually_inspected | ❌ | 同上 |
| pptx_zip_valid / pptx_reopens | ❌ | 未生成 PPTX |
| slide_count_in_range(10--15) | ❌ | 0 页 |
| required_sections_present | ❌ | 无内容 |
| three_source_visuals_embedded_and_documented | ❌ | 无 source_visuals/ |
| thumbnail_grid_present | ❌ | 无缩略图 |
official_complete = false(2/15)。这正是 fail-closed 校验器的设计行为 :13 项内容
关卡全部因为"运行时没有产生任何模型行为"而失败,而不是被跳过。
五、根因分析
请求根本没有到达方舟端点。 证据链:
runtime.json显示脚本已把ANTHROPIC_BASE_URL=https://ark.cn-beijing.volces.com/api/coding
注入子进程环境(并已 pop 全部旧ANTHROPIC_*变量);- 但事件流中的报错来自 aihubmix.com(第三方中转计费方);
- 检查用户全局
~/.claude/settings.json,其 env 块配置了另一个第三方中转:
ANTHROPIC_BASE_URL=https://api.inferera.com、ANTHROPIC_MODEL=coding-glm-5.2-free
(免费额度,经 aihubmix 结算)。
机制:Claude Code 启动时会把 settings 文件里的 env 块应用到进程环境,且优先级高于
继承的进程环境变量 。因此用户级的 inferera 中转配置覆盖了脚本经 subprocess env 注入的
方舟路由;inferera 的免费额度已耗尽,返回了上面那行纯文本错误。Claude CLI 把它当作
最终回复输出(退出码 0),既没有 result 事件也没有工具调用------校验器正确判负。
结论:这不是方舟端点 / ARK Key / 模型可用性的问题 (请求未到方舟),而是 Claude Code
的运行时配置优先级问题;v1 的阻断点在「外部路由层」,与 Skill 机制、实验对象无关。
修复(v2 起生效) :run_official_experiment_doubao.py 在启动运行时前额外写入项目级
workspace/.claude/settings.json,把 ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN /
ANTHROPIC_MODEL 及三档默认模型与子代理模型全部钉死为方舟路由------项目级 settings 的
优先级高于用户级 ~/.claude/settings.json,从而确保无论全局配置了什么中转,本实验
的请求都走方舟 coding 端点。该文件位于 runs/*/workspace/.claude/(.gitignore 已
忽略),Key 不会进入任何提交证据;runtime.json 新增 project_settings_override
字段记录此举。
六、与 README 原有实验分析对比
README 中已有的两组分析:Kimi Code CLI 路径(PASSED ,2026-07-31)与 Claude Code
旧尝试(v2--v4,推理开始前被 Anthropic 凭据问题外部阻断)。三条路径对比:
| 维度 | Kimi Code CLI(PASSED) | Claude Code 旧尝试 v2--v4 | 豆包 v1(本次) |
|---|---|---|---|
| 运行时 | Kimi Code CLI 0.31.0 | Claude Code | Claude Code → 方舟 coding 端点 |
| 模型 | kimi-code/k3 |
sonnet(Anthropic) |
deepseek-v4-flash(方舟) |
| 凭据 | KIMI_API_KEY 有效 | Anthropic 凭据无效/被禁用 | ARK Key 就绪,但被全局中转截胡 |
| 阻断点 | 无(完整跑完) | 推理开始前,外部凭据层 | 推理开始前,外部路由层 |
| 助手回合 / 工具调用 | 25 轮 / 114 次 | 0 / 0 | 0 / 0 |
| 成品 | 13 页,4 图(Figure 1/2、Table 2、Figure 3)逐字节一致,LibreOffice 渲染 13 页 | 无 | 无 |
| 关卡 | 15/15 全过 | fail-closed 清单保留为证据 | 2/15(论文哈希 + 凭据扫描) |
| 渐进式披露证据 | 元数据→SKILL.md→html2pptx.md→官方脚本→缩略图目检全链路 | 未发生 | 未发生 |
三点观察:
- 管道行为三路径一致 :Skill 钉版(同一 revision
69c0b1a)、论文哈希校验、
凭据扫描、fail-closed 判定在三条路径上完全相同------说明实验对象(Skill 内容)与
运行时路由确实解耦,验证了「运行时无关」验收政策的设计。 - 同类失败的平行 :Claude 旧尝试因「Anthropic 凭据无效」在推理前被外部阻断,
豆包 v1 因「全局第三方中转的免费额度耗尽」在推理前被外部阻断------两者都属于
「凭据/路由层阻断」而非 Skill 机制失败,失败证据(无凭据事件流 + fail-closed
清单)以同一方式保留。 - 与 Kimi 参考值的可比性前提已就绪 :豆包版的提示词、协议、Skill 钉版与 Kimi
路径逐字一致;一旦 v2 重跑通过,claude_stream.jsonl中的轮数、工具调用数、
result事件的 usage/model 字段即可与 Kimi 的 25 轮 / 114 次工具调用直接对比
(注意deepseek-v4-flash为思考模型,token 结构与kimi-code/k3不同)。
七、修复后的重跑指引
补记(v1.5,2026-09-17 10:53) :路由修复后的首次重跑在 prepare() 阶段被
git fetch origin 69c0b1a... 的 exit 128 打断(半成品 run 目录已清理;v1 的
104133 run 目录亦已于分析后被清理,全部回执数据已在本文留存)。诊断:
gitconfig 无代理、remote 为 https、github.com:443 直连可达------10:41 成功与
10:53 失败之间网络未变配置,属国内直连 GitHub 的间歇性 TLS 抖动;且外部仓库是
blob:none 部分克隆,钉版 fetch 无法离线。冻结的 prepare() 用
capture_output=True 吞掉 git 的 stderr,终端只见裸退出码。v2.1 修复 :
prepare_with_retry() 包装(3 次尝试 + 15s/30s 退避 + git 真实错误透出),
仅作用于路由层,冻结代码零改动。
powershell
cd chapter2/agent-skills-ppt
python run_official_experiment_doubao.py --output runs/exp2-6-doubao-pptx-$(Get-Date -Format yyyyMMdd-HHmmss)
v2 运行的检查要点:
runtime.json含"project_settings_override": "workspace/.claude/settings.json";workspace/.claude/settings.json存在且ANTHROPIC_BASE_URL为方舟 coding 端点;claude_stream.jsonl应出现system(init,含实际 model)→ 多轮assistant/
tool事件 →result事件,而非单行纯文本;- 若仍见中转方报错,请临时移走/改名
~/.claude/settings.json再跑(最后手段,
会影响日常 Claude Code 使用)。
八、结论
- v1 运行未完成实验 (0/13 内容关卡):阻断点在 Claude Code 的全局第三方中转
配置(inferera/aihubmix 免费额度),而非方舟端点、ARK Key、模型或 Skill 机制; - 管道层(Skill 钉版、论文哈希、回执体系、凭据安全、fail-closed 校验)全部按
设计工作,失败证据完整保留,与 README 中 Claude 旧尝试的证据形态一致; - v2 已修复(项目级 settings 路由覆盖)并已重跑:
runs/exp2-6-doubao-pptx-20260917-150434
(glm-5.3-flash)把整条管道跑通并产出 13 页成品。初判 15 道关卡 14 过 1 挂,唯一
失败three_source_visuals_embedded_and_documented经哈希核对为校验器路径约定
误判 (manifestfile带source_visuals/前缀导致双重拼接),4 张论文原图实际
已逐字节嵌入 PPTX;按第九节方案 A 修复校验器后--resume-validation重跑,15/15
全过、official_complete=true。完整时间线、关卡明细、根因与修复见第九节。
九、v2 重跑分析(runs/exp2-6-doubao-pptx-20260917-150434)
2026-09-17 15:04,路由修复后的重跑,模型显式切为套餐内
glm-5.3-flash。本次整条管道真实跑通 :请求到达方舟、模型完成渐进式披露并产出 13 页成品。初判
15 道关卡 14 过 1 挂,唯一失败项经哈希核对是校验器的路径约定冲突(假阴性);
按 9.6 方案 A 修复校验器后重跑校验,15/15 全过、
official_complete=true。
9.1 运行命令与控制台输出
本次使用的命令(与 v1 相比仅新增 --model glm-5.3-flash):
powershell
cd chapter2/agent-skills-ppt
python run_official_experiment_doubao.py --model glm-5.3-flash `
--output runs/exp2-6-doubao-pptx-20260917-150434
--model glm-5.3-flash:runtime.json/command.json/ 事件流 init 事件三方互证
model=glm-5.3-flash;端点仍为方舟 Coding Plan 专属
https://ark.cn-beijing.volces.com/api/coding,Key 来自.env(api_key_source:".env",
值不落盘),路由修复字段"project_settings_override":"workspace/.claude/settings.json"
已生效(init 事件apiKeySource:"none"、claude_code_version:2.1.186、
permissionMode:"bypassPermissions")。
控制台输出(浏览器 preview 中可见尾部若干行 [doubao] system / [doubao] assistant /
[doubao] result,stream_process 对每个 system/assistant/tool/result/meta 事件打印一行):
事件流统计:system 13,101 个 (绝大多数为 thinking_tokens 逐 token 增量,另含 1 个
init:skills=["pptx",...]、slash_commands 含 pptx)、assistant 157 个 、result 1 个
(success)。与 v1 的「1 行纯文本额度报错、0 轮」形成鲜明对比------v1 的阻断点已解除。
9.2 生成结果(运行产物)
| 产物 | 实测值 |
|---|---|
| PPTX | workspace/output/attention-is-all-you-need.pptx,13 页 ,797,280 B,SHA-256 792338e4... |
| slides | workspace/slides/s01...s13.html:cover → problem → idea → architecture → attention → multihead → training → results → ablations → parsing → interpretability → conclusion → citation |
| source_visuals | 4 张:fig1-architecture.png(p3/Figure 1)、fig2-attention.png(p4/Figure 2)、table2-results.png(p8/Table 2)、fig3-attention-viz.png(p13/Figure 3),manifest 每条含 page/label/caption |
| 缩略图 | output/full-deck-thumbnail.jpg(4 列 13 页拼图,241,275 B) |
| 运行时 | return_code 0;result subtype:"success"、num_turns:98、duration_ms:2,330,692(≈39 分钟)、total_cost_usd:3.67 |
| Token 用量 | 输入 147,321 / 缓存读 4,052,288 / 输出 36,437,全部记在 glm-5.3-flash 名下(思考模型缓存读占比高) |
| 工具调用 | 97 次 tool_use / 97 次 tool_result(Bash 39、Read 22、Write/Edit 27 为主) |
Agent 在 result 文本中的自述:按官方 PPTX Skill 渐进式披露(SKILL.md → 完整
html2pptx.md → 钉版 scripts/html2pptx.js + scripts/thumbnail.py);pdftoppm
300 DPI 从 PDF 裁剪 4 张原图并在幻灯片内标注 "Source: Vaswani et al. (2017), p. N";
两轮缩略图目检修复(Figure 2 裁切标题、5/11 页留白、<br> 引用换行、bullet 不一致);
定位钉版管道对多段落列表项输出错位 <a:pPr>(带 buNone)的 bug,用后处理脚本
fix_pptx.py 剥离(未修改官方脚本);OOXML validate.py 最终文件全部 PASSED。
9.3 result JSON(校验器输出)字段解读
experiment_id:"2-6"、runtime:"claude":豆包路径复用 Claude Code 运行时,校验器沿用
Claude 分支。official_complete:false:15 道关卡任一失败即不完整(fail-closed 语义)。- sha256 互证:protocol
14e56f3c...d056a4(与 v1 完全一致)、comparisoneeb01f8e...、
pptx792338e4...(与 artifacts 中workspace/output/...pptx一致)。 progressive_disclosure_evidence.skill_md_loaded = "slash_command_expansion":本轮命中
「/pptxslash command 由运行时按构造内联 SKILL.md 正文」这条等价证据(init 的
slash_commands含pptx且prompt.txt以/pptx开头),与 Kimi 分支「Skill 工具
按构造内联」同源,判定语义未放松。source_visuals:[]:唯一失败关卡的直接现场(见 9.5)。
9.4 关卡明细(15/15,校验器修复后)
修复前 14/15,唯一失败项经 9.6 方案 A 修复校验器并 --resume-validation 重跑后与其余
14 道一起转绿。以下为当前 comparison.json 的 15 道关卡全过明细:
通过的 15 道关卡(pptx_zip_valid 与 pptx_reopens 合为一行):
| 关卡 | 结果 | 说明 |
|---|---|---|
| source_pdf_hash_matches | ✅ | 论文哈希与预注册一致 |
| claude_run_succeeded | ✅ | result 事件存在且 is_error:false |
| pptx_skill_invoked | ✅ | /pptx 触发,init 注册了 pptx slash command |
| skill_md_loaded | ✅ | slash_command_expansion 等价证据 |
| html2pptx_guide_loaded | ✅ | 事件流出现 html2pptx.md(48 处) |
| official_html2pptx_used | ✅ | 事件流出现 html2pptx.js |
| official_thumbnail_used | ✅ | 事件流出现 thumbnail.py(14 处) |
| thumbnail_visually_inspected | ✅ | 目检/overlap/cutoff 类证据出现 |
| pptx_zip_valid / pptx_reopens | ✅ | ZIP 校验通过、python-pptx 重开 13 页 |
| slide_count_in_range(10--15) | ✅ | 13 页 |
| required_sections_present | ✅ | title/background/method/results/conclusion 全 true |
| thumbnail_grid_present | ✅ | full-deck-thumbnail.jpg 存在 |
| credential_scan_passed | ✅ | 事件流无任何凭据材料 |
修复前唯一失败:three_source_visuals_embedded_and_documented = false(校验器
路径约定误判,见 9.5);按 9.6 方案 A 修复后重跑校验,该关卡与其余 14 道全部转绿。
9.5 根因:校验器与 manifest 的路径约定冲突(假阴性)
校验器逻辑(validate_official_run.py(file:///d:/learning_project/学习文档/ai-agent-book-main/ai-agent-book-main/chapter2/agent-skills-ppt/validate_official_run.py#L199-L239)):
python
visual_dir = workspace / "source_visuals"
path = visual_dir / filename # filename 来自 manifest 的 "file" 字段
if path and path.is_file(): # 只有文件存在才计入 source_visuals
- 本次 Agent 写入的 manifest
"file":"source_visuals/fig1-architecture.png"(相对
workspace 根的路径); - 校验器拼接得到
workspace/source_visuals/source_visuals/fig1-architecture.png→
不存在 → 4 条全部被跳过 →source_visuals=[]→len>=3与all(embedded...)恒为
false; - Kimi PASSED 参考路径的 manifest
"file":"fig1-03.png"(相对source_visuals/目录的
basename)按同一逻辑命中------说明这是「校验器对 manifest.file 的隐式约定」与「Agent 的
输出约定」不一致。官方钉版html2pptx.md并未规定 manifest 的file字段格式(grep
无 manifest 相关说明),因此约定冲突的裁决点只在校验器一侧。
内容实际满足协议(哈希实测核对,4/4):
| source_visuals 文件 | SHA-256(前 16 位) | PPTX 内嵌 media | 逐字节一致 |
|---|---|---|---|
| fig1-architecture.png | b2b7a441... |
ppt/media/image-4-1.png |
✅ |
| fig2-attention.png | 15136a25... |
ppt/media/image-5-1.png |
✅ |
| table2-results.png | 58b0c11c... |
ppt/media/image-8-1.png |
✅ |
| fig3-attention-viz.png | 18e01ea3... |
ppt/media/image-11-1.png |
✅ |
且 slides HTML 确实以 ../source_visuals/*.png 引用并标注 "Source: Vaswani et al. (2017),
p. N",manifest 每条含 page/label/caption------完全符合协议 artifact_gates 的
「三张以上论文原图与内嵌媒体逐字节一致、并在 manifest 中登记页码/标签/图注」语义。
结论:本次失败是校验器的假阴性(路径约定冲突导致的误判),不是 Agent 未嵌入/未登记
论文原图。
9.6 修复建议与落地结果(方案 A 已实施)
✅ 方案 A 已实施(2026-09-17) :validate_official_run.py 在读取
source_visuals/manifest.json 时对 file 字段做路径归一化------拼接前统一分隔符并剥离
前导 source_visuals/ 前缀(兼容 Kimi 的 basename 与本次的 workspace 相对路径两种
约定,判定语义不变)。随后重跑校验:
powershell
.\.venv\Scripts\python.exe chapter2\agent-skills-ppt\run_official_experiment_doubao.py `
--resume-validation --output chapter2\agent-skills-ppt\runs\exp2-6-doubao-pptx-20260917-150434
结果:official_complete: true,15/15 关卡全过 ;comparison.json 的
source_visuals 由 [] 变为 4 条完整记录(file 归一化为 basename、sha256 与
embedded:true 逐项对应 PPTX 内嵌 media),comparison_sha256 更新为 f557e7e1...;
pptx_sha256 不变(792338e4...,未改动任何实验产物)。
备选方案(未采用,留档):
- 方案 B :修正提示词/Agent 的 manifest 输出约定并重跑整个实验(成本约 3.7 USD /
39 分钟,且重跑内容未必与本次一致,浪费已有的完整证据)。 - 方案 C:接受 14/15 并以哈希证据人工确认------与 fail-closed 验收政策不符。
9.7 与 Kimi PASSED 路径对比
| 维度 | Kimi Code CLI(PASSED,2026-07-31) | 本次 doubao(150434) |
|---|---|---|
| 模型 | kimi-code/k3 |
glm-5.3-flash(方舟 coding 端点) |
| 助手回合 / 工具调用 | 25 轮 / 114 次 | 98 轮 / 97 次 tool_use |
| 成品 | 13 页、4 图逐字节一致、15/15 全过 | 13 页、4 图逐字节一致、15/15(校验器修复后全过) |
| 渐进式披露证据 | Skill 工具按构造内联 | /pptx slash command 内联(等价证据) |
| 成本 | 未上报 | 3.67 USD(缓存读 4.05M token) |
观察:glm-5.3-flash 为思考模型,98 轮中大量往返来自逐 token 思考流与工具执行;两条
路径在「13 页 + 4 图 + 缩略图 + 零凭据泄漏」的产出形态上完全一致,且都未修改官方钉版
脚本(Kimi 直接可用,豆包仅用 fix_pptx.py 做输出后处理并如实自述)。
附录 A:v1 run 目录产物清单
| 文件 | 大小 | 说明 |
|---|---|---|
experiment_protocol.json |
5,482 B | 豆包冻结协议拷贝(SHA-256 14e56f3c...) |
official_skill_receipt.json |
761 B | 官方 Skill 钉版回执(revision + 4 文件 hash) |
prompt.txt |
1,599 B | 冻结提示词(逐字复用原版) |
command.json |
2,027 B | 完整运行时命令(不含密钥) |
runtime.json |
427 B | 运行时回执(端点/模型/安装方式/Key 来源) |
auth_source.json |
69 B | 凭据来源(ark-coding-plan / .env,无值) |
claude_stream.jsonl |
190 B | 事件流(1 行中转方额度报错) |
claude_stderr.log |
0 B | 无 stderr 输出 |
claude_exit.json |
24 B | return_code 0 |
comparison.json |
2,312 B | 15 关卡详情 |
manifest.json |
291 B | 运行清单(official_complete=false) |
workspace/attention-is-all-you-need.pdf |
2,215,244 B | 真实论文(哈希匹配) |
workspace/.claude/skills/pptx/** |
70+ 文件 | 官方 Skill 整树(copy 安装) |
附录 B:豆包协议与原协议的差异
experiment_protocol_doubao.json(v1.1.0-doubao,revised 2026-09-17)仅在原协议
runtime.alternate_runtimes 下新增 doubao 路由条目(端点、模型、凭据环境变量、
stream 文件名与注意事项),并追加 doubao_routing_note 说明;Skill 钉版版本、
论文哈希、输出规格、渐进式披露关卡、工件关卡、claim_policy 全部逐字继承 。

实验产物
