RESEARCH ARCHIVE · 2026-10-08

Haidass 143M
工具调用后训练研究复盘

从有限模板上的多步执行,到 BFCL 泛化与上下文瓶颈。汇集阶段结果、质量审计、失败分析、原始统计和代码快照。

阶段成果与边界

A–F完成监督微调;G 未训练
3.75%F 的 BFCL Python Simple
16,730扩量候选;质量门槛未全部完成
4K原生上下文;全部多轮题超限

完整 BFCL Overall 和完整 Agentic 均不报告:Web Search 未执行。所有表格是本地固定官方版本结果,未作为正式榜单提交。内部高分不代表通用工具智能体能力。

BFCL:官方版本本地结果

commit f7cf735 · Prompt · greedy · 原生 4096。选择模型与指标查看;超限、缺项和实际答案失败需结合覆盖报告解释。

指标CEF
Non-Live AST Acc0.02%0.02%0.94%
Non-Live Simple AST0.08%0.08%2.25%
Non-Live Multiple AST0.00%0.00%1.50%
Non-Live Parallel AST0.00%0.00%0.00%
Non-Live Parallel Multiple AST0.00%0.00%0.00%
Live Acc0.00%0.00%0.52%
Live Simple AST0.00%0.00%1.94%
Live Multiple AST0.00%0.00%0.19%
Live Parallel AST0.00%0.00%0.00%
Live Parallel Multiple AST0.00%0.00%0.00%
Multi Turn Acc0.00%0.00%0.00%
Multi Turn Base0.00%0.00%0.00%
Multi Turn Miss Func0.00%0.00%0.00%
Multi Turn Miss Param0.00%0.00%0.00%
Multi Turn Long Context0.00%0.00%0.00%
Web Search AccN/AN/AN/A
Web Search BaseN/AN/AN/A
Web Search No SnippetN/AN/AN/A
Memory Acc1.08%0.65%0.86%
Memory KV0.00%0.00%0.00%
Memory Vector0.00%0.00%0.00%
Memory Recursive Summarization3.23%1.94%2.58%
Relevance Detection0.00%0.00%12.50%
Irrelevance Detection99.94%99.94%73.81%
Format Sensitivity Max Delta0.50.51.0
Format Sensitivity Standard Deviation0.20.20.31

原始 CSV · 26 种格式配置 · 完整覆盖审计

原始 CSV 中包含缺项条件下生成的聚合分数和 rank,保留用于审计,不作为完整榜单成绩。Format Sensitivity 单位为百分点;接近零的差值并不证明稳健。

数据分布与质量审计

124,260 原始行 → 74,841 结构/schema 通过 → 16,730 保留候选。候选 15,266 条含调用、1,464 条零调用;10,609 条含工具结果,但结果未经逐条执行。

ToolACE · 6,363
38.03%
Glaive · 10,367
61.97%

training_ready=false。随机 10K/1K 切分仍是草案;语义抽审、任务族隔离、模型 token 长度和结果重算未完成。保留率低不能等同源数据错误率。

质量报告 JSON · 固定来源与 checksum · 有效监督规模

Haidass 143M 工具调用后训练研究复盘

归档日期:2026-10-08。研究状态:阶段结束,仅整理既有记录,不再启动训练、推理或评测实验。

摘要与可支持的结论

本研究在八张 Ascend NPU、隔离 Docker 环境中,对 Haidass1.5-143M 原始预训练模型进行了 A、A_repair、B、C、D、E、F 多阶段全参数监督微调。我们完成了工具协议、单步选择、少量多步依赖任务的训练,建立了本地可执行评测、官方 BFCL 接入、数据规模审计和新增公共数据候选池。

研究证明了:143M 基座能学习有限工具集合与固定协议,在内部合成任务上完成多步执行。但这套训练没有获得可用的通用工具调用能力,也没有获得可与 BFCL 完整榜单比较的总分。C 是此前内部能力保留门槛下的保留版本,并不意味着它是 BFCL 上最强或可部署版本。F 在公开单步类别有小幅改善,却伴随原协议能力回退。G 仅准备数据,未发现训练产物,不能报告 G 的模型性能。

最重要的经验是同时管理四件事:语义任务覆盖、协议一致性、有效监督量、评测可执行覆盖。内部高分、loss 下降、更多函数名、更多输入 token,都不能单独替代公开任务上的真实执行成功。

