跳到正文
LangChain Blog·· 11 天前精选AI 评分65

LangChain 发布 LangSmith Fine-Tuning 与 smithtune CLI

Introducing LangSmith Fine-Tuning

AI 导读

LangChain 发布 LangSmith Fine-Tuning 及配套 CLI smithtune,可把 LangSmith 中的智能体轨迹整理成训练数据,完成数据集构建、训练、评测到部署的全流程。

推荐理由

原文给出从轨迹筛选到训练、评测、部署的完整 CLI 流程,并附两个内部智能体的 SFT 前后对比数据。

正文 · AI 翻译

今天我们推出 LangSmith Fine-Tuning 和 smithtune,这是一个 CLI,帮助团队将 LangSmith 轨迹转化为其智能体的自定义微调模型。它通过一个 CLI 处理整个微调流程:从 LangSmith 轨迹创建和准备数据集、使用 Fireworks 或 Baseten 进行训练,以及使用 LangSmith 进行评估。你可以直接运行 smithtune,也可以与你的编码智能体协作来运行命令并检查结果。

smithtune  专为后训练模型而构建。它目前支持监督微调(SFT),即使用良好行为的示例来训练模型。你向模型提供输入/输出,它通过更新模型权重来模仿该行为进行学习。LangSmith 轨迹数据旨在支持 SFT,而 smithtune 有助于将这些轨迹转化为有用的训练数据。

这为团队提供了一种无需手工构建数据管道即可训练专用模型的方法。基于你的示例训练的模型,在特定任务上往往能达到与通用前沿模型相当甚至更好的表现,且通常成本更低、延迟更小。

在 GitHub 上试用 LangSmith Fine-Tuning,并通过从仓库安装 smithtune skill,让你的编码智能体端到端地驱动微调流程。

微调收益的最大驱动因素之一是数据选择。随着 smithtune 的发布,连接这一闭环变得更加容易——从 LangSmith 中精选的生产轨迹,到 Fireworks 上的托管训练和已部署模型。团队可以无缝地从数据到训练再到部署,而无需沿途搭建基础设施。这正是我们兴奋地与 LangChain 共同构建的路径。‍
– Pranav Jain,Fireworks 产品负责人
smithtune's 与 Baseten Loops 的集成使团队能够在几分钟内从数据收集无缝过渡到运行微调实验。构建者能够持续收集和整理更好的数据,借助 Loops 提供的全托管训练基础设施,随着时间的推移产出更好的模型,从而专注于为最大的客户用例进行设计。‍
– Aaron Ellis-Bloor,Baseten 应用研究员

智能体轨迹与后训练

在深入探讨 smithtune 提供的能力之前,让我们先讨论一下智能体轨迹。

轨迹是一系列有序的消息、工具调用和工具结果,展示了智能体如何完成一项任务。LangSmith 从 trace 或 thread 中组装这一序列,将支持的消息格式统一为一种通用表示,保留工具定义,并移除重复的历史记录。

LangSmith 轨迹格式在设计时就考虑到了后训练。对于 SFT,学生模型需要教师模型在产生成功结果时所拥有的确切上下文。在复杂的长时运行智能体中,工具可用性上下文通常会随着智能体的工作而变化(例如,延迟工具加载),而简单导出最终消息列表会丢失这种细微差别。LangSmith 的轨迹格式精确记录了模型在每一轮所看到的内容,因此 smithtune 可以将每个动作与其真实上下文配对。

Anatomy of a trajectory in LangSmith

smithtune 在整个工作流程中都使用轨迹。你整理成功的示例轨迹,为所选模型准备它们,并基于其记录的回答和工具调用进行训练。未纳入训练集的轨迹为评估提供上下文和参考动作。

分步演练

构建你的数据集

数据集包含目标模型将要拟合的“黄金”轨迹。 这些数据是监督微调的基础。

使用smithtune创建数据集时有几个关键阶段:

  1. 拉取数据集:smithtune将轨迹从LangSmith追踪项目拉取到本地目录DIR,并支持可选过滤器。
  2. 标注轨迹:smithtune与人类(及其代理)协作,识别“良好”轨迹的特征,据此创建评分标准,然后派出代理委员会审查并筛选适合SFT的候选轨迹
  3. 存储持久数据集:smithtune确保任何用于训练的数据之后都可作为持久化产物进行审计。 它将商定的黄金轨迹集上传到LangSmith数据集,用于训练和评估。

在此过程中,smithtune处理如下细节:

  • 通过过滤超出给定序列长度的轨迹,确保轨迹与所选模型兼容
  • 将数据拆分为训练/验证/测试集,用于下游评估

训练模型

