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