本报告基于已保存的 JSON、CSV、训练代码和数据审计文件。明确区分“记录直接支持的事实”“根据代码和结果的解释”“尚未验证的建议”。新整理不重新运行模型实验,不追补缺失结果。

1. 研究目标、边界和环境

目标是在 BFCL 所覆盖的工具调用任务上改善函数选择、参数生成、多函数调用、跨轮状态使用、不相关请求识别及格式适应性。对话中偶有 BCFL 拼写,本文统一为 BFCL(Berkeley Function Calling Leaderboard)。

基座为 DALabCommunity/Haidass1.5-143M,下载 revision 为 d8a00d4943971088e6f0f4e08fb317dd5ba33ed1。本地检查记录为 143,071,296 参数,Qwen3 架构,30 层,hidden size 576,9 个 attention heads、3 个 KV heads,约 64K 词表,原生上下文 4096。它是预训练模型,不能默认已具备通用指令遵循能力。模型卡记录预训练约 400B token,与对话中的 40B 不同;本研究没有重新审计其预训练语料。

运行环境为 Ubuntu 22.04 / aarch64、八张 Ascend 910B3 64GB。训练容器为 haidass-posttrain,基础镜像 swr.cn-south-1.myhuaweicloud.com/ascendhub/verl_pt27_25rc3:a2-arm。torch 2.7.1 + torch_npu 2.7.1,transformers 4.56.0.dev0。BFCL 的依赖在独立评测 venv 中安装,避免升级训练环境。向量记忆使用 CPU MiniLM 编码器,固定 revision 1110a243fdf4706b3f48f1d95db1a4f5529b4d41。

这是硬件相关的研究快照。原始代码包含 /workspace 路径、torch_npu 和 HCCL 假设,并非已整理成可在任意 CPU/GPU 上直接安装运行的软件包。本归档不包含登录凭据、远程访问脚本、模型权重、优化器状态或完整公共评测题目。

2. 训练数据与协议

早期公共工具数据来自 NousResearch/hermes-function-calling-v1,包括 singleturn 和 Glaive 5K 文件;固定 revision dae3e1d28cfbcf4b915c04ea1e072030529b4bda。记录中 3,379 条工具轨迹被接收,1,752 条被拒绝。BelleGroup/train_0.5M_CN 的固定 revision 为 29c35e9b56c7fc91f04a613ed33896f7a19bad54,读取前 20K 行,用于补充中文指令。公共工具结果多数未经独立执行重算,数据来源可信不等于每个标签正确。

自建可执行任务主要围绕约 20 个工具:四则运算、列表统计、大小写与字符串处理、日期偏移、单位换算、商品与库存查询、联系人查询。多步模板集中于“商品查询→数量乘法→运费”“商品 ID→库存”“超时重试→后续计算”等少数模式。reverse_text、km_to_miles 被用于部分工具泛化检查,但两个留出工具不能代表开放世界 OOD。

原始协议使用 ChatML 风格边界,以及 XML 包裹的 JSON 调用:

<tool_call>{"name":"multiply","arguments":{"a":3,"b":4}}</tool_call>

tool 消息包含 JSON 返回,assistant 可以继续调用或生成最终回答。监督标签仅覆盖 assistant 目标,其余上下文 labels 设为 -100。没有把工具响应当成模型需要臆造的目标,没有开展 RL、DPO 或 GRPO。

一条多步轨迹可能被拆成多个响应样本,每个样本重复工具说明和历史。因此“轨迹数”“响应数”“总输入 token”“监督 token”“实际训练处理 token”是五种不同计量,必须分别记录。改名、换格式、回放同一轨迹不增加独立语义任务数量。

3. 阶段经过与实际训练结果

训练采用八卡 HCCL DDP、全参数 AdamW,FP32 参数配合 BF16 autocast,micro batch 2、accumulation 4,标称全局 batch 64;梯度裁剪 1.0、4% warmup、cosine 调度、序列按 128 对齐。loss 按有效目标 token 归一化;每 100 步及最后一步验证并保存 checkpoint。超长样本计数后排除,没有静默截断。

阶段 步数 峰值学习率 初始 dev loss 最佳 dev loss 实际输入 token
A 306 5e-5 2.138567 1.029488 6,275,843
A_repair 160 3e-5 1.029489 1.013236 4,253,228
B 663 3e-5 0.985083 0.776857 18,113,190
C 438 2e-5 0.782565 0.629671 15,177,428
D 300 1e-5 0.629671 0.618056 10,214,957
E 400 5e-6 0.629671 0.619172 13,790,817
F 400 5e-6 0.747862 0.527767 28,946,298

