- 大模型
- 人工智能
- 基础模型
- AI Agent
【免费下载链接】InternLM
Official release of InternLM series (InternLM, InternLM2, InternLM2.5, InternLM3).
本文是基于官方仓库中 agent/lagent.md 文档展开的实战型技术指南,核心聚焦于 InternLM 生态中轻量级智能体框架 Lagent 的安装、ReAct 智能体的构建与使用,并结合 agent/README.md 中基于 InternLM2.5-Chat 与代码解释器的 MATH 数学推理案例进行纵深剖析。读完本文,你将掌握:用两行 pip 命令接入 Lagent、启动 ReAct 网页演示、用 HFTransformer + GoogleSearch + PythonInterpreter 组装一个能调用外部工具解决数学问题的 Agent,并理解其底层调用链与批量化推理评估的工程实践。
一、Lagent 是什么:为 InternLM 系列模型赋能的轻量级 Agent 框架
Lagent 是一个轻量级、开源的基于大语言模型(LLM)的智能体(agent)框架,其核心目标只有一个:让用户能够快速地将一个大语言模型转变成多种类型的智能体,同时提供一些典型工具为 LLM 赋能。所谓"工具赋能",指的是让模型不再只能"空想"答案,而是能够通过调用搜索引擎、Python 解释器等外部工具,先检索信息、执行计算,再基于结果给出可靠回答。
在本仓库中,Lagent 的定位十分明确:它是 InternLM2.5-Chat 模型构建智能体应用的官方推荐方案。agent/README.md 明确指出,InternLM2.5-Chat 在代码解释和通用工具调用方面的能力得到进一步提升——基于更强和更具泛化性的指令理解、工具筛选与结果反思等能力,新版模型可以更可靠地支持复杂智能体的搭建,支持对工具进行有效的多轮调用,完成较复杂的任务;而 Lagent 正是承载这些能力的运行时框架。
从源码视角看,agent/streaming_inference.py 展示了 Lagent 提供给上层应用的完整核心 API:
from lagent import (INTERNLM2_META, ActionExecutor, HFTransformer, Internlm2Agent, Internlm2Protocol, LMDeployPipeline, IPythonInteractiveManager)这七个符号基本勾勒出了 Lagent 的分层架构:
| 组件 | 角色 | 说明 |
|---|---|---|
HFTransformer/LMDeployPipeline | LLM 后端 | 分别封装 HuggingFace Transformers 与 LMDeploy 两种推理引擎 |
Internlm2Agent | Agent 主体 | 承载 ReAct 思考-行动循环的高层智能体类 |
Internlm2Protocol/INTERNLM2_META | 协议与模板 | 定义 InternLM2 系列的对话元模板(meta template)与提示词协议 |
ActionExecutor | 动作执行器 | 管理并调度智能体可用的全部工具/动作 |
IPythonInteractiveManager | 典型工具 | 交互式 Python 解释器管理,即"代码解释器" |
与其他模块的分工关系
Lagent 文档本身是"怎么用"的入口,而仓库中还提供了与之配套的深度实践:agent/README.md(InternLM2.5-Chat + 代码解释器的 MATH 推理与评估)、agent/pal_inference.md(PAL 范式下的代码生成推理)以及 chat/README.md(纯对话推理)。它们的递进关系是:先会单轮对话(Transformers/ModelScope),再会工具调用(Lagent),最后能做批量评测(MATH),这正是本文后续要沿用的主线。
二、安装 Lagent:pip 一键安装与源码编译两种方式
2.1 pip 安装(推荐)
pip install lagent这是最快捷的接入方式,适合绝大多数场景。
2.2 从源码编译安装
如果你想修改框架代码(例如自定义工具、调试 Agent 内部逻辑),建议从源码构建:
git clone https://github.com/InternLM/lagent.git cd lagent pip install -e .pip install -e .以 editable(可编辑)模式安装,本地对源码的修改会即时生效,无需重新安装。
2.3 按需安装完整依赖
原文档特别强调了一个关键前提:如果计划运行 HuggingFace 模型(例如使用HFTransformer加载internlm/internlm2_5-7b-chat),请先运行pip install -e .[all]安装全部依赖。这一要求与 agent/requirements.txt 中的依赖清单相互印证——该文件固定了lmdeploy>=0.2.2、sympy==1.12、datasets、jsonlines、tqdm等版本,并直接以lagent @ git+https://github.com/InternLM/lagent@main的方式引入 Lagent 主分支,说明本项目内的智能体实践对 Lagent 版本有明确要求。此外,后续跑网页 demo 前还需安装 streamlit:
pip install streamlit三、运行 ReAct 网页 Demo:一条命令开启可视化对话
Lagent 官方仓库自带基于 Streamlit 的 ReAct 交互式网页样例,一条命令即可启动:
# 需要确保已经安装 streamlit 包 # pip install streamlit streamlit run examples/react_web_demo.py启动后浏览器会打开 Web UI,你可以直接在网页端与 ReAct 智能体对话,观察模型"思考 → 调用工具 → 根据工具结果继续推理"的完整过程。该 demo 是了解 ReAct 循环行为、调试工具参数最直观的入口,也是 Lagent 仓库 examples 目录(examples/react_web_demo.py)提供的官方示例。
四、用 InternLM2.5-Chat 构建一个 ReAct 智能体
这是整篇文档的核心实战环节:用约 20 行 Python 代码,把internlm/internlm2_5-7b-chat变成一个具备"搜索 + 编程"双工具能力的智能体。
4.1 完整代码与逐行解析
# 从 lagent 库中导入所需模块和类 from lagent.agents import ReAct from lagent.actions import ActionExecutor, GoogleSearch, PythonInterpreter from lagent.llms import HFTransformer # 初始化基于 HFTransformer 的语言模型(llm)并提供模型名称 llm = HFTransformer('internlm/internlm2_5-7b-chat') # 初始化 Google 搜索工具并提供你的 API key search_tool = GoogleSearch(api_key='Your SERPER_API_KEY') # 初始化 Python 解释器工具 python_interpreter = PythonInterpreter() # 通过配置 ReAct 智能体创建 chatbot chatbot = ReAct( llm=llm, # 提供语言模型实例 action_executor=ActionExecutor( actions=[search_tool, python_interpreter] # 指定 chatbot 可执行的动作 ), ) # 用 LaTeX 格式的数学问题询问智能体 response = chatbot.chat('若$z=-1+\sqrt{3}i$,则$\frac{z}{{z\overline{z}-1}}=\left(\ \ \right)$') # 打印智能体生成的回答 print(response.response) >>> $-\frac{1}{3}+\frac{\sqrt{3}}{3}i$4.2 三个核心组件的职责拆解
① 模型后端HFTransformer:它把 InternLM2.5-Chat 封装为可对话的 LLM 实例。'internlm/internlm2_5-7b-chat'是 HuggingFace 上的模型标识符,由于依赖 HuggingFace 生态,所以必须预先安装[all]依赖。与之对应的还有LMDeployPipeline后端(见下文 MATH 案例),两者可在 agent/streaming_inference.py 中按--backend参数切换。
② 工具与动作执行器ActionExecutor:它是 Lagent 的"工具中枢"。示例注册了两个典型工具:
GoogleSearch(api_key='Your SERPER_API_KEY'):网页搜索工具,需要配置 SERPER 平台的 API Key(将占位符替换为你自己的 Key);PythonInterpreter():Python 解释器,让模型可以写代码并执行,适合数学计算、数据分析等任务。
ActionExecutor负责接收模型发出的"动作指令",找到对应工具执行,并把执行结果(observation)反馈给模型。
③ 智能体主体ReAct:它把 LLM、工具集组织成完整的 ReAct 循环——模型交替输出 Thought(推理)与 Action(动作),工具返回 Observation(观察),如此往复直到模型认为可以给出 Final Answer。这也是该范式名称 ReAct(Reasoning + Acting)的由来。
4.3 实战效果:一次"程序化数学解题"
示例向智能体提出了一个纯符号的复数运算问题:若$z=-1+\sqrt{3}i$,求$\frac{z}{z\overline{z}-1}$。这类问题仅靠模型"心算"容易出错,但 ReAct 智能体可以调用PythonInterpreter写出代码精确计算,最终给出正确答案$-\frac{1}{3}+\frac{\sqrt{3}}{3}i$。
这正是 agent/README.md 所强调的 InternLM2.5-Chat 能力的落地形态:模型先把数学问题翻译成可执行的 Python 代码(借助 Python 解释器),执行后得到中间结果,再结合反思能力组织最终答案。
五、纵深实践:基于 Lagent 的 MATH 代码解释器推理与评估
在 agent/lagent.md 构建单智能体的基础上,仓库进一步提供了规模化实战:利用 Lagent 让 InternLM2.5-Chat 在 MATH 测试集上调用代码解释器逐题推理并自动评估。agent/README.md 给出了完整流程,且与 lagent.md 形成"单 agent 演示 → 批量推理"的进阶衔接。
5.1 为什么用代码解释器:MATH 基准的直观数据
agent/README.md 的对比表格(数据来源为官方文档)表明,集成工具(Tool-Integrated 标记为 w/)能显著提升数学推理能力:
| 模型 | 是否集成工具 | MATH |
|---|---|---|
| InternLM2-Chat-7B | w/ | 45.1 |
| InternLM2-Chat-20B | w/ | 51.2 |
| InternLM2.5-7B-Chat | w/ | 63.0 |
| gpt-4-0125-preview | w/o | 64.2 |
可以看到 InternLM2.5-7B-Chat 配合代码解释器达到 63.0,已非常接近未集成工具的 gpt-4-0125-preview(64.2)。这与 model_cards/internlm2.5_7b.md 中"更强的工具使用能力:指令理解、工具选择与反思"的描述一致,也是 Lagent 框架价值的最直接证明。
5.2 安装依赖与一键推理评估
首先安装 agent/requirements.txt 中列出的额外依赖:
pip install -r requirements.txt然后运行推理与评估(该命令会先推理、后自动发起评估子进程):
python streaming_inference.py \ --backend=lmdeploy \ # 使用 LMDeploy 引擎;若用 HuggingFace 模型则改为 hf --model_path=internlm/internlm2_5-7b-chat \ --tp=1 \ --temperature=1.0 \ --top_k=1 \ --output_path=math_lmdeploy.jsonl \ --do_eval关键参数说明(均以 agent/streaming_inference.py 中的 argparse 定义为依据):
| 参数 | 默认值 | 作用 |
|---|---|---|
--backend | lmdeploy | 推理引擎,可选lmdeploy或hf |
--model_path | internlm/internlm2-chat-7b | 模型路径或 HuggingFace 模型标识 |
--tp | 1 | 张量并行数(LMDeploy 的 TurbomindEngineConfig 配置项) |
--temperature | 0.1 | 采样温度 |
--top_p | 0.8 | Top-P 采样阈值 |
--top_k | 40 | Top-K 采样参数 |
--max_turn | 5 | Agent 与环境的最大交互轮数 |
--batch_size | 100 | Agent 推理批大小 |
--max_new_tokens | 512 | 单次生成的最大 token 数 |
--stop_words | ['<\|action_end\|>', '<\|im_end\|>'] | 停止词(可多次追加) |
--do_infer/--no-do_infer | 开启 | 是否启动模型推理阶段 |
--do_eval | 关闭 | 是否评估推理结果 |
--overwrite | 关闭 | 是否覆盖已存在的结果文件 |
5.3 推理结果格式与评估复用
--output_path指定的 jsonl 文件每行对应一道题的完整推理记录,包含题目(problem/query)、标准答案(gt)、模型预测(pred)以及分步轨迹(steps)。steps 中依次记录了语言推理(role: language)、工具调用(role: tool,内含AsyncIPythonInteractiveManager的 Python 代码)、环境返回(role: environment)三个关键环节,示例片段如下:
{ "steps": [ {"role": "language", "content": "To find the coordinates of the point $(x,y)$, we can use the midpoint formula. ..."}, {"role": "tool", "content": {"name": "AsyncIPythonInteractiveManager", "parameters": {"command": "```python\nfrom sympy import symbols, Eq, solve\n...\n```"}}, "name": "interpreter"}, {"role": "environment", "content": "{x: -16, y: -4}", "name": "interpreter"}, {"role": "language", "content": "After solving the equations, we find that the coordinates of the point $(x,y)$ are $(-16, -4)$. ..."} ], "error": null }这正是 ReAct 循环在真实工程中的完整留痕,可以直接对照 4.1 节中chatbot.chat()的行为理解其内部机制。
如果已经生成过该文件,可以跳过推理阶段直接评估:
python streaming_inference.py \ --output_path=math_lmdeploy.jsonl \ --no-do_infer \ --do_eval5.4 底层实现:Agent 初始化与评估逻辑
agent/streaming_inference.py 的init_agent()展示了与单 agent 示例同源的代码结构:
--backend=lmdeploy时,用LMDeployPipeline(path=..., model_name='internlm2-chat', meta_template=INTERNLM2_META, pipeline_cfg=dict(backend_config=TurbomindEngineConfig(tp=tp)))构造模型;--backend=hf时,退化为HFTransformer(path=..., meta_template=INTERNLM2_META);- 再以
Internlm2Agent+Internlm2Protocol(meta_prompt=None, interpreter_prompt=DEFAULT_PROMPT)组装 agent,并注册IPythonInteractiveManager(可并发 200 个 worker)作为唯一的代码解释器动作。
predict()中通过agent.batch_chat(batch['query'])批量驱动多轮 ReAct 交互,从最后一步语言输出中提取\boxed{...}结果;evaluate()则用math_equal()做数值相等(isclose,容差 1e-4)与 sympy 符号相等(simplify(a-b)==0)双重判定,并按题型(Algebra 等)输出分项得分。整个流程既复用了 lagent.md 中ReAct + ActionExecutor的组件哲学,也把"工具调用智能体"从单次演示推向可复现的基准评测。
六、常见问题与使用要点小结
- HuggingFace 模型跑不起来?确认执行了
pip install -e .[all](或pip install -r requirements.txt),HF 后端依赖全套组件。 - Google 搜索报错?
GoogleSearch(api_key=...)需要真实的 SERPER API Key,请替换示例中的占位符;没有搜索 Key 时,可仅保留PythonInterpreter作为动作。 - 多轮工具调用卡死或超时?关注
--max_turn(默认 5)与--time_out等运行期约束;在 streaming_inference.py 中还可通过--stop_words追加<|action_end|>等结束符控制生成边界。 - 复现 MATH 结果时注意命令一致性:README 示例中
--temperature=1.0、--top_k=1为解码配置,与脚本默认值(0.1/40)不同,复现时请按文档命令原样传入。 - 文件已存在时的行为:脚本检测到
--output_path已存在且未加--overwrite时会自动跳过推理,日志会提示你添加--overwrite。
七、总结:一条从"会对话"到"会使用工具"的清晰路径
从 agent/lagent.md 出发,本文完整覆盖了 Lagent 的安装、ReAct 网页 demo、以 InternLM2.5-Chat 为基座构建多工具智能体,并延伸至 agent/README.md 的 MATH 批量推理与评估。其底层脉络始终一致:InternLM2.5-Chat 提供指令理解、工具筛选与反思能力,Lagent 提供ReAct(智能体主体)、ActionExecutor(工具调度)与HFTransformer/LMDeployPipeline(推理后端)这些可组合的工程化组件。想继续深入,可以阅读 agent/streaming_inference.py 与 agent/pal_inference.py 的完整实现,或参考 Lagent 仓库 examples 目录中的更多用例,把这一套工具调用能力扩展到数据分析、信息检索等更复杂的任务场景。
- 大模型
- 人工智能
- 基础模型
- AI Agent
【免费下载链接】InternLM
Official release of InternLM series (InternLM, InternLM2, InternLM2.5, InternLM3).
相关推荐
用 Lagent 将 InternLM2.5-Chat 打造成 ReAct 智能体:安装、网页 Demo 与工具调用实战
用 Lagent 将 InternLM2.5 Chat 打造成 ReAct 智能体:安装、网页 Demo 与工具调用实战 Lagent 是一个轻量级、开源的基于
大模型人工智能基础模型AI AgentOptimism 单一代码仓库(Monorepo)指南:OP Stack 组件架构、Scoped Commits 规范与开发工作流
Optimism 单一代码仓库(Monorepo)指南:OP Stack 组件架构、Scoped Commits 规范与开发工作流 Optimism 是一个面向
大模型人工智能基础模型AI AgentLagent 智能体框架接入 InternLM-Chat-7B-V1.1:基于 ReAct 与 Python 解释器插件的数学问题求解实战
Lagent 智能体框架接入 InternLM Chat 7B V1.1:基于 ReAct 与 Python 解释器插件的数学问题求解实战 《开源大模型食用指南
大模型人工智能教程本地部署微调
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考