news 2026/10/6 1:48:53

InternLM 智能体实战指南:基于 Lagent 与 ReAct 框架构建 InternLM2.5-Chat 工具调用智能体

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
InternLM 智能体实战指南:基于 Lagent 与 ReAct 框架构建 InternLM2.5-Chat 工具调用智能体
  • 大模型
  • 人工智能
  • 基础模型
  • AI Agent

【免费下载链接】InternLM

Official release of InternLM series (InternLM, InternLM2, InternLM2.5, InternLM3).

项目地址:https://gitcode.com/gh_mirrors/in/InternLM
点击查看免费下载

本文是基于官方仓库中 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/LMDeployPipelineLLM 后端分别封装 HuggingFace Transformers 与 LMDeploy 两种推理引擎
Internlm2AgentAgent 主体承载 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-7Bw/45.1
InternLM2-Chat-20Bw/51.2
InternLM2.5-7B-Chatw/63.0
gpt-4-0125-previeww/o64.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 定义为依据):

参数默认值作用
--backendlmdeploy推理引擎,可选lmdeploy或hf
--model_pathinternlm/internlm2-chat-7b模型路径或 HuggingFace 模型标识
--tp1张量并行数(LMDeploy 的 TurbomindEngineConfig 配置项)
--temperature0.1采样温度
--top_p0.8Top-P 采样阈值
--top_k40Top-K 采样参数
--max_turn5Agent 与环境的最大交互轮数
--batch_size100Agent 推理批大小
--max_new_tokens512单次生成的最大 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_eval

5.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的组件哲学,也把"工具调用智能体"从单次演示推向可复现的基准评测。

六、常见问题与使用要点小结

  1. HuggingFace 模型跑不起来?确认执行了pip install -e .[all](或pip install -r requirements.txt),HF 后端依赖全套组件。
  2. Google 搜索报错?GoogleSearch(api_key=...)需要真实的 SERPER API Key,请替换示例中的占位符;没有搜索 Key 时,可仅保留PythonInterpreter作为动作。
  3. 多轮工具调用卡死或超时?关注--max_turn(默认 5)与--time_out等运行期约束;在 streaming_inference.py 中还可通过--stop_words追加<|action_end|>等结束符控制生成边界。
  4. 复现 MATH 结果时注意命令一致性:README 示例中--temperature=1.0、--top_k=1为解码配置,与脚本默认值(0.1/40)不同,复现时请按文档命令原样传入。
  5. 文件已存在时的行为:脚本检测到--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).

项目地址:https://gitcode.com/gh_mirrors/in/InternLM
点击查看免费下载

相关推荐

上一篇:Redux Store架构设计与实现原理
下一篇:Cypress:现代Web测试的革命性工具

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 1:46:59

OpCore Simplify 指南:自动化 OpenCore EFI 生成与硬件兼容性配置

OpCore Simplify 指南&#xff1a;自动化 OpenCore EFI 生成与硬件兼容性配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify 是一款…

作者头像 李华
网站建设 2026/10/6 1:45:33

晶闸管从原理到实战:PN结、触发与可控整流全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:45:15

VSCode搭建C/C++开发环境:从MinGW配置到多文件工程调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:44:18

汇川SV660N伺服驱动器接线实战:从CN1到CN3完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:44:08

嵌入式DMA原理与实战:从寄存器配置到实时数据流优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华