来源:evidence/{stage}/result.json;学习率见历史 continuation/pipeline 代码。dev 集和协议发生过变化,表中的 loss 不应跨阶段直接排序。

A / A_repair:建立基础协议

A 将公共工具轨迹、一般指令、合成单步和负例混合训练。loss 大幅下降,但模型存在提前 EOS、不会实际产生调用的问题。A_repair 进行协议和调用目标强化,说明初期对小基座的首要挑战包含输出协议和指令对齐,单看教师强制 loss 会漏掉生成时的停止行为。

B:单步调用能力强化

B 增加单工具选择、参数生成、负例和公共轨迹,显著降低 dev loss。这建立了有限工具集合上的可执行基础,但大量函数名并没有自动带来更广的任务推理覆盖。

C:多步执行与能力保留

C 增加多步轨迹并保留单步、负例、公共轨迹、通用指令回放。内部多步表现成为这一阶段的主要成果。之后的 D/E/F 均作为从 C 出发的候选方向,不是简单连续的一条训练链。

Base → A → A_repair → B → C
                          ├→ D
                          ├→ E
                          └→ F

D / E:偏重单步修复的代价

D 的 loss 改善及单步提升伴随多步回退,没有通过晋级门槛。E 在内部 dev_v2 单步和 OOD 上明显改善,多步降至 87.50%,因此也未替换 C。可观察到保留任务之间的权衡;仅凭这些分支不能建立某个超参数的因果结论。

F:面向官方格式的适配

F 从 C 开始,将既有 B/C 轨迹转成官方 Python/JSON 提示与调用格式,并回放 XML 多步轨迹。转换标签经过官方解析器检查;记录中排除 43 条过长样本和 13 条解析转换失败。F 没有引入大量新语义任务。

F 降低新协议 dev loss,并使官方 Python Simple 从 1/400 改善到 15/400,Multiple 从 0/200 改善到 3/200。但内部原协议单步和 OOD 退化,因此研究没有把 F 晋级为通用推荐模型。此结果支持“格式适配有作用但远远不足”;没有格式/数据/初始化的完整对照,不能声称只由格式变化导致。

4. 内部评测:有效成果与外推限制

内部 dev_v2 有 224 条:单步 96、负例 32、多步 64、OOD 32。评测采用 greedy unconstrained 生成、最多 6 次工具调用、真实合成工具执行,使用修正版 scorer_revision=2。早期 revision=1 的不调用判分曾有局限,归档中保留原记录以便审计,主表统一采用 revision=2。

内部 dev_v2 执行成功率 C E F
单步,n=96 84.38%(81) 96.88%(93) 76.04%(73)
多步,n=64 98.44%(63) 87.50%(56) 95.31%(61)
负例,n=32 100%(32) 100%(32) 100%(32)
OOD,n=32 56.25%(18) 81.25%(26) 43.75%(14)

括号中为成功数;来源为 C_v2_eval.json、E_eval.json、F_eval.json。负例成功是该内部协议下正确处理请求,不等价于所有 BFCL 不相关检测标签。

C 的历史冻结 test_v2 为 800 条:单步 300、多步 250、负例 150、OOD 100;成功率分别 81.33%、96.40%、100%、67.00%。该结果支持有限合成分布的能力保留。工具族和模板较窄、验证样本量小、部分开发集被多次用于选择版本,不能由此声称通用智能体成功率超过 90%。研究未开展多随机种子实验,也不报告统计显著性胜出。

5. 两种 BFCL 结果必须分开

5.1 早期 500 题自定义局部测试:历史诊断

模型 本地自定义 500 题历史 accuracy
Haidass-C 18.6%
Haidass-E 20.0%
SmolLM2-135M-Instruct 19.2%
SmolLM2-360M-Instruct 12.2%
Qwen2.5-0.5B-Instruct 15.4%
Qwen3-0.6B 30.2%

这些均是历史本地测试,不是外部公布的 BFCL 成绩。当时采用自定义 XML 受控协议和局部样本,部分解码/解析存在局限。Simple、Multiple、Parallel、Parallel Multiple 几乎没有成功时,仍可能因不相关类别正确“不调用”而出现正的整体 accuracy。

