smolagents 记忆管理实战:回放、动态修改与分步执行 Agent 的完整指南
人工智能AI AgentAgent 框架工具调用代码智能体MCP ClientsAgent 沙箱【免费下载链接】smolagents smolagents: a barebones library for agents that think in code.项目地址https://gitcode.com/gh_mirrors/smo/smolagents点击查看免费下载记忆是 Agent 的核心组件之一。一个 Agent 可以简单定义为工具 提示词 记忆它不仅拥有调用工具的能力更重要的是具备对过往步骤的记忆能够追溯完整的规划、执行与错误历史。本篇指南围绕 docs/source/zh/tutorials/memory.md 展开结合 smolagents 源码深入讲解如何回放 Agent 的运行记录、如何在运行过程中动态读写与修改记忆以及如何按步step by step手动驱动 Agent——读完你可以在自己的多步 Agent 应用中实现记忆审查、token 优化与长任务断点执行。记忆在 Agent 中的角色从结构看起在动手之前先理解 smolagents 中记忆的底层模型。Agent 的记忆由 src/smolagents/memory.py 中的AgentMemory类承载它包含两个核心属性system_prompt一个SystemPromptStep对象保存系统提示词steps一个列表依次存放 Agent 执行过程中产生的各类步骤对象。所有步骤都继承自MemoryStep基类当前仓库中主要有以下几种步骤类型步骤类字段要点含义TaskSteptask、task_images一个新的任务及其可选图片ActionStepstep_number、timing、model_output、tool_calls、code_action、observations、observations_images、error、token_usage、is_final_answer等Agent 思考、行动、观察结果的一个完整执行步PlanningStepplan、model_input_messages、model_output_message、timing、token_usage规划步骤用于生成/更新计划SystemPromptStepsystem_prompt系统提示词步骤FinalAnswerStepoutput最终答案步骤从 src/smolagents/agents.py 的_run_streamL540-L611可以看到Agent 每完成一步包括规划步骤都会把对应的PlanningStep或ActionStep追加到agent.memory.steps并调用_finalize_step写入时间戳与触发回调。而在每次向模型发起请求之前write_memory_to_messagesL758-L770会把整个记忆转换成消息列表喂给 LLM——这就是记忆决定上下文的直接体现。由于 src/smolagents/init.py 中from .memory import *你可以直接通过from smolagents import ActionStep, TaskStep, ...导入这些步骤类型。回放 Agent 的记忆审查一次运行运行一个 Agent 之后最基础的需求是回顾它到底做了什么。smolagents 提供了两种方式插装instrumentation可视化界面通过 OpenTelemetry 标准将运行过程输出到可视化监控平台支持对特定步骤进行缩放详见 插装指南inspect_runs。agent.replay()命令行回放直接在控制台以结构化文本重放整段记忆。使用 agent.replay()在 Agent 完成运行之后只需一行代码即可回放最近一次运行from smolagents import InferenceClientModel, CodeAgent agent CodeAgent(tools[], modelInferenceClientModel(), verbosity_level0) result agent.run(Whats the 20th Fibonacci number?) # 回放最近一次运行 agent.replay()从源码看agent.replay(detailedFalse)src/smolagents/agents.py L859-L866实际上代理给AgentMemory.replay(logger, detailed)src/smolagents/memory.py L248-L271其行为要点依次打印系统提示词、每个TaskStep、每个ActionStep含步骤号、模型输出以及PlanningStep含计划内容detailedTrue时会额外打印每一步的model_input_messages模型实际接收到的完整消息可精确复现每一步的输入但日志长度会指数级膨胀源码注释明确警告仅用于调试。导出整段代码与步骤数据除回放外AgentMemory还提供两个实用的审查方法return_full_code()src/smolagents/memory.py L273-L277把记忆里所有ActionStep的code_action拼接成一个完整脚本返回方便检查 Agent 实际执行的全部代码对应测试见 tests/test_memory.py 的test_return_all_code_actions。get_full_steps()/get_succinct_steps()前者返回包含model_input_messages的完整步骤字典列表后者剔除模型输入消息、仅保留精简表示适合序列化存档或传给他处。动态修改 Agent 的记忆许多高级应用场景需要对记忆进行动态读写例如注入另一套上下文、清理过时的中间产物以节省 token或在执行中途修正某一步的错误。直接访问记忆对象agent.memory暴露了全部记忆你可以像操作普通 Python 对象一样读取它from smolagents import ActionStep system_prompt_step agent.memory.system_prompt print(The system prompt given to the agent was:) print(system_prompt_step.system_prompt) task_step agent.memory.steps[0] print(\n\nThe first task step was:) print(task_step.task) for step in agent.memory.steps: if isinstance(step, ActionStep): if step.error is not None: print(f\nStep {step.step_number} got this error:\n{step.error}\n) else: print(f\nStep {step.step_number} got these observations:\n{step.observations}\n)注意agent.memory.steps[0]通常是TaskStep由run()在启动时追加ActionStep从第 1 步开始。还可以用agent.memory.get_full_steps()拿到完整的步骤字典数据例如传给监控系统或序列化保存。记忆不仅可读也可写直接对steps列表、某个步骤的字段如observations、observations_images赋值即可。因为后续模型请求会通过write_memory_to_messages重新读取记忆所以任何修改都会立即影响 Agent 的下一步行为。通过步骤回调step callbacks动态修改记忆更强大、更自动化的方式是步骤回调。回调函数可以直接在参数中拿到agent对象因此能够访问任意记忆步骤并按需修改。一个经典场景监控网页浏览 Agent 每一步的屏幕截图只保留最新截图、删除旧步骤的图片从而节省 token 消耗。原文档给出了精炼版示例而仓库中的完整可运行实现位于 src/smolagents/vision_web_browser.pyL66-L84完整版如下import helium import PIL.Image from io import BytesIO from time import sleep def save_screenshot(memory_step: ActionStep, agent: CodeAgent) - None: sleep(1.0) # 等待 JavaScript 动画完成后再截图 driver helium.get_driver() current_step memory_step.step_number if driver is not None: # 删除旧步骤的截图保持日志精简、节省 token for previous_memory_step in agent.memory.steps: if isinstance(previous_memory_step, ActionStep) and previous_memory_step.step_number current_step - 2: previous_memory_step.observations_images None png_bytes driver.get_screenshot_as_png() image PIL.Image.open(BytesIO(png_bytes)) print(fCaptured a browser screenshot: {image.size} pixels) memory_step.observations_images [image.copy()] # 必须 copy确保引用在步骤结束后仍有效 # 把当前 URL 一并写入观测 url_info fCurrent url: {driver.current_url} memory_step.observations ( url_info if memory_step.observations is None else memory_step.observations \n url_info )随后在初始化 Agent 时把回调函数传入step_callbacks参数CodeAgent( tools[WebSearchTool(), go_back, close_popups, search_item_ctrl_f], modelmodel, additional_authorized_imports[helium], step_callbacks[save_screenshot], max_steps20, verbosity_level2, )回调机制的源码原理step_callbacks的底层实现是 src/smolagents/memory.py 中的CallbackRegistry初始化逻辑位于 src/smolagents/agents.py 的_setup_step_callbacksL416-L434传入列表[callback1, callback2, ...]时全部注册到ActionStep上向后兼容传入字典{step_cls: callback}时可以针对TaskStep、PlanningStep等具体步骤类分别注册回调无论是否显式传入Monitor.update_metrics都会被默认注册到ActionStep上用于指标采集。回调在_finalize_stepL620-L623中通过self.step_callbacks.callback(memory_step, agentself)触发。CallbackRegistry.callback还做了签名兼容处理只接收一个参数的回调只拿到memory_step接收多个参数的回调则额外拿到agentself等关键字参数。分步运行 Agent手动驱动每一步某些场景下你希望完全掌控执行节奏——例如某个工具调用可能耗时数天、需要断点续跑或者你想在每一步之间更新记忆。smolagents 允许你逐步执行 Agentfrom smolagents import InferenceClientModel, CodeAgent, ActionStep, TaskStep agent CodeAgent(tools[], modelInferenceClientModel(), verbosity_level1) print(agent.memory.system_prompt) task What is the 20th Fibonacci number? # 你甚至可以在这里加载另一个 Agent 的记忆作为初始上下文 # agent.memory.steps previous_agent.memory.steps # 开启一个新任务 agent.memory.steps.append(TaskStep(tasktask, task_images[])) final_answer None step_number 1 while final_answer is None and step_number 10: memory_step ActionStep( step_numberstep_number, observations_images[], ) # 运行一步思考 - 行动 - 观察 final_answer agent.step(memory_step) agent.memory.steps.append(memory_step) step_number 1 # 每一步之后都可以随意修改记忆 # 例如更新刚刚完成的那一步 # agent.memory.steps[-1] ... print(The final answer is:, final_answer)关键点解读agent.step(memory_step)src/smolagents/agents.py L782-L787执行 ReAct 框架中的一步Agent 思考、行动、观察结果返回None表示这一步不是最终步返回最终答案则循环结束。手动构造ActionStep并传入step_number因为自动运行时这一步号由_run_stream内部维护手动模式下需要自己递增。手动追加TaskStep告诉 Agent 新任务已经开始这与run()内部行为一致见 L488。每步结束后你都能自由改写agent.memory.steps这是实现跨步骤记忆注入、长任务恢复执行的基础能力。注意你还需要手动维护循环上限示例中为 10与自动模式下的max_steps语义对应。该模式尤其适合工具调用耗时极长如数天的任务跑完一步即可保存记忆状态下次从断点继续。小结与进一步阅读回放agent.replay()一行回放整段记忆detailedTrue可查看每步模型输入仅限调试。审查agent.memory.system_prompt/agent.memory.steps直接读取get_full_steps()/get_succinct_steps()/return_full_code()导出结构化数据。动态修改直接改steps中的字段或通过step_callbacks在每步结束后自动清理/注入内容完整示例见 src/smolagents/vision_web_browser.py。分步运行agent.step(memory_step)手动驱动配合TaskStep/ActionStep手动追加实现断点续跑。若要更深入地验证这些行为可阅读 tests/test_memory.py——它覆盖了AgentMemory初始化、return_full_code()拼接逻辑、ActionStep.dict()与to_messages()的消息转换、以及各步骤类的 JSON 序列化等关键行为。如果你需要将运行过程输出到可视化监控平台OpenTelemetry / Phoenix / Langfuse请继续阅读 插装指南inspect_runs。赞分享人工智能AI AgentAgent 框架工具调用代码智能体MCP ClientsAgent 沙箱【免费下载链接】smolagents smolagents: a barebones library for agents that think in code.项目地址https://gitcode.com/gh_mirrors/smo/smolagents点击查看免费下载相关推荐smolagents 记忆管理完全指南回放、动态修改与逐步执行 Agentsmolagents 记忆管理完全指南回放、动态修改与逐步执行 Agent Agent 本质上由几个简单组件构成工具tools、提示词prompts人工智能AI AgentAgent 框架工具调用代码智能体MCP ClientsAgent 沙箱smolagents 智能体记忆管理实战重放、动态改写与逐步执行smolagents 智能体记忆管理实战重放、动态改写与逐步执行 smolagents 将智能体定义为“工具 提示词 记忆”的组合其中 记忆 me人工智能AI AgentAgent 框架工具调用代码智能体MCP ClientsAgent 沙箱Agno × SurrealDB 记忆管理实战从零实现 Agent 持久化记忆的完整指南Agno × SurrealDB 记忆管理实战从零实现 Agent 持久化记忆的完整指南 Agno原 Phidata将 SurrealDB 作为 Agen人工智能大模型AI AgentAgent 框架多智能体工具调用RAGAgent 工作流Agent 记忆创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

