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运行底座这样配》,源代码在《评论区置顶》

posted @ 2026-08-09 23:01  老陈说编程  阅读(15)  评论(2)    收藏  举报