←新闻详情

InternLM 原创项目更新于 10月14日 09:11

InternLM 开源 InternBootcamp 智能体训练与评测框架

GitHub - InternLM/InternBootcamp: Official implement on InternBootCamp · GitHub

AI 导读

InternLM 开源 InternBootcamp(InternAgentHarness),一个面向大语言模型智能体训练与评测的可扩展合成环境框架,将任务提示生成、工具执行、交互控制和奖励计算统一封装为可训练的环境实例。框架提供 BootCampCLI,可把任务配置转换为可运行的智能体交互流程,并支持批量轨迹采集、监督微调数据过滤、强化学习 rollout 和测试集评测。其技术报告已被 WAICA 2026 接收,对应代码版本为 InternBootcamp v1。

推荐理由

精选AI 评分 60

InternLM 开源了面向智能体训练与评测的合成环境框架,读者可了解其多轮工具调用与奖励闭环的设计思路。

主题

标签

正文

InternLM; InternBootcamp

Repository navigation

NotificationsYou must be signed in to change notification settings; Fork29 (29); Star353 (353)You must be signed in to star a repository

Official implement on InternBootCamp

Repository files navigation

README

🎉 InternBootcamp v1 的技术报告已被 WAICA 2026 接收!

📦 技术报告对应代码版本:InternBootcamp v1

总体概要

InternAgentHarness (InternBootcamp) 是一个面向大语言模型智能体训练与评测的可扩展合成环境框架。

它并不只关注一次性的 benchmark 分数,而是为智能体构建可执行、可交互、可验证的任务环境。模型可以在真实的工具调用、状态反馈、多轮交互和奖励信号中持续学习与改进。

在 InternAgentHarness 中,不同类型的智能体任务会被统一封装为可训练的环境实例。每个任务由四个核心部分组成:

任务提示生成:构造任务目标、初始状态和输入上下文; 工具执行:为智能体提供可调用、可验证的外部工具; 交互控制:管理模型与环境之间的多轮通信流程; 奖励计算:根据任务结果和中间过程提供可训练的反馈信号

通过这套统一接口,科研工具调用、路径规划、金融推理、游戏决策、视觉任务等不同场景都可以在同一流程下完成运行、记录、训练和评测。

BootCampCLI

InternAgentHarness 同时提供 BootCampCLI,用于将任务配置自动转换为可运行的智能体交互流程。

用户可以先在本地调试单个任务,再将相同配置扩展到:

批量轨迹采集; 监督微调数据过滤; 强化学习 rollout; 测试集评测; 失败样例分析

每次运行都会记录完整的交互轨迹,包括模型回复、工具调用、环境反馈、奖励结果和最终答案。这些记录便于后续复现、训练、调试和环境迭代。

适用场景

InternAgentHarness 适用于希望进行以下工作的研究者和开发者:

构建智能体训练环境; 评测模型的工具使用能力; 收集多轮交互轨迹并改进任务设计

它将“评测、数据生成、训练、再评测”连接成一个闭环,帮助用户更高效地提升大语言模型在复杂任务中的规划、工具使用、反馈修正和决策能力。

任务示例

InternAgentHarness 提供了一组覆盖不同能力维度的智能体任务环境,用于评测和训练大语言模型在复杂场景中的规划、工具调用、反馈修正和决策能力。这些任务并不是简单的问答数据,而是可执行、可交互、可验证的智能体环境。模型需要根据任务目标调用相应工具,观察环境反馈,并在多轮交互中持续调整策略。 例如:

在 Battery Design 中,智能体需要根据温度、能量和设计目标优化电池参数。; 在 Bot Trajectory Planning 中,模型需要规划机械臂运动并避免碰撞。; 在 Financial Prediction 中,模型需要结合财务数据和约束指标完成预测。; 在 Texas Hold'em Game 中,模型需要基于牌局状态和对手信息进行决策。

通过这些多样化任务,InternAgentHarness 能够系统评估模型是否真正具备面向智能体应用的核心能力,包括理解任务约束、正确使用工具、处理中间反馈、完成长程决策以及输出可验证结果。

用户也可以基于相同接口扩展新的任务环境,将自定义场景接入统一的训练、评测和轨迹采集流程。

使用指南

1. 架构概述

1.1 InternAgentHarness核心改进; 1.2 Multi-round Toolcall的实现原理

1.2.1 与Bootcampv1的差异; 1.2.2 复杂Bootcamp的代码逻辑; 2. 环境准备