一般局部 micro accuracy 为 通过的样本数 / 已测试样本总数。若通过主要来自负例,整体分数反映样本构成,不证明正例调用能力。官方榜单的类别聚合及权重应以固定版本评分代码为准,不能把上述局部 accuracy 当作官方 Overall,也不能把历史 SmolLM/Qwen 表当作严谨的性能排名。

5.2 官方 BFCL 固定版本的本地评测

采用榜单关联版本 f7cf7359b7ac615a0b294831c5ba2bc95ee4a000,接入官方 loader、Prompt、AST 解码、交互工具环境和 scorer。自定义部分为 Haidass 本地 NPU 推理和模型注册;报告的是 Prompt 设置下的本地复现成绩,未作为正式提交榜单的公开成绩。

类别 / 指标 C E F
Non-Live AST 汇总 0.02% 0.02% 0.94%
Non-Live Simple 汇总 0.08% 0.08% 2.25%
Python Simple 0.25% 0.25% 3.75%
Java Simple 0% 0% 1.00%
JavaScript Simple 0% 0% 2.00%
Multiple 0% 0% 1.50%
Parallel 0% 0% 0%
Parallel Multiple 0% 0% 0%
Live AST 汇总 0% 0% 0.52%
Live Simple 0% 0% 1.94%
Live Multiple 0% 0% 0.19%
Live Parallel / Parallel Multiple 0% / 0% 0% / 0% 0% / 0%
Multi-Turn Base 0%† 0%† 0%†
Multi-Turn Miss Func 0%† 0%† 0%†
Multi-Turn Miss Param 0%† 0%† 0%†
Multi-Turn Long Context 0%† 0%† 0%†
Relevance Detection 0% 0% 12.50%
Combined Irrelevance Detection 99.94% 99.94% 73.81%
Non-Live Irrelevance 100% 100% 67.08%
Live Irrelevance 99.89% 99.89% 80.54%
Memory 汇总 1.08% 0.65% 0.86%
Memory KV 0%† 0%† 0%†
Memory Vector 0% 0% 0%
Memory Recursive Summarization 3.23% 1.94% 2.58%
Format Sensitivity 最大差(百分点) 0.50 0.50 1.00
Format Sensitivity 标准差(百分点) 0.20 0.20 0.31
Web Search Base / No Snippet 未完成 未完成 未完成
完整官方 Overall 不报告 不报告 不报告

† 为官方记分结果,但有严重上下文覆盖限制,见下一节。CSV 中的小数已按官方显示精度报告,不能用四舍五入后的表格逆推出所有准确的计数。

官方输出的 data_overall.csv 还包含 10.21%、10.13%、7.70% 的聚合值,以及 Agentic 的不完整聚合值。这些文件作为原始证据保留,但 Web Search 为 N/A,本报告不将它们包装为完整 BFCL Overall 或完整 Agentic 成绩,也不使用其中局部 rank 宣称胜出。费用逻辑的默认硬件假设与 Ascend 不符,没有实际成本结论。

来源为 evidence/bfcl_official_f7cf735/score/*.csv,主页面提供交互查看。格式敏感性包含 26 种配置,准确率多数接近零;最大差小不等于格式稳健。

5.3 上下文覆盖失败与模型答案失败

C/E/F 各 800 个 Multi-Turn 样本全部触发原生 4096 上下文限制。模型没有完整阅读这些输入,因此不能把这些零分解释为“看完题目后多轮推理全部失败”。

初始失败提示长度(token) 最小 中位 最大
Base 10,276 19,383 28,233
Long Context 10,276 19,383 28,233
Miss Func 8,970 18,314.5 27,518
Miss Param 10,274 19,380 28,120

Memory KV 与 Memory Vector 各 192 条含前置记录全部超限;Recursive Summarization 的 192 条记录有 19 条超限。含前置记录的条数不能直接作为官方最终评分分母。Live 类别也有超限:C 的 Live Multiple 为 381/1053、Live Irrelevance 为 114/884、Live Relevance 为 3/16;格式敏感性为 435/5200。不能将这些类别的全部差距归因于答案质量。Web Search 因缺少 SerpAPI 配置未执行,属于基础设施缺项,不能补零。完整覆盖审计见 coverage_audit.json。

4096→8192 仍不足覆盖上述多轮输入。32K 只是初始提示覆盖的候选长度,后续对话可能更长。没有长上下文训练和验证时,修改配置不能证明具备长上下文能力。本研究没有开展上下文扩展实验。

5.4 如何读 Hallucination 和格式指标

不相关检测高而相关检测接近零,与偏向不调用的行为相容;它不是已经解决幻觉问题的证据。官方 irrelevance 主要识别没有有效函数调用输出,解析失败也可能表现为不调用,故必须结合生成轨迹与 relevance。F 相关检测从 0 提升到 12.50% 的同时,不相关检测降到 73.81%,显示调用积极性与误调用之间存在权衡。

AST 成功要求函数与参数符合题目允许的答案;格式正确仅是必要条件。Parallel 还涉及调用集合正确性。Multi-Turn 更依赖工具返回和状态演进,不能用第一步调用准确率替代全轨迹执行成功率。

5.5 外部公布结果的比较边界

后续对外部模型的比较遵循用户要求:引用公开模型卡、论文、固定榜单快照;不新增本地复测。归档中没有可核实、同一 BFCL 版本与设置下的 SmolLM/Qwen 外部结果快照,因此不填入来源不明的数值,也不将早期本地结果冒充公开成绩。

若今后只做文献整理,外部比较表须保存模型确切版本、参数量、BFCL 版本、Prompt/FC 设置、类别覆盖、公开日期和链接。论文中不同版本的 Overall 与本研究不完整聚合值没有直接排序意义。官方入口:BFCL leaderboard。

6. 数据规模审计:为什么“输入很多”仍监督有限

F 数据计量 数值 解释
轨迹池 16,487 既有任务转换及回放
响应样本 45,531 多步拆响应,重复历史输入
准备池输入 token 51,487,862 不是实际训练处理量
准备池监督 token 976,587 labels 非 -100,约输入的 1.90%
平均监督 token / 响应 21.45 调用目标短
F 实际处理输入 token 28,946,298 400 步处理量
C 分支累计输入 token 43,819,689 A→A_repair→B→C
F 分支累计输入 token 72,765,987 C 分支→F,不含 D/E

各阶段原始文件合并精确去重后有 56,837 条轨迹、47,807 个用户文本、2,706 个工具名、5,553 个 schema 文档。它们仍包含模板、格式和名称变体,不能等同于独立任务数量。审计没有完整的 A_repair 原始轨迹文件,统计范围需保留这一限制。

扩量理由来自任务覆盖有限和公开泛化不足,而不是预训练与 SFT token 的固定比例。更长工具说明只增加输入成本,重复回放只增加更新次数,不能替代新的任务族。短调用目标本来就合理,不应为了提高监督 token 占比而制造无意义长回答。

7. 最后一轮公共数据准备:成果及质量门槛

新增来源固定为 ToolACE 6bda777c88d21e5a204703c1ee45597a8fa4f734 和 Glaive-v2 e7f4b6456019f5d8bcb991ef0dd67d8ff23221ac。原文件 SHA-256 与源 manifest 一致。原始 124,260 条经过保守解析、schema/参数检查、来源重合检查、精确去重和近重复筛选,保留 16,730 条候选。

分布 ToolACE Glaive-v2 合计
原始行数 11,300 112,960 124,260
结构/schema 校验通过 6,375 68,466 74,841
最终保留候选 6,363 10,367 16,730
零调用候选 1,286 178 1,464
含调用候选 5,077 10,189 15,266
一个 assistant 回合含多调用 1,888 0 1,888
含工具返回的候选 420 10,189 10,609
用户文本含 CJK 15 0 15
用户文本字符 p50 / p95 148 / 741 150 / 240 —
可用工具数 1–9 1–2 —

保留率约 13.46%。低保留率同时受到数据重合和解析器保守规则影响,不能解读为“86.54% 源数据低质量”。例如无 schema 的一般问答不适用工具数据筛选,但不一定是错误问答;ToolACE 的 SchemaError 有 3,974 条,可能是类型别名和 schema 方言与 Draft7 不兼容,而非所有标签错误。没有额外重跑修复验证,本报告不推断可挽回数量。

Glaive 的拒绝记录包含 19,413 条既有来源用户文本精确重合、8,621 条冻结评测池文本重合、17,168 条用户序列重复、11,671 条轨迹重复、632 条参数 schema 不合格。这些原因按流水线先命中的规则计数,不能把它们理解为各类错误独立同时存在。冻结池结合 BFCL 和内部开发/测试文件,因此 8,621 不能全部归因于 BFCL 污染。

近重复流程使用 64 permutations 的 MinHash 查候选、词三元组 Jaccard≥0.85 精确复核,排除 1,208 条用户序列近重复和 18 条冻结池近重合。它是词法近似筛选,无法保证没有语义重复、改写题或基座预训练污染。扫描中 Format Sensitivity 文件未提取到用户文本;对应基础题覆盖与变化需另行映射,不能宣称每个格式题已完整匹配。

候选均标为 schema_validated_results_not_executed。多调用回合未验证调用之间独立性,不能全部称为并行;零调用候选未逐条判定为不相关、澄清或一般回答;含工具返回不代表结果真实可执行。仅 15 条含 CJK 的候选说明语言分布明显偏英文,不代表做完了语言识别或中文能力评测。

准备脚本随机选出 10,000 条 train 和 1,000 条 dev,其中 train 的 863 条为零调用、12,900 次为调用总数。此前把 863 当成全池零调用数、把 15,867 当成全池含调用数的表述需要纠正,主表以 1,464 和 15,266 为准。

该 train/dev 是准备草案:随机切行,没有完成任务族/schema 分组隔离;未完成语义抽审、模型 token 长度检查、既有来源近重复筛查和真实结果重算。归档报告原字段 training_ready=false 保持不变。数据曾上传服务器,但未发现 G tokenized 数据、模型 checkpoint 或训练结果,本研究结束时不声称已在此扩量训练。

8. 失败模式与研究经验

8.1 协议是可执行接口,应作为独立验收层

工具调用目标需要明确函数名、参数类型、边界 token 和停止条件。XML 协议熟练不等于官方 Python/JSON Prompt 熟练。解码时 skip_special_tokens=True 可能去除结构,保存原始 token 并只去除末端 EOS/pad 更适合诊断;依然须根据真实 tokenizer 检查结构是否为 special token,不能泛化为所有模型的统一问题。

实用验收应逐层记录:非空生成→调用解析→函数存在→参数 schema→参数语义→执行成功→用户目标完成。一个总分无法定位在哪一层失败。本次 F 的官方单步小幅改善说明协议适配有收益,但模板语义覆盖与容量因素仍需独立证据。

8.2 内部合成评测用于回归,不足证明开放泛化

约 20 个工具和少数生成模板容易使模型学习词面映射。内部 multi 98.44% 与公开单步 0.25% 并不矛盾:两者在工具说明、题型、协议、参数结构、任务开放度和上下文长度上不同。未来研究需要留出工具族、任务族、schema 结构和参数组合,报告 IID 与 OOD,避免只靠随机 query 划分。

8.3 负例指标必须结合正例

总不调用可以在不相关集获得高分。负例训练要区分无法完成、缺参需澄清、无需工具可答、可调用但用户没有请求调用等行为。reward 或晋级门槛如果只奖励“不调用”或格式有效,可能优化出捷径。本次未进行 RL,此处是后续方法上的风险分析。

8.4 Loss 衡量拟合,不直接衡量工具执行

D/E/F 均降低各自 dev loss,但对保留能力和 BFCL 的影响不同。监督目标中可能混有短调用、长回答、一般问答,其权重不同。应同时保留教师强制 loss 与生成执行指标,版本晋级以正例、负例、多轮和 OOD 的组合门槛决定。跨协议 dev loss 不直接可比。

8.5 先核实评测长度再决定架构路线

Multi-Turn 全部超限意味着本次没有真正测得该类别的模型推理能力。实验计划应先无推理地统计完整提示长度、后续对话增长和可用生成预算。之后若考虑扩展上下文,需要长序列 attention、显存、吞吐、RoPE/位置适配、远距离引用和短能力保留验证;单纯继续短 SFT 无法解决此瓶颈。

8.6 数据规模要由独立性和学习曲线定义

预训练约 400B 不推出 SFT 必须某个固定规模。应该同时报告去重轨迹、任务族、schema 结构、有效监督 token、真实执行验证比例。比较一次遍历与固定监督预算能够区分“新样本收益”和“更多更新收益”。本次没有实际开展 10K→50K→150K 学习曲线,不能声称扩量已证实有效。

8.7 基础设施和科学结论需分账

NPU DDP、独立 venv、离线下载传输、按卡分片、断点恢复和进度仪表盘是可复用工程成果。它们证明管线可运转,不证明模型有效。网络服务缺失、长输入拒绝、原始评分失败、模型答案错误应分别计数;只有覆盖完整时才可讨论完整榜单总体表现。

9. 可复用代码与复现说明

归档 code/ 保留历史 Python 文件,并提供下载 ZIP。重点阅读顺序为 protocol.py → prepare.py → tokenize_data.py → train.py → evaluate.py → official_adapter.py → run_official.py → 两个审计脚本。文件有硬编码路径与阶段副作用,导入某些文件也会执行数据准备或注册操作;先读代码,勿将归档页面当成自动训练入口。

文件 作用 重要限制
protocol.py schema、XML 调用、合成真实执行器 工具集合窄
prepare.py / prepare_d/e/f.py 阶段采样、轨迹、协议变换 回放与转换不增加独立语义
tokenize_data.py 逐 assistant 目标掩码与序列校验 重复上下文成本;需匹配模板
train.py 八卡 DDP、token 归一 loss、checkpoint torch_npu / HCCL / 固定数据路径
evaluate.py 内部生成和执行成功检查 特定 XML 协议和模板分布
official_adapter.py Haidass→官方 OSSHandler 4096 上限、贪心生成、Prompt
run_official.py 原官方题目与 scorer,分片恢复 要安装固定 BFCL,运行会启动评测
audit_sft_scale.py 输入、目标、分支和去重计量 部分原文件缺失,非语义去重
audit_bfcl_coverage.py 失败与长度覆盖统计 需要已保存原始输出
quality_expansion.py 公共候选审计 保守规则;未满足全部质量门槛
prepare_bfcl_expansion.py 10K/1K 数据草案 随机切行,不能直接视为独立验证
public_eval.py 早期自定义子集诊断 历史局限,不作为官方结果

原始合成执行器的调用示意(仅说明代码,不代表本次重新运行):

from protocol import execute
result = execute("multiply", {"a": 3, "b": 4}, {})
# expected: {"result": 12}

训练掩码逻辑示意:

prefix = tokenizer.apply_chat_template(history, tools=tools,
    tokenize=False, add_generation_prompt=True)
full = tokenizer.apply_chat_template(history + [assistant_target], tools=tools,
    tokenize=False, add_generation_prompt=False)
# 必须验证 prefix 真的是 full 的 token 前缀;仅目标区段参与 loss。
labels = [-100] * prompt_len + full_ids[prompt_len:]

正式评分复现依赖 pinned BFCL 仓库及其许可证。归档链接到上游而非重新发布全部题目和答案。实验环境快照见 docs/CODE_GUIDE.zh.md,代码文件 SHA-256 见 MANIFEST.json。代码快照不等价于完整可移植复现实验包:原权重、完整数据、历史环境和种子一致性仍需要用户保留的原服务器记录。

10. 阶段结束的成果清单

已完成:A–F SFT 记录;内部执行评测与保留门槛;C/E/F 官方版本本地可运行类别;三种记忆后端;格式配置评测;上下文覆盖审计;输入与监督规模审计;两源原始下载、checksum 验证、16,730 候选池和 10K/1K 草案;研究文档、源代码及证据归档。

未完成且本次不再执行:G 训练、50K 扩量、语义数据质量抽审、任务族隔离切分、32K 长上下文适配、Web Search、完整官方 Overall、RL、多种子与严格容量对照。未完成项目是研究边界,不能从现有结果外推其成功。

阶段结论:该研究获得了有限分布工具学习的可行性证据、可复用的训练评测工程,以及清晰的泛化和上下文瓶颈证据。它没有完成在 BFCL 上表现良好的整体目标。最有价值的经验是及时识别“内部高分≠公开泛化”“不调用高分≠会选择调用”“loss下降≠版本晋级”“格式转换≠新任务”“样本池≠独立高质量数据”“记分零≠推理失败”。

来源与证据

代码、证据与下载

展开代码阅读与复现指南

代码和证据归档说明

本包归档既有研究,不会自动启动训练或推理。所有模型、数据和平台的权利仍以各自来源条款为准。本归档不附加统一开源许可证来覆盖未知来源的内容。

目录

  • docs/RESEARCH_REPORT.zh.md:完整复盘,包含结果、限制、数据质量和经验。
  • code/:历史训练、数据、内部评测、官方接入和审计脚本。
  • evidence/:服务器已有 stage result、开发/测试指标、gate、BFCL CSV 和覆盖诊断。
  • data/:已有数据源 manifest、质量报告、SFT 规模统计;不重新发布原始语料或 BFCL 题目。
  • downloads/:可下载的代码包和完整归档 ZIP。
  • MANIFEST.json:每个归档文件大小和 SHA-256,生成 manifest 和 ZIP 之前的文件清单。

阅读路径

  1. protocol.py 定义早期工具、执行器及 XML 约定。
  2. prepare.py 和 prepare_d/e/f.py 对应数据混合与阶段适配。
  3. tokenize_data.py 检查模板前缀一致性,为 assistant 目标创建 labels。
  4. train.py 对目标 token 做跨卡归一化,保存 best/checkpoint/final。
  5. evaluate.py 使用合成执行器检查实际目标是否完成。
  6. official_adapter.py 只提供本地模型接入;run_official.py 对接上游 BFCL。
  7. audit_sft_scale.py 和 audit_bfcl_coverage.py 检查有效监督和评测覆盖。
  8. quality_expansion.py 为新增数据构建候选审计,不代表完整高质量数据认证。

环境快照与依赖

训练:Linux aarch64、Ascend 910B3 ×8、torch 2.7.1、torch_npu 2.7.1、transformers 4.56.0.dev0、Python conda 环境 verl_pt27_25rc3。原训练环境没有锁成完整跨平台依赖清单;不能仅 pip 安装 torch 就运行。

BFCL:仓库 commit f7cf7359b7ac615a0b294831c5ba2bc95ee4a000。隔离 venv 继承训练环境 site-packages,补充 sentence-transformers 3.4.1、faiss-cpu 1.11.0、tree-sitter-java 0.21.0、tree-sitter-javascript 0.21.4、overrides 7.7、tenacity 9.1.2、rank-bm25 0.2.2。向量编码器需按官方构造器的路径约定准备。

新增数据审计环境:Windows Python 3.12;jsonschema 4.26.0、datasketch 2.0.0。只用于历史 CPU 清洗,不参与旧 A–F 的训练环境。

原运行通过 /workspace/scripts/env.sh 加载 conda/CANN 和库路径。服务器数据在 /srv/haidass,容器映射到 /workspace。公开包不包含 SSH 登录脚本、密码、API token 或宿主地址。

重要的历史代码限制

  • 路径和阶段参数多为硬编码,文件不是可随意导入的公共库。
  • quality_expansion.py 在模块顶层运行,导入会触发数据扫描和输出。
  • prepare_bfcl_expansion.py 使用随机行切分,属于未通过任务族独立性门槛的草案。
  • analyze_expansion.py 的早期启发式统计被质量报告替代;其 checksum 布尔字段是硬编码,实际校验来自后来的 quality_expansion.py。原文件保留以展示修正链,不能用该布尔字段证明完整性。
  • public_eval.py 与 run_public.py 为早期局部诊断,不提供可与完整 BFCL 榜单比较的成绩。
  • official_adapter.py 保留结构 token,但固定上下文 4096;长输入会主动报错。
  • train.py 使用固定 processed/tokenizer;更换协议却忘记同步 tokenizer 会导致训练/推理不一致。
  • optimizer.pt 使用 torch 序列化,未随公共包分发;这里只保留相关代码供审阅。
  • loss 改善与 checkpoints 是完整阶段记录;best 的祖先不一定正好经历阶段全部 steps。分支累计 token 不是 best checkpoint 的精确 token 账本。

证据优先级

最新服务器导出的 stage/result 与官方 score CSV → 同一 split 和 scorer_revision 的 JSON → 质量与覆盖报告 → 历史状态文档 → 对话描述。旧 gate 中 official_evaluation_pending=true 是保存时状态,不能覆盖之后已完成的类别 CSV。旧计划中 50K、150K、32K 是未执行建议,不能写成成果。

data_overall.csv 有不完整聚合值,data_agentic.csv 缺 Web Search。保留原表用于审计,主文档明确拒绝作为完整 Overall/Agentic 排名。format 指标单位是百分点,其 26 配置表可以单独下载。

本次归档仅做文件解析、编译检查、站点与发布验证,没有启动新的模型训练、模型推理、基准评测或数据实验。