在确定开始训练之前,smithtune plan帮助人类审查其设置,例如所选模型、训练样本数量,以及学习率、批量大小和轮数等超参数。

你可以在运行smithtune train开始微调任务之前调整这些设置。 smithtune将任务提交到Fireworks托管SFT或Baseten Loops,它们支持在你准备好的轨迹上进行LoRA训练。你无需管理GPU配置或训练基础设施。 训练期间,smithtune还会检查验证集上的性能,并选择验证损失最低的已保存检查点。

评估结果

训练完成后,运行smithtune evaluate将所选检查点与基础模型进行比较。

smithtune使用内置的回放评估来测试基础模型与微调后的模型。评估模型能否完成黄金轨迹中的动作,并由评判员根据真实记录的示例对这些预测进行评分。

CLI会返回一个LangSmith对比链接,结果会随着评估进展而显示。你可以比较分数、检查单个响应和工具选择,并查看微调在哪些方面有所帮助或引入了退化。

部署你的模型

如果你对评估结果满意,使用smithtune deploy来部署你调优后的模型,并将其连接到你的应用。

如果结果不符合你的期望,请改进数据集或调整训练设置,然后再次训练和评估。你可以与你的编码代理一起在LangSmith中查看对比,以确定哪些响应或工具选择需要更多改进。

实际运行的结果

为了评估我们smithtune流程的质量,我们将其应用于LangChain中两个高频使用的代理:

  • Engine分析代理轨迹以发现失败并归组相关问题。我们使用Engine中某个代理的精简版本,测试SFT能否提升其识别和组织这些问题的能力。
  • OpenSWE Review审查我们真实代码仓库中的代码变更。我们测试SFT能否在减少查找缺陷所需工作量的同时保持审查质量。

Engine:通过专业化提升任务性能

我们整理了一组优质轨迹,并用它们对基础版 Kimi K3 进行了微调。基础版 Kimi 模型本已很强,但我们已经穷尽了通过 harness 工程进一步推动它或 GPT-5.6 Sol 的能力。 在 IssueBench(我们内部的 issue 检测与分组基准)的一个子集上,微调后的模型得分远高于基础版 Kimi 和 GPT-5.6 Sol。

模型 任务得分 ↑
GPT-5.6 Sol 87.0
Kimi K3 90.0
Kimi K3 + SFT 96.0

OpenSWE Review:质量相近,调用次数更少

我们还在一个内部评估集上评估了 Qwen-3.8-27B,该评估集由真实 pull request 组成,用于衡量代码审查质量和缺陷检测能力。在这项对比中,SFT 将 F1 从 48.9% 提升到 53.7%,同时模型调用次数减少 29.8%,工具请求次数减少 29.4%。

模型 F1 ↑ 精确率 ↑ 召回率 ↑ 每次审查的模型调用次数 ↓ 每次审查的工具请求次数 ↓
Qwen-3.8-27B 48.9% 62.9% 40.0% 55.9 65.8
Qwen-3.8-27B + SFT 53.7% 81.5% 40.0% 39.2 46.5

一个更早、筛选更宽松的训练集在 SFT 后反而降低了 F1 分数。随后我们回到数据整理流程,为每条 Trace 增加了一个审查阶段,希望过采样那些 agent 认为潜在问题确实存在的 trace。

实际的机会在于:以更少的模型和工具调用实现相近的审查质量。这意味着每次审查的成本更低,每个 PR 的审查时间更快。

后训练的考量

何时适合使用 SFT

当你的应用执行重复性任务,并且你拥有它应如何表现的示例时,SFT 尤其有用。寻找你希望模型学习的一致模式,例如遵循工作流程、利用工具结果决定下一步做什么,以及验证自己的工作。

我们建议团队从 harness 工程入手,了解更好的 harness 是否能带来良好性能。如果 agent 在任务上仍然反复犯错,而你又拥有展示如何正确完成该任务的轨迹,那么 SFT 就是一个非常值得尝试的候选方案。

数据选择

我们一再发现,最成功的后训练运行来自在训练数据选择上投入时间。 smithtune 明确帮助用户借助 agent 查看自己的数据,我们发现让领域专家与 agent 一起审查用于 SFT 的 trace,可以提高后训练运行成功的几率。

开始使用 LangSmith Fine-Tuning

LangSmith Fine-Tuning 现已进入公开测试阶段。要开始使用,你需要:

在 GitHub 上试用 smithtune,并告诉我们你接下来想看到什么。在我们持续改进 LangSmith 中的微调工作流时,非常期待你的反馈。

在 GitHub 上开始使用 LangSmith Fine-Tuning。

来源:LangChain Blog · langchain.com