当前位置: 首页 > news >正文

10. Harness裁剪+Checkpointer续跑,Agent运行底座这样配

配套动画视频在:《10. Harness裁剪+Checkpointer续跑,Agent运行底座这样配》,源代码在《评论区置顶》。

大模型自己只会「想」和「说」,真正干活还得有人给它安排工具、约束行为、必要时再派帮手——这套围绕 Agent 转起来的运行环境,就叫 Harness,你可以把它想成 Agent 的工作台。这一节做两件事:把 Harness 裁到当前主流程需要的部分,再用 Checkpointer 让多轮对话能续上。

[图片]

先导入依赖。Harness 配置要用到 HarnessProfile、register_harness_profile;裁剪 TodoList 要用到 TodoListMiddleware;Checkpointer 则需要 MemorySaver:

from deepagents import create_deep_agent, HarnessProfile, register_harness_profile, GeneralPurposeSubagentProfile
from langchain.agents.middleware import TodoListMiddleware
from langgraph.checkpoint.memory import MemorySaver

接着注册一份 Harness 配置:去掉 task、去掉 TodoList 中间件、关掉通用子代理,让 Agent 只走当前这条主流程:

register_harness_profile("openai", HarnessProfile(excluded_tools=frozenset({"task"}),excluded_middleware=frozenset({TodoListMiddleware}),general_purpose_subagent=GeneralPurposeSubagentProfile(enabled=False),
))

创建 Agent 时再传入 checkpointer=MemorySaver(),多轮对话才能按 thread_id 接上:

return create_deep_agent(backend=LocalShellBackend(root_dir=os.getcwd(), virtual_mode=True, inherit_env=True),checkpointer=MemorySaver(),debug=True)

验证续跑时,先写好会话配置:thread_id 用来标识这一条对话线程,后面的 invoke 都传同一份 configurable,Checkpointer 才知道要把多轮对话记在同一条会话里。

第一次提问让 Agent 记住暗号,并加上 config 参数;第二次用同一个 thread_id 问刚才记住的暗号是什么。两次会话接得上,第二次应能答上来:

def main():agent = create_test_agent()cfg = {"configurable": {"thread_id": "checkpoint10"}}result = agent.invoke({"messages": [{"role": "user", "content": "请记住一个暗号:LAOCHEN。"
"只回复:已记住暗号。不要执行工具。"}]}, config=cfg)print(result["messages"][-1].content[0]["text"])result = agent.invoke({"messages": [{"role": "user", "content": "我刚才让你记住的暗号是什么?""只回答暗号本身,不要执行工具。"}]}, config=cfg)print(result["messages"][-1].content[0]["text"])

第二次能答出 LAOCHEN,说明 Checkpointer 已经把同一 thread_id 下的上下文续上了。Harness 裁干净、会话能续跑,Agent 的运行底座就算配到位了。

 配套动画视频在:《10. Harness裁剪+Checkpointer续跑,Agent运行底座这样配》,源代码在《评论区置顶》。

http://www.jsqmd.com/news/1362298/

相关文章:

  • 基于 YOLO 的交通标志目标检测系统2(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • 行李箱批发定制源头工厂怎么选?2026高口碑实力厂盘点,按需匹配不踩坑 - 互联网科技品牌测评
  • 非现场执法治超系统口碑之选,广州聚杰以全栈自研技术成为政企推荐之选 - 品牌速递
  • 如何在移动设备上运行Kokoro:轻量级TTS的移动端适配终极指南
  • 知页简历怎么写
  • GetQzonehistory:三步实现QQ空间历史数据完整备份的终极方案
  • 2026,我在内蒙古等你:一份写给陌生人的“导游家谱” - 纯玩旅游分享
  • 实时音视频传输为何首选UDP?深入解析协议差异与工程实践
  • B2B销售和B2C销售有什么本质区别?林芳老师深度解析 - 外贸圈集团
  • 抢抓AI营销新赛道机遇:2026西安GEO/SEO优化行业趋势及本地化服务解析 - U渠道
  • 从零搭建本地AI编程助手:ClaudeCode/CodeX集成DeepSeek API实战指南
  • AI模型安全配置实战:从Meta事件看API密钥管理与沙箱防护
  • 从密集令牌到稀疏内存:MovieChat如何实现24GB显卡上的超长视频理解?
  • AI绘图提示词工程:UI设计师必备的精准控图与高效生成指南
  • AI模型部署安全配置实战:从网络隔离到密钥管理的全流程避坑指南
  • AI模型安全部署实战:从沙箱原理到容器化安全加固
  • Python实现标签化角色成长模拟系统:从状态机到事件驱动设计
  • HTTP协议全解析:从核心概念到实战应用
  • [学习笔记] 公平组合博弈全家桶:从 SG 本质到经典模型
  • 从龙虾事件看流量聚合:用户心理、算法机制与内容生态的共振
  • sentry-elixir Oban集成实战:任务调度错误监控与Cron检查
  • JimuChatBI 重磅发布 v1.0.0:首款免费开源对话式 Chat2BI 智能数据分析产品
  • 2026年靠谱箱包定制源头厂家甄选指南 全品类头部厂领衔避坑选型 - 互联网科技品牌测评
  • 资源受限下高并发Web服务性能优化实战:从瓶颈定位到架构调优
  • CIMPro+Blender+Unity数字孪生项目全流程实战:从建模到交互部署
  • Fusion未来路线图:即将推出的令人兴奋的新功能
  • 实时音视频为何首选UDP?深度解析TCP与UDP的协议差异与工程权衡
  • 游戏角色标签系统设计:从概念到Python代码实现
  • 【Bug已解决】Flux-family attention: flash-attn and other backends fail in an autocast context 解决方案
  • 从零配置Codex:本地Ollama与云端DeepSeek模型集成实战