Lagent 是一个用于构建基于大语言模型(LLM)智能体的轻量级框架,由 InternLM 团队开发并开源在 GitHub(https://github.com/InternLM/lagent),采用 Apache 2.0 许可证发布。其设计哲学受 PyTorch 启发,期望借鉴神经网络层的类比使工作流更清晰直观,用户只需以 Python 风格专注于创建层(layer)并定义层之间的消息传递,即可快速搭建多智能体应用。
主要能力与设计要点:
-
模型即智能体(Models as Agents):智能体之间使用 AgentMessage 进行通信。
-
记忆即状态(Memory as State):每次前向传播时,输入和输出消息都会被加入 Agent 的记忆中。这一操作在 call 而非 forward 中执行,官方资料以伪代码形式展示了该机制。
-
查看记忆的两种方式:资料中提及可检查记忆,但未展开具体代码内容。
-
清除记忆:可清除本会话(默认 session_id=0)的记忆。
-
自定义消息聚合(Custom Message Aggregation):底层会调用 DefaultAggregator 来组装并将 AgentMessage 转换为 OpenAI 消息格式。开发者可以实现一个能接收 few-shots 的简单聚合器。
-
灵活响应格式化(Flexible Response Formatting):在 AgentMessage 中,formatted 字段保留用于存储由 output_format 从模型输出解析出的信息。可使用工具解析器(tool parser)。
-
工具调用一致性(Consistency of Tool Calling):ActionExecutor 与 Agent 使用相同的通信数据结构,但要求输入 AgentMessage 的内容为包含以下字段的字典:name(工具名称,例如 'IPythonInterpreter'、'WebBrowser.search')、parameters(工具 API 的关键字参数,例如 {'command': 'import math;math.sqrt(2)'}、{'query': ['recent progress in AI']})。可以为消息转换注册自定义钩子。为方便使用,Lagent 提供了 InternLMActionProcessor,适配上述由 ToolParser 格式化的消息。
-
双接口(Dual Interfaces):几乎每个组件(LLM、动作、动作执行器等)都有对应的异步变体,标识符前缀为 'Async'。建议调试时使用同步智能体,大规模推理时使用异步智能体,以充分利用空闲的 CPU 和 GPU 资源。但需确保智能体内部一致性,即异步智能体应搭配异步 LLM 和驱动异步工具的异步动作执行器。除非必要,应尽量实现子类的 forward 而非 call;并且始终显式包含 session_id 参数,该参数用于在并发时隔离记忆、LLM 请求和工具调用(例如维护多个独立的 IPython 环境)。
示例应用(资料中列出):
- 通过编程解决问题的数学智能体(Math agents that solve problems by programming)。
- 多智能体:通过自我精炼提升写作质量的异步博客智能体(原始 AutoGen 示例)。
- 多智能体工作流:执行信息检索、数据收集和图表绘制(原始 LangGraph 示例)。
安装方式:从源码安装(Install from source),资料未提供具体安装命令。
适用场景:需要以 Python 方式构建 LLM 智能体、多智能体协作、工具调用、异步大规模推理的研究与开发场景。
限制:资料未说明具体平台兼容性、依赖版本、收费方式或性能指标;部分机制(如查看记忆的两种方式、清除记忆的具体调用)仅提及存在但未给出完整代码;安装命令未在资料中提供。