Microsoft Agent Lightning是一种基于强化学习的开源AI Agent训练框架,其核心设计理念在于将运行逻辑与学习逻辑解耦,从而能够灵活且高效地集成至现有的智能体中。本文介绍了其工作原理、使用步骤,包括架构、连接、调试、训练等内容,并进一步分析了其典型应用场景。
AI Agent正在改变人们使用人工智能的方式。依托大型语言模型(LLM),它们能够回答问题、执行指令,并与各类数据源或API进行交互。然而,它们在处理复杂的多步骤任务时仍会出错,而人工修复这些问题通常既耗时又费力。
微软公司最近推出的Agent Lightning框架使这一过程变得更加简单。该框架将智能体(Agent)的运行机制与学习过程分离开来,使得智能体能够在实际交互中持续自我优化。用户可基于现有的聊天工具或自动化系统进行部署,并借助强化学习技术,让智能体在执行任务过程中逐步提升智能化水平。
什么是Microsoft Agent Lightning?
Agent Lightning是微软公司推出的一种开源框架,旨在通过强化学习(RL)来训练和改进AI Agent。其优势在于,它可以无缝封装任何使用现有框架(如LangChain、OpenAI Agents SDK、AutoGen、CrewAI、LangGraph或自定义Python)开发的智能体,并且几乎无需更改代码。
从技术角度来看,该框架支持对智能体中嵌入的LLM进行强化学习训练,而无需改变智能体的核心逻辑。其基本思想是将智能体的执行过程视为一个马尔可夫决策过程——“在每一步,智能体都处于特定状态,执行某个行动(LLM输出),并在这些行动在成功完成任务时获得相应的奖励。”
Agent Lightning框架由Python SDK与训练服务器两部分组成。用户只需将智能体逻辑封装进LitAgent类或兼容接口,并定义输出结果(奖励)评估机制,即可启动训练。该框架负责采集交互经验,将其输入至分层强化学习算法(LightningRL)中以完成信用分配,进而更新智能体模型或提示模板。在训练结束后,用户即可获得一个经过强化、性能显著提升的智能体。
为什么Agent Lightning很重要?
传统的智能体框架(如LangChain、LangGraph、CrewAI或AutoGen)能够创建可以逐步推理或使用工具的AI Agent,但它们没有训练模块。这些智能体只是基于静态的模型参数或提示词来运行模型,这意味着它们无法从所经历的情况中学习。现实世界中的挑战具有一定程度的复杂性,需要一定程度的适应性。Agent Lightning解决了这一问题,将学习引入了智能体流程中。
Agent Lightning通过实现一个自动优化管道来解决这一预期差距,它利用强化学习的能力,根据反馈信号更新智能体的策略。简而言之,智能体可以从自己的成功和失败中学习,从而可能产生更可靠、更值得信赖的结果。
Agent Lightning的工作原理
在服务器-客户端架构中,Agent Lightning利用强化学习算法来生成任务并优化建议,例如调整提示或更新模型权重。任务由Runner执行,它收集智能体的每个行动和最终奖励,并将这些数据返回给算法。这种反馈机制使得智能体能够随着时间的推移,利用“自动中间奖励”功能来进一步微调其提示或权重,该功能可为成功的中间行动提供即时的小幅奖励以加速学习过程。
Agent Lightning本质上将Agent操作视为一个循环:状态是其当前上下文;行动是它的下一步,奖励是任务成功的指标。通过设计“状态-行动-奖励”的转换,Agent Lightning最终可以为任何类型的智能体提供训练支持。
Agent Lightning采用了解耦化设计,将智能体的学习与执行相分离。在这一架构中,服务器负责模型更新与优化,客户端则负责执行实际任务并报告结果。这种任务分工使智能体在高效完成具体任务的同时,能持续通过强化学习优化其性能。
注:Agent Lightning使用分层强化学习系统LightningRL,能够分解复杂的多步骤智能体行为进行训练。LightningRL还支持多智能体、复杂工具使用和延迟反馈。
使用微软Agent Lightning训练智能体的分步指南
本节将介绍如何使用Agent Lightning训练一个SQL智能体,并展示如何集成其核心组件:基于LangGraph构建的SQL智能体、VERL强化学习框架,以及用于控制训练与调试流程的Trainer。
本文提供了一个可直接运行的命令行示例(examples/spider/train_sql_agent.py),但重点在于帮助开发者深入理解系统架构与工作流程,从而能够自信地将Agent Lightning应用于实际业务场景。
智能体架构
Agent-Lightning可以与AutoGen、CrewAI、LangGraph、OpenAI Agents SDK以及其他自定义Python逻辑等框架无缝协作。在这个例子中,使用LangGraph构建了一个循环工作流,模拟数据分析师迭代编写和修复SQL查询的过程:
这个工作流包含四个功能阶段:
- write_query:获取用户的问题,根据文本问题生成初始SQL查询。
- execute_query:在目标数据库中执行生成的查询。
- check_query:使用验证提示(CHECK_QUERY_PROMPT)验证结果。
- rewrite_query:如果有问题,则重写查询。
循环继续,直到查询验证或达到最大迭代计数(max_turns)。强化学习优化了write_query和rewrite_query阶段。
构建LangGraph智能体
为保证代码的模块化与可维护性,建议使用独立的构建器函数来定义 LangGraph 工作流,具体实现如下所示:
python
复制
from langgraph import StateGraph def build_langgraph_sql_agent( database_path: str, openai_base_url: str, model: str, sampling_parameters: dict, max_turns: int, truncate_length: int ): # Step 1: Define the LangGraph workflow builder = StateGraph() # Step 2: Add agent nodes for each step builder.add_node(“write_query”) builder.add_node(“execute_query”) builder.add_node(“check_query”) builder.add_node(“rewrite_query”) # Step 3: Connect the workflow edges builder.add_edge(“__start__”, “write_query”) builder.add_edge(“write_query”, “execute_query”) builder.add_edge(“execute_query”, “check_query”) builder.add_edge(“check_query”, “rewrite_query”) builder.add_edge(“rewrite_query”, “__end__”) # Step 4: Compile the graph return builder.compile().graph()
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
这样做可以将LangGraph逻辑与Agent Lightning的未来更新相分离,从而提高代码的可读性和可维护性。
连接LangGraph与Agent Lightning
LitSQLAgent类作为LangGraph与Agent Lightning之间的桥梁。它继承自agl.LitAgent,因此Runner可以为每次迭代管理共享资源(如LLM)。
python
复制
import agentlightning as agl class LitSQLAgent(agl.LitAgent[dict]): def __init__(self, max_turns: int, truncate_length: int): super().__init__() self.max_turns = max_turns self.truncate_length = truncate_length def rollout(self, task: dict, resources: agl.NamedResources, rollout: agl.Rollout) -> float: # Step 1: Load shared LLM resource llm: agl.LLM = resources[“main_llm”] # Step 2: Build LangGraph agent dynamically agent = build_langgraph_sql_agent( database_path=”sqlite:///” + task[“db_id”], openai_base_url=llm.get_base_url(rollout.rollout_id, rollout.attempt.attempt_id), model=llm.model, sampling_parameters=llm.sampling_parameters, max_turns=self.max_turns, truncate_length=self.truncate_length, ) # Step 3: Invoke agent result = agent.invoke({“question”: task[“question”]}, { “callbacks”: [self.tracer.get_langchain_handler()], “recursion_limit”: 100, }) # Step 4: Evaluate query to generate reward reward = evaluate_query( result[“query”], task[“ground_truth”], task[“db_path”], raise_on_error=False ) return reward
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
注:“main_llm”资源键是智能体与VERL之间的一种协作约定,用于在服务上下文中为每次任务提供正确的端点访问。
奖励信号和评估机制
evaluate_query函数定义了用于强化训练的奖励机制。Spider数据集上的每个任务都包含一个自然语言问题、一个数据库模式和一个基准SQL查询。奖励机制将模型生成的SQL查询与参考SQL查询进行比较:
python
复制
def evaluate_query(predicted_query, ground_truth_query, db_path, raise_on_error=False): result_pred = run_sql(predicted_query, db_path) result_true = run_sql(ground_truth_query, db_path) return 1.0 if result_pred == result_true else 0.0
- 1.
- 2.
- 3.
- 4.
注:在训练过程中,智能体绝不能看到真实查询,否则会导致信息泄露。
配置VERL以进行强化学习
VERL是智能体的强化学习后端。其配置如同定义Python字典一样简单,用户需要输入算法、模型、rollout参数和训练选项。以下是一个基础配置示例:
python
复制
verl_config = { “algorithm”: {“adv_estimator”: “grpo”, “use_kl_in_reward”: False}, “data”: { “train_batch_size”: 32, “max_prompt_length”: 4096, “max_response_length”: 2048, }, “actor_rollout_ref”: { “rollout”: {“name”: “vllm”, “n”: 4, “multi_turn”: {“format”: “hermes”}}, “actor”: {“ppo_mini_batch_size”: 32, “optim”: {“lr”: 1e-6}}, “model”: {“path”: “Qwen/Qwen2.5-Coder-1.5B-Instruct”}, }, “trainer”: { “n_gpus_per_node”: 1, “val_before_train”: True, “test_freq”: 32, “save_freq”: 64, “total_epochs”: 2, }, }
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
这类似于可以在CLI中运行的命令:
python
复制
python3 -m verl.trainer.main_ppo \ algorithm.adv_estimator=grpo \ data.train_batch_size=32 \ actor_rollout_ref.model.path=Qwen/Qwen2.5-Coder-1.5B-Instruct
- 1.
- 2.
- 3.
- 4.
使用Trainer编排训练过程
Trainer是连接智能体、强化学习算法、数据集和分布式Runner的高级协调模块。
python
复制
import pandas as pd import agentlightning as agl # Step 1: Initialize agent and algorithm agent = LitSQLAgent(max_turns=3, truncate_length=1024) algorithm = agl.VERL(verl_config) # Step 2: Initialize Trainer trainer = agl.Trainer( n_runners=10, algorithm=algorithm, adapter={“agent_match”: “write|rewrite”} # Optimize both query stages ) # Step 3: Load dataset train_data = pd.read_parquet(“data/train_spider.parquet”).to_dict(“records”) val_data = pd.read_parquet(“data/test_dev_500.parquet”).to_dict(“records”) # Step 4: Train trainer.fit(agent, train_dataset=train_data, val_dataset=val_data)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
幕后发生的过程如下:
- VERL启动一个OpenAI兼容的代理,以便无需实现OpenAI请求即可分发工作。
- Trainer创建10个Runner以并发执行。
- 每个Runner调用rollout方法,收集轨迹信息并将奖励发送回以更新策略。
使用trainer.dev()调试智能体
在开始完整的强化学习(RL)训练之前,建议对整个流程进行试运行,以检查连接情况和轨迹信息。
python
复制
trainer = agl.Trainer( n_workers=1, initial_resources={ “main_llm”: agl.LLM( endpoint=os.environ[“OPENAI_API_BASE”], model=”gpt-4.1-nano”, sampling_parameters={“temperature”: 0.7}, ) }, ) # Load a small subset for dry-run import pandas as pd dev_data = pd.read_parquet(“data/test_dev_500.parquet”).to_dict(“records”)[:10] # Run dry-run mode trainer.dev(agent, dev_dataset=dev_data) 该步骤确保在投入大量GPU资源进行长时间训练之前,整个LangGraph控制流、数据库连接及奖励逻辑均已正确配置并验证通过。
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
运行完整示例
要设置环境,需安装依赖项(即使用pip install -r requirements.txt命令),然后运行完整的训练脚本:
python
复制
# Step 1: Install dependencies pip install “agentlightning[verl]” langchain pandas gdown # Step 2: Download Spider dataset cd examples/spider gdown –fuzzy https://drive.google.com/file/d/1oi9J1jZP9TyM35L85CL3qeGWl2jqlnL6/view unzip -q spider-data.zip -d data && rm spider-data.zip # Step 3: Launch training python train_sql_agent.py qwen # Qwen-2.5-Coder-1.5B # or python train_sql_agent.py llama # LLaMA 3.2 1B
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
如果使用的是托管在Hugging Face平台上的模型,那么务必按照以下步骤导访问令牌:
python
复制
export HF_TOKEN=”your_huggingface_token”
- 1.
在没有VERL情况下的调试
如果希望在没有强化学习的情况下验证代理逻辑,可以使用内置的调试助手:
python
复制
export OPENAI_API_BASE=”https://api.openai.com/v1″ export OPENAI_API_KEY=”your_api_key_here” cd examples/spider python sql_agent.py
- 1.
- 2.
- 3.
- 4.
这将允许用户使用当前LLM端点运行SQL Agent,以确认查询已执行且控制流按预期工作。
评估结果
注:在单个80GB GPU上运行python train_sql_agent.py qwen通常会在大约12小时后完成。你将看到训练获得的奖励持续增加,这表明智能体的SQL生成过程随着时间的推移而不断改进。因此,由于资源限制,在这里使用了官方文档中展示的结果。
Agent Lightning的适用场景
在实际应用中,假设用户有一个基于LLM的智能体,它在某个应用程序(如客户支持聊天机器人、自动化编码助手等)中扮演着重要角色,并且希望对其进行优化,那么Agent Lightning是一个理想的候选方案。该框架已在SQL查询生成等任务中得到验证。经过引入强化学习或提示优化机制,Agent Lightning能够持续迭代并优化已有智能体,从而生成更准确、更可靠的输出结果。
- 如果希望AI Agent通过试错进行学习,那么应该使用Agent Lightning。它专为具有明确成功或失败信号的多步骤逻辑场景而设计。
- 例如,Agent Lightning可以通过观察执行反馈来学习,从而改进生成数据库查询的机器人。该模型也适用于聊天机器人、虚拟助手、游戏智能体以及使用工具或API的通用智能体。
- Agent Lightning框架与智能体无关,并支持灵活部署。它可以在标准个人电脑(PC0或服务器上按需训练,因此可以在必要时在笔记本电脑或云平台上进行模型训练。
结论
Microsoft Agent Lightning是一种用于提升AI Agent智能水平的新机制。其核心理念在于,智能体不应是固定的代码对象,而应该能够通过持续的训练循环从经验中学习。通过将训练过程与执行过程解耦,它可以在无需更改任何代码的情况下优化任何智能体工作流。
这意味着,可以通过使用Agent Lightning的强化学习机制轻松增强智能体工作流程,无论它是定制智能体、LangChain机器人、CrewAI、LangGraph、AutoGen还是更具体的OpenAI SDK agent,。实际上,智能体正从其自身的数据中变得更加智能。
常见问题解答
Q1.什么是Microsoft Agent Lightning?
A:它是微软的一个开源框架,通过强化学习来训练AI Agent,而无需改变其核心逻辑或工作流。
Q2. Agent Lightning如何改进AI Agent?
A:它允许智能体通过强化学习从实际任务反馈中学习,从而不断优化提示或模型权重以提高性能。
Q3. Agent Lightning能否与现有的智能体的框架协同工作?
A:是的,它可以与LangChain、AutoGen、CrewAI、LangGraph以及自定义Python智能体轻松集成,并且几乎无需修改代码。
原文标题:Train Your AI Agents Like a Pro with Microsoft Agent Lightning (Full Setup & Workflow) ,作者:Vipin Vashisth
文章来自:51CTO
![]()