2.1 安装依赖; 2.2 系统架构设计

2.2.1 核心组件; 2.2.2 设计原则; 3. 核心组件开发

3.1 指令生成器开发

3.1.1 功能职责; 3.1.2 开发指南; 3.1.3 配置文件管理; 3.1.4 数据生成操作

3.1.4.1 单个配置生成; 3.1.4.2 生成数据格式; 3.1.4.3 批量数据生成; 3.2 工具类开发

3.2.1 功能职责; 3.2.2 开发指南; 3.2.3 配置文件定义; 3.3 交互类开发

3.3.1 功能职责; 3.3.2 开发指南; 3.3.3 接口规范; 3.3.4 配置文件定义; 3.3.5 数据格式约定; 3.3.6 运行时集成; 3.3.7 示例实现; 3.4 分布式工具服务器

3.4.1 架构概述; 3.4.2 运行模式

3.4.2.1 Master模式(生产推荐); 3.4.2.2 Worker模式(生产推荐); 3.4.2.3 Unified模式(调试推荐); 3.4.3 核心特性; 3.4.4 命令行参数; 3.4.5 配置文件转换; 3.4.6 监控与管理; 3.5 奖励计算器开发

3.5.1 功能职责; 3.5.2 开发指南; 4. 模型评估

4.1 评估配置

4.1.1 基础评估配置; 4.1.2 新增核心功能; 4.1.3 参数列表; 4.2 评估输出; 4.3 评估数据后处理

4.3.1 功能概述; 4.3.2 使用方式; 4.3.3 命令行参数; 4.3.4 编程接口; 5. 总结

这里是基于InternBootcampv1开发的InternAgentHarness,主要包含了针对具体专业性Bootcamp场景的multi-round toolcall的agentic RL 流程。

1. 架构概述

1.1 InternAgentHarness核心改进

InternAgentHarness 深入绑定了verl的multi-round toolcall的流程,通过SGLANG-rollout的state control,实现对专业场景的toolcall调用、reward计算、模型训练及推理

1.2 Multi-round Toolcall的实现原理

1.2.1 与Bootcampv1的差异

为了支持更复杂的Bootcamp任务,我们需要多轮工具调用来处理。

基于多轮工具调用的复杂推理任务,通常有两种形式: (1)LLM-based workflow prompt --> LLM rollout(decision) --> tooluse response --> LLM rollout(decision) --> tooluse response ... (2)environment-based workflow prompt --> LLM rollout --> tooluse --> env decision --> LLM rollout --> tooluse --> env decision ... 即,一个Bootcamp任务存在两种LLM与环境的交互形式; 为什么要multi-round toolcall & multi-round toolcall很复杂: (1)single-round toolcall & 多轮对话,本质上都可以refine成single-round的交互 (2)multi-round toolcall 的调用在RL framework中,需要async的调用,导致rollout逻辑会更加复杂

1.2.2 复杂Bootcamp的代码逻辑

(4)基于tool的io的返回,模型的multi-round rollout;

整体rollout结束后,会通过reward score 处计算最终的reward

(5)基于toolcall返回 or 基于模型判断 or 基于max-step 等条件,任务workflow的最终终止;

verl中,state中控制了流程的终止

一个需要多轮调用工具的Bootcamp流程:两种情况 toolcall or interaction-call ,以下统称toolcall 流程包含了: (1)模型的prompt Design,workflow的整个流程; prompt Design,在verl里体现为数据构造,对应包含data-source来明确task的类型, 生成这种数据的流程,在Bootcamp中,参考InternBootcampv1的对应思路; (2)对应需要调用的tool的toollist tool的描述; verl中, toollist,在toolconfig里填写,并且会在chat-template中基于对应mcp协议,拼接在chat-template里, tool的config中,直接绑定了对应的tool的实现; (3)调用的tool的实现逻辑,对应的io; verl中,tool的调用,是通过执行execute,在SGLANG的rollout中对应调用的, 其中,SGLANG的rollout,会根据对应的state,对rollout过程进行控制,这些state包含了toolcall 和terminate等信号, 同时,在这里会计算每一轮的toolcall返回的中间过程reward; SGLANG的rollout中,需要传入的参数包含了

完整的workflow,即prompt、toollist等(这里很重要,因为previous sglang&verl版本中对rollout的传参控制中不包含toollist等内容);

InstructionGenerator: 指令生成,负责prompt设计和数据流控制; ToolManager: 工具管理,处理工具调用和执行; RewardCalculator: 奖励计算; Evaluator: 评估器,可以用于评测、rollout、bootcamp开发调试; InteractionManager: 交互管理,处理用户输入输出

2.2.2 设计原则

模块化: 各组件独立,便于维护和扩展; 可配置: 通过配置文件控制行为; 可扩展: 支持新工具和场景的快速接入

继承基类BaseInstructionGenerator

示例: example_instruction_generator.py

若需生成数据,须继承BaseInstructionGenerator基类,并实现以下两个抽象方法:(若无需生成数据则将数据规范为以下对应格式即可,无需实现InstructionGenerator)

关键要点:

data_source属性用于标识数据来源,格式为"bootcamp/your_bootcamp_name"; case_generator()方法生成能用来唯一确定任务且验证候选答案的参数集,以字典格式返回; prompt_func()方法根据任务参数生成提示词

实践建议:

Prompt模板:使用多个prompt模板,生成时随机选择,实现多样prompt; 题目变种:使用参数data_type参数控制题目变种类型,实现多样的题型与prompt

3.1.3 配置文件管理

示例: example_instruction_config.yaml

使用YAML配置文件来管理数据生成的参数和行为:

配置说明:

instruction_generators: 定义多组配置,每组有不同的参数和生成比例; global_config: 全局设置,包括类路径、随机种子、数据集划分、是否生成parquet格式数据等,也可于此配置tool或interaction config(全局配置会与单条generator配置合并); generation_ratio: 控制每组配置生成数据的比例,自动归一化

3.1.4 数据生成操作

示例: example_multiturn_w_tool_grpo.sh

执行脚本后会以split为后缀生成多个jsonl数据文件

3.1.4.3 批量数据生成

示例: batch_data_generation.py

现支持批量并行数据生成:

bootcamp注册表作为批量生成配置文件(bootcamp_registry.jsonl): 单条注册表数据结构:

3.2.2 开发指南

若自定义Bootcamp需支持工具训练,须继承BaseTool基类,并实现以下两个核心抽象方法:

关键要点:

create()主要用于实现预定义tool环境变量,或初始化tool环境需维护的变量,这些变量不会暴露给模型。

3.2.3 配置文件定义

3.3 交互类开发

示例: example_interaction.py

3.3.1 功能职责

回合式交互控制: 在工具多轮调用之后,向模型返回"反馈/追问",并决定是否终止该样本的交互序列。; 回合级得分: 可基于当前模型输出计算本回合分数(如即时奖励/提示性奖励),并在需要时累计。; 状态管理: 通过instance_id维护每个样本的交互上下文(如标准答案identity、中间状态等)。; 与工具协同: 交互类通常在一轮或多轮工具调用后介入,形成"模型 → 工具 → 交互 → 模型"的闭环。

3.3.2 开发指南

继承BaseInteraction并实现核心方法:

start_interaction(instance_id, identity, **kwargs):初始化交互会话,保存identity等上下文。; generate_response(instance_id, messages, **kwargs):产出"反馈/追问"文本,并返回是否应终止、回合得分等。; calculate_score(instance_id, **kwargs):如需单独计算回合得分,可实现。; finalize_interaction(instance_id, **kwargs):释放会话资源。; 可参考internbootcamp/bootcamps/example_bootcamp/example_interaction.py,其使用ExampleRewardCalculator对最近一次assistant输出进行判分,并在满分时终止交互。

3.3.3 接口规范

3.3.4 配置文件定义

仅支持配置一个交互类(内部会校验长度为1)。; name可选;不填则默认使用类名派生的名称。

3.3.5 数据格式约定

训练/评测时,Evaluator会从数据样本的extra_info.interaction_kwargs.identity中取出identity传入start_interaction。; 建议在构造数据时写入如下字段:

在ExampleInteraction中,会用self._instance_dict[instance_id]["identity"]结合最近的assistant输出进行打分并决定是否终止。

internbootcamp/bootcamps/example_bootcamp/example_interaction.py:

取最近一次assistant输出作为候选答案。; 通过ExampleRewardCalculator.verify_score(...)打分。; score == 1.0时返回should_terminate_sequence=True并给出正向反馈;否则给出纠错性反馈并继续下一轮。

基于Master-Worker分布式架构的工具服务器,支持工具在多机器间分布式部署和执行,提供高并发处理能力和负载均衡。

在其他机器上启动Worker并注册到Master: 指定一个tools_config:

2. 健康监控与容错:

Master监控Worker健康状态,自动清理死掉的Worker; 支持Worker断线重连和故障恢复; 详细的健康检查和状态监控

3. 批量工具配置支持:

4. 配置自动生成:

自动生成适配分布式架构的MCP工具配置文件; 智能端口分配和外网IP获取; 工具类自动更新为BaseMCPTool

5. 实时可视化监控仪表板:

Master服务器提供Web界面实时监控系统状态; 自动刷新显示Worker在线状态、工具可用性和负载分布; 可视化展示活跃实例数、心跳状态和实例映射关系; 支持通过浏览器直观查看整个分布式系统的运行情况

自动生成的工具配置: 使用该配置进行后续的训练与评测

3.4.6 监控与管理

可视化仪表板:

Master服务器提供了一个实时监控仪表板,可通过浏览器访问Master服务器的根路径查看:

仪表板功能特性:

实时自动刷新:每3秒自动刷新一次,无需手动刷新页面; 关键指标展示:

Worker节点数:显示在线Worker数量/总Worker数量; 可用工具数:显示当前系统中注册的工具总数; 活跃实例数:实时显示正在处理的实例数量(高亮显示); 服务状态:Master服务器的运行状态; Worker详细信息:

Worker ID和在线状态(🟢在线 / 🔴离线); Worker URL地址; 支持的工具列表; 当前活跃实例数(突出显示); 最后心跳时间; 主机信息(主机名、IP地址); 注册时间; 工具可用性监控:

显示所有已注册工具; 每个工具的可用Worker数量; 工具状态标识(可用/不可用); 负载均衡可视化:

实时查看各Worker的实例分布; 帮助识别负载不均的情况; 监控Worker健康状态

健康检查API:

除了可视化仪表板,还提供JSON格式的健康检查接口,便于程序化监控:

返回信息包括:

服务状态; 已注册的Worker列表及其详细信息; 工具列表; 实例映射关系; Worker心跳状态

使用示例:

3.5 奖励计算器开发

示例: example_reward_calculator.py

3.5.1 功能职责

从模型输出中提取关键信息; 验证任务完成度并计算奖励分数; 支持容错和部分奖励机制

3.5.2 开发指南

继承BaseRewardCalculator基类并实现两个核心抽象方法:

4. 模型评估

4.1 评估配置

示例: example_multiturn_w_tool_grpo.sh

4.1.1 基础评估配置

使用统一的评估脚本对自定义Bootcamp进行API call形式的模型性能评估:

4.1.2 核心功能

1. 断点重试机制:

自动检测已完成样本,跳过重复评测; 支持评测中断后无缝续接; 智能文件路径管理

2. 多格式数据集支持:

详细的对话记录和工具调用结果; 奖励分数统计和分析报告; 模型性能分析报告; 断点重试支持的结果文件

数据后处理工具用于对evaluator输出的jsonl文件进行灵活的过滤和转换,支持将评估结果转换为可用于训练的数据格式。

核心特性:

可插拔过滤器: 支持添加多个过滤函数,筛选符合条件的样本; 灵活转换: 支持一对一或一对多的数据转换; 预定义函数: 提供常用的过滤和转换函数; 统计信息: 自动统计处理过程中的数据变化

主要应用场景:

从评估结果中筛选高质量样本用于训练; 提取特定分数范围的数据; 将多轮对话展开为前缀集以支持多样化训练; 转换数据格式以适配训练流程

--filter-success: 只保留成功的样本; --min-score: 设置最小分数阈值(默认0.9); --max-score: 设置最大分数阈值(默认1.0); --data-source: 按数据源过滤; --expand-messages-prefixes: 将多轮对话展开为前缀集(重要:用于生成符合常见reasoning模型chat template策略的训练数据); --extract-training: 提取训练数据格式; --extract-messages: 只提取消息内容

4.3.3 命令行参数

4.3.4 编程接口

对于更复杂的数据处理需求,可以使用编程接口自定义过滤和转换逻辑:

本手册提供了创建自定义Bootcamp的完整指导。通过遵循这些步骤和最佳实践,您将能够成功构建一个高质量的专业领域Bootcamp系统。

如有任何问题或建议,请参考项目文档或联系开发团队。

🖊️ Citation

If you find this work helpful, please consider to star🌟 this repo and cite this paper. Thanks for your support!

Official implement on InternBootCamp

来源

InternLM 原创项目