pandoc 中 RST 解释文本角色(Interpreted Text Roles)的往返转换原理与实战

pandoc 中 RST 解释文本角色(Interpreted Text Roles)的往返转换原理与实战

文档开发工具CLI 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 点击查看 免费下载 本文以 pandoc 仓库中的命令测试用例 test/command/3407.md 为核心,深入讲解 RST(reStructure…

2026/9/19 21:53:50 阅读更多 →
大模型概率生成原理:从softmax到温度采样,AI为何总在“猜”答案

大模型概率生成原理:从softmax到温度采样,AI为何总在“猜”答案

你有没有遇到过这样的场面:同一个问题,换个说法问AI,得到的答案可能截然相反,而它每次都用同样笃定的语气。很多人觉得这是AI在“装懂”,但从概率与信息论的角度看,这才是大模型的本来面目——它从来不是在…

2026/9/19 21:53:49 阅读更多 →
TiXL 图像颜色运算符 HSE 完全指南:用 HueShift 着色器实时调整色相、饱和度与曝光

TiXL 图像颜色运算符 HSE 完全指南:用 HueShift 着色器实时调整色相、饱和度与曝光

TiXL 图像颜色运算符 HSE 完全指南:用 HueShift 着色器实时调整色相、饱和度与曝光 【免费下载链接】t3 TiXL is an open source software to create realtime motion graphics. 项目地址: https://gitcode.com/GitHub_Trending/t3/t3 导读 HSE 是 TiXL&…

2026/9/19 21:53:49 阅读更多 →

最新新闻

PTO TPARTMIN 指令全解析:CANN pto-isa 中基于有效区域(valid region)的逐元素最小值选择

PTO TPARTMIN 指令全解析:CANN pto-isa 中基于有效区域(valid region)的逐元素最小值选择

PTO TPARTMIN 指令全解析:CANN pto-isa 中基于有效区域(valid region)的逐元素最小值选择 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-l…

2026/9/19 22:40:13 阅读更多 →
Python爬虫入门:Requests库HTTP请求与响应处理详解

Python爬虫入门:Requests库HTTP请求与响应处理详解

简介:这份完整版Python网络爬虫系列课程的第一讲,聚焦Requests库入门,面向零基础开发者,适合系统学习数据采集与信息提取技术。课件从HTTP请求动作切入,逐一说明构造请求、获取网页、提交表单等常见操作的区别&#xf…

2026/9/19 22:40:13 阅读更多 →
QMK Clueboard 66% 66_ansi 默认键位解析:QK_GESC 特殊键与三层按键布局设计

QMK Clueboard 66% 66_ansi 默认键位解析:QK_GESC 特殊键与三层按键布局设计

QMK Clueboard 66% 66_ansi 默认键位解析:QK_GESC 特殊键与三层按键布局设计 【免费下载链接】qmk_firmware Open-source keyboard firmware for Atmel AVR and Arm USB families 项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware 本文围绕 Q…

2026/9/19 22:40:13 阅读更多 →
基于Spring Boot与Vue的非遗数字化传承平台设计与开发

基于Spring Boot与Vue的非遗数字化传承平台设计与开发

1. 为什么要做非遗数字化这个选题先说我自己的结论:非遗类系统是计算机毕业设计里少有的“高分潜力股”。为什么?因为它天然具备三层价值——文化层面有社会意义,技术层面能覆盖主流前后端技术栈,应用层面有真实的使用场景。很多同…

2026/9/19 22:40:13 阅读更多 →
为什么blessed渲染这么快?深度解析CSR、BCE与damage buffer的屏幕优化技巧

为什么blessed渲染这么快?深度解析CSR、BCE与damage buffer的屏幕优化技巧

为什么blessed渲染这么快?深度解析CSR、BCE与damage buffer的屏幕优化技巧 【免费下载链接】blessed A high-level terminal interface library for node.js. 项目地址: https://gitcode.com/gh_mirrors/bl/blessed blessed 是一个专为 node.js 打造的高级终…

2026/9/19 22:40:13 阅读更多 →
ESP32 USB Host 方案全解析:Camera/Audio/4G 网络/存储/Hub 五大应用实战指南

ESP32 USB Host 方案全解析:Camera/Audio/4G 网络/存储/Hub 五大应用实战指南

ESP32 USB Host 方案全解析:Camera/Audio/4G 网络/存储/Hub 五大应用实战指南 【免费下载链接】esp-iot-solution Espressif IoT Library. IoT Device Drivers, Documentations and Solutions. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solutio…

2026/9/19 22:39:12 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →