如果您的计算机智能体能够学习新的命令行界面(CLI),并且在无需编写文件或自由输入 shell 命令的情况下也能安全操作,该怎么办?
在关于构建计算机使用智能体的系列文章的第 1 部分中,我们利用 NVIDIA Nemotron 在一小时内构建了一个自定义的 Bash 计算机使用智能体。在本续集中,我们将更进一步,指导同一个 推理 模型在缺乏先验知识的情况下,安全地运行 LangGraph 平台 CLI。这表明大型推理模型能够轻松适应并执行新的代理式任务。
与简单的文件操作不同,我们的新智能体将学会启动本地服务器、构建容器以及生成 Dockerfile,整个过程完全通过可验证的 人机交互 命令界面完成。
我们将结合合成数据生成(SDG)与强化学习结合可验证奖励(RLVR),并通过组相对策略优化(GRPO),以提升效率与安全性。
构建内容:运行新 CLI 工具的专用智能体
您将微调 AI 智能体,它可以:
- 提出有效的 LangGraph CLI 命令(例如,langgraph dev –port 823 –no-browser)
- 在执行前要求明确的人工确认
- 从合成种子数据中学习新的子命令
- 利用 RLVR 在单个 GPU 上高效训练
以下是模型训练完成后典型的交互示例:
[🙂] Bring the LangGraph server online.
[🤖] I can execute:
[COMMAND]
["langgraph", "up", "--wait"]
[CONFIRM]
Run this command now? (yes/no)
▶️ Execute `langgraph up --wait`? [y/N]: y
[🤖] Result:
Server started successfully on port 8000.
此模式具备通用性:相同的工作流程可扩展以支持新的 CLI 工具和环境。
为何通过合成数据生成与强化学习来训练新的命令行界面(CLI)?
教 AI 智能体操作专用 CLI 工具带来了传统方法难以应对的独特挑战:
数据稀缺问题: 多数专用 CLI 工具缺乏常规训练所需的大量使用日志。与常见的 shell 命令不同,像 LangGraph 这类工具具有特定的语法、标志和工作流,在常规训练数据中难以充分呈现。收集真实的使用示例可能需要耗费数月甚至数年时间。
安全 – 准确性权衡:您希望代理在理解用户意图时具备创造性,但在生成命令时必须绝对精确。一个拼写错误或错误的参数标志就可能导致系统故障,甚至引发更严重的后果。传统的微调方法往往导致模型表现过于保守(拒绝合理的请求)或过于宽松(响应危险指令),难以在安全性与灵活性之间取得平衡。
SDG+ RL 如何解决这一问题:
- 通过合成数据生成,您只需基于少量种子命令即可构建高质量的训练示例,充分覆盖 CLI 的各项功能。
- 结合可验证奖励的强化学习,通过奖励有效输出并惩罚错误,引导模型持续生成符合语法的正确指令。
- 二者相辅相成:SDG 提供多样化的训练场景,而 RLVR 确保模型学会准确应对这些场景。
这种方法在企业环境中尤为有效,尤其适用于需要快速调整智能体以适应专有内部工具、而无需等待自然数据收集的情况。
预备知识
对于此设置,您需要:
硬件要求:
- 具备至少 80 GB 显存的 NVIDIA GPU(例如 A100)
- 不少于 32 GB 的系统内存
- 100 GB 可用磁盘空间,用于存储模型权重和数据集
软件要求:
- Python 3.10 及以上版本
- CUDA 12.0 或更高版本以及相应的 NVIDIA 驱动
核心组件:
- LangGraph – 智能体将学习操作的 CLI 工具
- NeMo Gym – 构建支持工具调用与可验证奖励的强化学习训练环境
- Unsloth – 基于 GRPO 实现高效强化学习,显著降低显存占用
- NeMo Data Designer – 用于生成高质量的合成训练数据
基础模型:
- Nemotron-Nano-9B-V2 – 可在 Hugging Face
- 链接文档中包含安装与使用说明
观看本教程的视频版本:
视频 1:利用 SDG 与 RL 生成 LangGraph CLI BASH 智能体。
第 1 步:利用 NeMo Data Designer 设计合成数据集
在训练之前,我们需要准备数据:即与 LangGraph CLI 调用 相对应的 自然语言请求 对。
我们将使用 NVIDIA NeMo Data Designer 以编程方式生成该数据集,从少量种子示例出发,逐步扩展为数百个经过验证的命令对。
为何使用合成数据生成?
想象一下合成数据的生成过程,比如通过向某人展示一种模式来教授一门新语言,然后让他们创造出新的变体。与收集数千个真实样本(这些样本可能尚不存在)不同,我们:
- 提供若干高质量的“种子”示例
- 利用 AI 模型生成多样化的变体
- 依据严格规则逐一验证生成内容
- 在数小时内(而非数月)构建全面的数据集
数据集结构
| 用户请求 | CLI 命令 | 确认 |
|---|---|---|
| “在端口 8123 上启动本地开发服务器。” | langgraph dev –port 8123 –no-browser | “继续执行此命令?(是/否)” |
| “为 amd64 和 arm64 构建项目镜像。” | langgraph build -t my-graph:multi –platform linux/amd64,linux/arm64 | “立即运行 build?” |
生成的每条记录包括:
- 用户请求:人类实际可能输入的自然语言
- CLI 命令:需执行的语法准确的命令
- 确认提示:执行前的安全确认
验证过程
在 Data Designer 中,我们通过采样参数引导多样性,并拒绝任何无法验证的记录。例如,可采用如下正则表达式模式:
^langgraph\s+(dev|build|up|dockerfile)\b
这可确保:
- 每个命令均以语言图起始
- 仅使用已批准的子命令
- 语法始终保持有效
最后,我们以 OpenAI 风格的消息格式导出数据集,这种格式特别适合使用开源 NVIDIA NeMo 框架进行 RLVR 微调。
此验证过程至关重要:它能够确保奖励验证器(稍后引入)与训练数据的结构和语法保持一致。
我们来了解一下 NeMo Data Designer 中的实现方式。
# Define seed distributions
command = Sampler(["new", "dev", "up", "build", "dockerfile"])
port = Sampler(range(3000, 9000))
template = Sampler(["react-agent", "memory-agent", "retrieval-agent"])
# Generate natural language input
user_request = LLM(
prompt=f"Write a request to {command} with {template} on port {port}",
model="nemotron-3-nano-30b-a3b"
)
# Generate structured output
tool_call = LLM(
prompt=f"Convert '{user_request}' to CLI JSON.",
schema=CLIToolCall,
model="nemotron-3-nano-30b-a3b"
)
第 2 步:使用 RLVR 进行微调 (使用 GRPO)
借助干净且经过验证的数据,我们开始使用 Unsloth 进行微调。Unsloth 是一种与 NeMo Gym 训练环境集成的开源框架,可用于高效强化学习。
利用可验证奖励(RLVR)进行强化学习
传统的基于人类反馈的强化学习(RLHF)如同由一组评委对每个输出进行评分,具有主观性强、成本高且结果不一致的问题。 RLVR 则采用基于代码的确定性验证,取代了人工评委。
我们不问人类“此命令是否正常?,”而是询问代码“此命令是否符合我们的验证规则?”
对于 CLI 智能体,验证器将执行以下规则:
- 语言图开头
- 仅允许批准的子命令和标志
- 禁止注释、标点符号或不安全 tokens
奖励系统:
有效的命令 → +1 个奖励 (鼓励此行为)
无效的命令 → −1 个奖励 (不鼓励此行为)
输出 → 0 个奖励 (中立,无强化)
这种一致性至关重要:相同的输出始终会带来相同的回报,从而使训练过程稳定且可预测。由于验证器仅仅是代码,您可以随时调整约束条件,而无需重新训练独立的奖励模型。
使用 NeMo Gym 构建训练环境
NeMo Gym 是一个开源库,用于为大语言模型构建强化学习训练环境。它提供了定义工具、执行智能体动作以及计算可验证奖励的基础架构,恰好满足了我们训练 CLI 智能体的需求。
CLI 智能体环境被实现为 NeMo Gym 资源服务器,其封装如下:
- 工具定义 – 智能体可提出的 CLI 命令
- 验证逻辑 – 用于检查命令有效性和正确性的规则
- 奖励计算 – 向强化学习训练循环返回的分数(0.0 到 1.0)
当智能体发出命令时,资源服务器将评估其正确性,并返回基于 GRPO 训练的奖励信号。这种环境逻辑与训练框架的明确分离,使您能够在不触碰 RL 代码的前提下,独立迭代 CLI 工具和验证规则。
如需了解创建自定义环境的更多详情,请参阅 NeMo Gym 文档及资源服务器创建指南。
通过组相对策略优化(GRPO)实现高效优化
与 PPO 相比,GRPO 是一种更为简洁且内存效率更高的替代方案。 GRPO 无需训练独立的“评论家”模型来评估每个动作的效果,而是通过对同一提示采样多个输出,并以它们的平均奖励作为基准。这种方法将所需模型数量减半(无需评论家),并通过将输出结果相互比较(而非与已学习的估计值比较)来降低方差。
它在实践中的工作原理如下:
当大多数尝试都失败时,传统的强化学习可能会面临困难。试想一下,模型为同一个提示生成 10 个命令变体:
- 九项无效(奖励 = 0)
- 一项有效(奖励 = 1)
标准优化可能在故障噪声中消失。改为 GRPO:
- 将对同一提示的所有响应分组在一起
- 计算每个组内的相对优势
- 显著巩固了这一成功,使其从失败中脱颖而出
这种方法可显著提高学习效率和收敛速度,帮助模型快速掌握命令中的有效要素。
我们来看看如何利用 Unsloth 和 NeMo Gym 来实现这一目标:
# The "Verifiable Reward" Function
def compute_reward(agent_output, expected):
try:
cmd = json.loads(agent_output)
# Hard Rule: Command must match expectation
if cmd.name != expected.name:
return -1.0 # Penalize hallucinations
# Soft Rule: Flags must be accurate
accuracy = calculate_flag_accuracy(cmd.flags, expected.flags)
return accuracy
except JSONDecodeError:
return -1.0 # Penalize broken syntax
# Start GRPO Training
grpo.train(
model="nemotron-nano-9B-v2",
algorithm="GRPO",
env=compute_reward,
dataset=synthetic_data
)
第 3 步:人在环执行
微调完成后,我们会将模型嵌入运行时循环中,该循环在执行前始终要求人工确认。这延续了第 1 部分提出的安全架构,确保任何命令都需获得明确批准后方可执行。
安全架构
subprocess.run(argv, shell=False)
这条简单的代码体现了关键的安全原则。通过设置 shell=False,我们可以确保:
- 命令以离散参数列表形式执行(例如[“langgraph”、“up”、“- wait”])
- Shell 元字符,如 &、;或 |,将被视为普通文本,而非操作符
- 因此,命令注入攻击变得不可能
完整的安全链
我们的分层方法可确保每个步骤的安全性:
- 训练时安全: RLVR 可确保模型学习生成有效的命令。
- 运行时验证: 验证器会依据允许列表逐项检查每个建议的命令。
- 人工确认: 用户须在执行每个命令前进行明确批准。
- 执行隔离: 命令执行时不依赖 shell 解释,有效防止注入攻击。
即使模型在训练过程中偶尔生成无效指令,运行时策略也会阻止这些指令的执行。
为什么 RLVR™ 合成数据适用于定制化代理式 AI
这种组合产生了强大的协同作用:
| 组件 | 作用 | 为何重要 |
|---|---|---|
| NeMo Data Designer | 通过内置验证生成逼真且多样化的结构化 AI 训练数据 | 解决冷启动问题——无需等待实际使用数据即可开展训练 |
| NeMo Gym | 借助 CLI 工具和可验证的奖励逻辑提供训练环境 | 定义哪些动作有效以及如何衡量成功 |
| Unsloth for RLVR + GRPO | 实现高效的 GRPO 训练 | 使 RL 训练在单个 GPU 上可用,同时保持质量 |
| Human approval loop | 作为最终安全门,保持用户控制 | 维护信任——用户始终在任何操作之前拥有最终决定权 |
结果:我们能够教会 Nemotron-Nano-9B-V2 精确且安全地操作新的 CLI 工具,而无需进行完全重新训练,也不会影响其安全性。
总结
通过将 Bash 运算符扩展为 LangGraph 感知型计算机使用代理,我们展示了合成数据生成与RLVR(基于 GRPO)如何构成高效方案,快速使大型推理模型适配新的工具链。
该工作流可清晰地泛化到任何 CLI 工具:
- 使用 NeMo Data Designer 定义可验证的结构化示例
- 利用 CLI 工具结合验证逻辑构建 NeMo Gym 环境
- 采用 Unsloth 的 GRPO 实现高效微调
- 保持 人机交互 执行,确保安全性
通过这种模式,您可以将任何具备能力的大语言模型(LLM)转化为特定领域的、可验证的安全计算智能体,从当前的 LangGraph 延伸至未来的专有内部工具。
这具有重大意义:您无需等待数月来收集训练数据,也无需承担不可控的命令生成风险,即可在几天内部署专用且安全的 CLI 智能体。无论是自动化 DevOps 工作流程、创建客户支持工具,还是构建内部生产力智能体,该方法都能提供一条从创意到生产的高效、安全路径。
通过订阅 NVIDIA 新闻,并在LinkedIn、X、Discord和YouTube上关注 NVIDIA AI,及时掌握 NVIDIA Nemotron的最新动态。
- 访问我们的 Nemotron 开发者页面,获取开始使用高度开放、智能的单次计算推理模型所需的所有要点。
- 在 Hugging Face 以及 NIM 微服务 和 Blueprints 上 build.nvidia.com 探索新开放的 Nemotron 模型和数据集。
- 收听即将推出的 Nemotron 直播,并通过 Nemotron 开发者论坛 和 Nemotron 频道 在 Discord 上与 NVIDIA 开发者社区建立联系。
- 浏览 视频教程和直播,充分利用 NVIDIA Nemotron。