ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

InternLM2.5-Chat Agent 实战:用 Lagent 构建代码解释器智能体并在 MATH 上进行推理与评估

InternLM2.5-Chat Agent 实战:用 Lagent 构建代码解释器智能体并在 MATH 上进行推理与评估 大模型人工智能基础模型AI Agent【免费下载链接】InternLMOfficial release of InternLM series (InternLM, InternLM2, InternLM2.5, InternLM3).项目地址https://gitcode.com/gh_mirrors/in/InternLM点击查看免费下载本指南以 agent/README.md 为核心系统讲解如何基于 InternLM2.5-Chat 强大的代码解释器与工具调用能力使用 Lagent 框架构建智能体Agent并在 MATH 数学基准上完成端到端的推理与自动化评估。读完本文你将掌握依赖环境的搭建、ReAct 智能体的构建方法、streaming_inference.py全部命令行参数的语义以及推理结果 jsonl 文件的结构与二次评估的完整流程。背景InternLM2.5-Chat 的 Agent 能力InternLM2.5-Chat 于 2024 年 6 月 30 日开源在代码解释器code interpreter和通用工具调用方面的能力得到进一步提升。它具备更强、更具泛化性的指令理解、工具筛选与结果反思reflection能力可以更可靠地支持复杂智能体的搭建支持对工具进行有效的多轮调用从而完成较复杂的任务。在配合代码解释器的条件下InternLM2.5-Chat 在 MATH 基准上可以达到与 GPT-4 相仿的水平基于在数理和工具方面强大的基础能力它还提供了实用的数据分析能力。这与 model_cards/internlm2.5_7b.md 中关于 InternLM2.5-Chat 的描述相互印证其通过监督微调SFT和在线 RLHF 对齐在指令遵循、聊天体验和函数调用function calling方面表现更佳被推荐用于下游应用。数学代码解释器上的评测结果以下是 InternLM2.5-Chat 在 MATH 测试集上使用数学代码解释器Tool-Integrated的评测结果模型是否集成工具MATHInternLM2-Chat-7Bw/45.1InternLM2-Chat-20Bw/51.2InternLM2.5-7B-Chatw/63.0gpt-4-0125-previeww/o64.2可以看到同为 7B 量级InternLM2.5-7B-Chat 相比上一代 InternLM2-Chat-7B 提升了近 18 个百分点体现了 Agent 范式 代码解释器对数学推理能力的大幅增益。需要说明的是表中的 gpt-4-0125-preview 未集成工具仅作为参考基线。准备工作安装依赖仓库的 agent/requirements.txt 集中列出了运行 Agent 推理与评测所需的全部依赖pip install -r requirements.txt该文件的关键依赖及其作用如下lagent githttps://github.com/InternLM/lagentmain核心 Agent 框架直接从 Lagent 仓库 main 分支安装lmdeploy0.2.2LMDeploy 推理引擎后端用于高效的流式推理与张量并行部署datasets用于加载 MATH、GSM8K 等 HuggingFace 数据集jsonlines读写 jsonl 格式的推理结果文件sympy1.12用于对模型输出的数学表达式做符号化简与等价性判定pebble基于进程池的并发库评估阶段用于并行计算得分numpy、tqdm数值运算与进度条展示antlr4-python3-runtime4.11.0、einopsLMDeploy 及模型运行时的配套依赖。如果你希望直接复用文档中的 ReAct 示例代码还需要自行安装streamlit网页 Demo 用以及 Lagent 对 HuggingFace 后端的可选依赖见下文。用 Lagent 构建 InternLM2.5-Chat 智能体agent/lagent.md 给出了 Lagent 的基本用法。Lagent 是一个轻量级、开源的基于大语言模型的智能体框架支持快速将一个大语言模型转变为多种类型的智能体并提供了一些典型工具如搜索引擎、Python 解释器为模型赋能。安装 Lagent通过 pip 安装推荐pip install lagent如果你希望修改框架源码也可以从源码安装git clone https://github.com/InternLM/lagent.git cd lagent pip install -e .注意若需要运行 HuggingFace 模型HFTransformer请先执行pip install -e .[all]安装完整依赖。构建一个 ReAct 智能体下面的示例演示了如何用 InternLM2.5-Chat 构建一个同时具备搜索引擎和 Python 解释器能力的 ReAct 智能体# 导入 lagent 库中必要的模块与类 from lagent.agents import ReAct from lagent.actions import ActionExecutor, GoogleSearch, PythonInterpreter from lagent.llms import HFTransformer # 初始化基于 HFTransformer 的大语言模型并指定模型名称 llm HFTransformer(internlm/internlm2_5-7b-chat) # 初始化 Google 搜索工具并传入你的 API Key search_tool GoogleSearch(api_keyYour SERPER_API_KEY) # 初始化 Python 解释器工具 python_interpreter PythonInterpreter() # 通过配置 ReAct agent 创建聊天机器人 chatbot ReAct( llmllm, # 传入大语言模型实例 action_executorActionExecutor( actions[search_tool, python_interpreter] # 指定聊天机器人可执行的动作 ), ) # 向聊天机器人提出一个 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$该示例清晰展示了 Lagent 的三层组合方式llm负责生成推理与决策、ActionExecutor统一调度工具、actions列表声明可用工具集合。模型内部以 ReActReasoning Acting循环的方式交替输出自然语言推理和工具调用指令。运行 ReAct 网页 DemoLagent 还提供了一个基于 Streamlit 的网页版交互 Demo可方便地在浏览器中体验智能体对话# 需要先安装 streamlit # pip install streamlit streamlit run examples/react_web_demo.pystreaming_inference.py全参数解析agent/streaming_inference.py 是本仓库的核心推理与评估脚本。其逻辑源于 Microsoft 的 ToRA 项目脚本头部有版权声明通过 Lagent 的Internlm2Agent驱动模型在 MATH 测试集上逐步推理 编写并执行 Python 代码来解题。脚本通过argparse定义了以下参数定义见 参数解析入口参数默认值说明--backendlmdeploy使用的推理框架可选lmdeploy或hfHuggingFace Transformers--model_pathinternlm/internlm2-chat-7b模型路径或 HuggingFace 模型标识符--output_path必填推理结果保存路径必须是jsonl文件--batch_size100Agent 推理的批大小脚本按此切分 MATH 测试集分批处理--max_turn5智能体与环境之间最大交互轮数即推理-调用工具-拿到结果的循环次数上限--tp1张量并行Tensor Parallelism数在 LMDeploy 后端下可能需要调整--temperature0.1下一个 token 预测的温度参数--top_p0.8Top-P 采样概率阈值--top_k40Top-K 采样候选数--stop_words[\|action_end\|, \|im_end\|]停止词列表遇到这些 token 即停止生成可多次追加--max_new_tokens512单次生成的最大新 token 数--do_infer/--no-do_inferTrue是否启动模型推理已准备好结果文件时可关闭BooleanOptionalAction需 Python 3.8--do_evalFalse是否对推理结果进行评估--overwriteFalse是否覆盖已存在的结果文件源码级说明这些采样参数temperature、top_p、top_k、stop_words、max_new_tokens会在init_agent中被透传给底层模型实例而batch_size、max_turn则分别控制数据集的分批处理规模和 Agent 的单题最大交互轮数直接决定推理耗时与解题成功率之间的权衡。--stop_words使用actionappend意味着可重复传入多个停止词。在 MATH 测试集上推理并评估完整流程推理 评估运行以下脚本即可在 MATH 测试集上执行推理并在结束后自动评估python streaming_inference.py \ --backendlmdeploy \ # 对于 HuggingFace 模型使用 hf --model_pathinternlm/internlm2_5-7b-chat \ --tp1 \ --temperature1.0 \ --top_k1 \ --output_pathmath_lmdeploy.jsonl \ --do_eval注意--top_k1与--temperature1.0组合时生成接近贪心解码每次只取概率最高 token有利于评测的可复现性。内部执行流程从数据加载到结果落盘从 预测主流程 可以看到脚本内部按以下步骤工作加载lighteval/MATH数据集的test分片对每条样本做预处理记录idx将problem复制为query并从官方solution中通过正则提取标准答案gt例如提取\boxed{...}中的内容通过init_agent构建Internlm2Agent实例批式调用agent.batch_chat解题把每一步的steps包含 language 推理、tool 调用、environment 返回写入 jsonl 文件并从最后一步 language 内容中提取pred每批处理结束后调用agent._interpreter_executor.actions[IPythonInteractiveManager].reset()重置解释器环境避免状态串扰任何异常都会被捕获并记录到该样本的error字段保证整个测试集不会因单题失败而中断。关键源码Agent 与后端的初始化init_agent见 agent/streaming_inference.py#L507-L535展示了两种后端的构建方式lmdeploy 后端使用LMDeployPipeline配合INTERNLM2_META元模板与TurbomindEngineConfig(tptp)配置张量并行hf 后端使用HFTransformer同样绑定INTERNLM2_META。无论哪种后端最终都封装为Internlm2Agent其protocolInternlm2Protocol(meta_promptNone, interpreter_promptDEFAULT_PROMPT)中DEFAULT_PROMPT就是引导模型逐步推理并编写 Jupyter 代码解题、最终用\boxed{}输出 LaTeX 结果的系统提示定义于 agent/streaming_inference.py#L48-L54interpreter_executor则挂载了支持多进程并发的IPythonInteractiveManager(max_workers200)作为代码执行环境。输出文件格式jsonl 逐行结构--output_path指定的jsonl文件每一行是一条样本的完整推理记录形如{ problem: The midpoint of the line segment between $(x,y)$ and $(2,4)$ is $(-7,0)$. Find $(x,y)$., level: Level 3, type: Algebra, solution: Applying the midpoint formula gives $$\\left(\\frac{2x}{2},\\frac{4y}{2}\\right)(-7,0).$$Solving $\\frac{2x}{2}-7$ for $x$ and $\\frac{4y}{2} 0$ for $y$ we find $(x,y)$ to be $\\boxed{(-16,-4)}$., idx: 306, query: The midpoint of the line segment between $(x,y)$ and $(2,4)$ is $(-7,0)$. Find $(x,y)$., gt: (-16,-4), pred: [ (-16,-4) ], steps: [ { role: language, content: To find the coordinates of the point $(x,y)$, we can use the midpoint formula. The midpoint $M$ of a line segment with endpoints $(x_1, y_1)$ and $(x_2, y_2)$ is given by:\n\n\\[M \\left(\\frac{x_1 x_2}{2}, \\frac{y_1 y_2}{2}\\right)\\]\n\nGiven that the midpoint is $(-7,0)$ and one endpoint is $(2,4)$, we can set up equations to solve for $x$ and $y$.\n\nLets start by setting up the equations based on the midpoint formula:\n\n\\[\\frac{x 2}{2} -7\\]\n\\[\\frac{y 4}{2} 0\\]\n\nNow, lets solve these equations using Python to find the values of $x$ and $y$. }, { role: tool, content: { name: AsyncIPythonInteractiveManager, parameters: { command: python\nfrom sympy import symbols, Eq, solve\n\n# Define symbols\nx, y symbols(x y)\n\n# Define equations based on the midpoint formula\neq1 Eq((x 2)/2, -7)\neq2 Eq((y 4)/2, 0)\n\n# Solve equations\nsolution solve((eq1, eq2), (x, y))\n\nsolution\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)$. Therefore, the solution to the problem is:\n\n\\[\\boxed{(-16, -4)}\\] } ], error: null }这段记录完整还原了一次典型的工具增强推理链language 步骤模型用自然语言阐述解题思路tool 步骤模型以 JSON 形式请求调用interpreter命令体是一段调用 sympy 求解方程的 Python 代码environment 步骤代码解释器实际执行后返回{x: -16, y: -4}language 步骤模型基于执行结果组织最终回答并用\boxed{(-16,-4)}输出标准答案。这也印证了前面的结论InternLM2.5-Chat 的数学能力提升关键并不在于死记答案而在于它能够自主生成可执行的代码、读取解释器的执行结果并据此推理反思。跳过推理、直接评估如果已经生成了上述格式的结果文件无需重新推理直接评估即可python streaming_inference.py \ --output_pathmath_lmdeploy.jsonl \ --no-do_infer \ --do_eval从 主入口逻辑 可以看到两个值得注意的细节若结果文件已存在且未指定--overwrite脚本会自动把do_infer置为False并提示如需覆盖请加--overwrite标志若同时指定了推理与评估脚本会通过subprocess以--no-do_infer --do_eval重新调用自身来完成评估保证两个阶段职责分离。评估原理数值相等与符号相等评估环节调用math_equal见 agent/streaming_inference.py#L372-L451其判定两答案相等的核心逻辑值得展开数值相等若预测与标准答案都能转为浮点数则先做isclose相对误差比较默认容差1e-4若开启include_percentage还会把标准答案的 1/100、1 倍、100 倍三种形态都纳入比较兼容百分比表述差异文本规范化相等对字符串做去括号、去空白等规范化后比较符号相等分别尝试parse_latex解析 LaTeX与parse_expr解析 Python 表达式然后通过 sympy 的simplify(a - b) 0判断两个表达式是否恒等若简化失败再退化为数值近似比较rel_tol1e-3超时保护symbolic_equal在超时选项开启时会放入独立进程执行并限制 1 秒超时见call_with_timeout防止个别表达式化简卡死主流程。评估输出会汇总Num samples、Num scores、Sum scores、Timeout samples、Empty samples、Mean score并按type如 Algebra、Geometry 等输出分题型得分。补充范式PALProgram-Aided Language Models仓库中的 agent/pal_inference.py 提供了另一种让模型写代码解题的经典范式——PAL。与 Agent 的推理 工具调用 反思不同PAL 由模型一次性生成完整的solution()函数代码再交给 Python 解释器执行得到答案更适合 GSM8K 这类直接求解的题目python pal_inference.py \ model \ out_dir \ [--dataset dataset] \ [--max_length length] \ [--top_p threshold] \ [--eoh end token] \ [--eoa end token] \ [--eos end token] \ [--temperature temp] \ [--time_out time] \ [--verbose, -v] \ [--append, -a]其中--max_length默认 2048--top_p默认 0.8--temperature默认 1.0--time_out默认 100 秒执行代码的超时上限。其在 GSM8K 上对 InternLM-Chat-7B 的带工具/不带工具评测对比为不使用工具 34.5使用工具 39.2展示了程序化求解对数学推理的稳定增益。完整参数说明可参考 agent/pal_inference_zh-CN.md。小结与建议围绕 agent/README.md 的技术主线本文完整覆盖了InternLM2.5-Chat 的 Agent 与代码解释器能力背景、Lagent 框架的安装与 ReAct 智能体构建、streaming_inference.py的每个命令行参数、MATH 推理与评估的完整执行链路以及 jsonl 结果文件的结构解析。几个实战要点总结如下后端选择追求吞吐与多卡部署优先lmdeploy需要原生 Transformers 生态兼容时选择hf采样配置评测场景建议使用确定性较高的采样参数如--top_k1以获得可复现结果探索性场景再放开温度断点续跑结果文件已存在时脚本默认跳过推理可用--overwrite强制重新推理避免重复耗时结果复用jsonl 文件包含完整 steps既是评测数据也是分析模型工具调用行为的第一手素材。后续可进一步结合 model_cards 中的各模型卡片尝试在 InternLM2.5-20B-Chat 等更大规模模型上复现评测观察规模与工具调用能力的关系也可以基于同样的 Agent 框架为智能体扩展更多自定义工具以覆盖数据分析、网页检索等更复杂的任务场景。赞分享大模型人工智能基础模型AI Agent【免费下载链接】InternLMOfficial release of InternLM series (InternLM, InternLM2, InternLM2.5, InternLM3).项目地址https://gitcode.com/gh_mirrors/in/InternLM点击查看免费下载相关推荐AI-Researcher 数学推理评测指南在 MATH-500 上运行 DeepSeek-Chat 推理与自动评分AI Researcher 数学推理评测指南在 MATH 500 上运行 DeepSeek Chat 推理与自动评分 本指南面向希望复现 AI Researc人工智能大模型AI Agent自主智能体深度研究Agent 工作流科研AI 评测Lagent 智能体框架接入 InternLM-Chat-7B-V1.1基于 ReAct 与 Python 解释器插件的数学问题求解实战Lagent 智能体框架接入 InternLM Chat 7B V1.1基于 ReAct 与 Python 解释器插件的数学问题求解实战 《开源大模型食用指南大模型人工智能教程本地部署微调Agent ArenaLLM智能体对战平台与评估体系Agent ArenaLLM智能体对战平台与评估体系 Agent Arena是一个先进的LLM智能体对战平台采用现代化的前后端分离架构集成了实时对战、评估人工智能大模型模型评测工具调用AI AgentAgent 评测RAG微调上一篇三步轻松下载B站视频免费开源工具永久保存任何想看的视频内容下一篇英雄联盟国服换肤终极教程5分钟学会R3nzSkin免费解锁全皮肤创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表