Agent 状态基础 📅 2026/8/18 12:23:40 很多人第一次接触 Agent 时会把它理解成“一个会自动调用大模型的程序”。这个理解可以作为起点但还缺少一个很重要的部分Agent 在完成一个任务的过程中需要知道自己已经做了什么以及下一步准备做什么。保存这些信息的数据就是状态State。状态是理解 Agent 的一个非常基础的概念。后面的 Memory、工作流、任务恢复、多 Agent 等很多技术都会建立在它上面。一、核心概念1. Agent 状态先看一个非常简单的例子。假设用户对一个旅行 Agent 说帮我查询深圳周末天气再根据天气推荐一个活动。Agent 可能依次完成三个步骤先理解用户需求然后调用天气工具最后根据天气结果生成活动建议。执行过程中程序实际上需要保存一些信息用户问题深圳周末适合做什么 当前步骤已经查询完天气 天气结果周六晴25℃ 最终答案还没有生成这些信息合在一起就可以理解成这个任务当前的 State。一个 Agent 可能保存当前运行节点、已经生成的计划、工具调用结果以及下一步动作。可以把它想成玩游戏时的“当前进度”。游戏需要知道角色在哪张地图、剩余多少血量、已经拿到了哪些装备。Agent 同样需要知道当前任务进行到了哪里以及前面的步骤得到了什么结果。因此最简单的理解就是State Agent 当前完成任务所需要保存的临时进度。二、运行过程1. 状态在任务中怎样变化假设现在有一个非常简单的 Agent用户提问 ↓ 查询天气 ↓ 生成建议 ↓ 返回结果任务刚开始时State 可能只有用户问题question 深圳周末适合做什么 weather null answer null这里的null可以简单理解成“当前还没有值”。天气查询结束以后状态发生变化question 深圳周末适合做什么 weather 晴25℃ answer null最后模型生成建议question 深圳周末适合做什么 weather 晴25℃ answer 适合进行户外活动因此Agent 的执行过程可以理解成执行一步任务 → 得到新结果 → 更新 State → 根据新的 State 决定下一步。这已经是很多 Agent 工作流最基础的思想。三、Java 表达1. 一个最简单的状态对象Java 中可以直接用一个普通类保存这些信息// 这个类专门保存一次 Agent 任务当前的状态。 public class AgentState { // 保存用户最开始提出的问题。 private String question; // 保存天气工具返回的结果。 // 如果还没有调用天气工具这里可以暂时为 null。 private String weather; // 保存最终生成的回答。 // 在任务完成之前这里同样可以为空。 private String answer; // 构造方法。 // new AgentState(深圳周末适合做什么) 时会调用这里。 public AgentState(String question) { // this.question 表示当前对象自己的 question 字段。 // 右边的 question 是构造方法接收到的参数。 this.question question; } // 设置天气查询结果。 public void setWeather(String weather) { // 把工具查询到的天气写入当前状态。 this.weather weather; } // 设置最终回答。 public void setAnswer(String answer) { // 把模型生成的最终答案写入状态。 this.answer answer; } // 读取天气结果。 public String getWeather() { // return 表示把这个值返回给调用者。 return weather; } }真实框架中的 State 会复杂很多但基础思想没有发生变化。例如程序先创建// 创建一次新的 Agent 任务状态。 // 此时只有用户问题。 AgentState state new AgentState(深圳周末适合做什么);天气工具执行后// 假设天气工具已经返回结果。 // 把结果写入当前任务状态。 state.setWeather(晴25℃);接下来模型就可以读取天气结果// getWeather() 会得到前面保存的“晴25℃”。 // 模型可以根据这个结果继续生成活动建议。 String weather state.getWeather();这里没有使用任何复杂 Agent 框架但已经表达出了 State 最核心的作用【状态管理】让任务后面的步骤能够使用前面步骤产生的数据。四、State 与 Memory初学时很容易把 State 和 Memory 混在一起。两者可以先用一个非常简单的标准区分。State 更关注这一次任务现在进行到哪里Memory 更关注Agent 以前记住了什么例如State 这次正在查询深圳天气。 Memory 这个用户平时喜欢户外运动。天气查询完成以后这次任务可能结束State 就没有必要长期保留。用户长期喜欢户外运动则可能在下一次对话中仍然有价值所以更适合进入 Memory。原稿中也采用了类似区分State 描述当前任务进度Memory 保存系统需要长期记住的信息。初学阶段先记住这一层区别已经足够。五、面试表达如果面试官问Agent 中的 State 是什么可以用下面这段话回答Agent State 是一次任务执行过程中保存的当前信息例如用户输入、当前执行步骤、工具调用结果和中间输出。Agent 每完成一步就可以更新 State后面的步骤再根据新的 State 继续执行。它的作用类似任务进度让多个步骤之间能够共享信息。State 通常关注当前任务而 Memory 更偏向跨任务长期保存的信息。这段回答已经足够应对基础面试。如果继续追问Java 里面怎样表示 State可以回答最简单可以使用一个普通 Java 对象把用户输入、中间结果和当前步骤作为字段保存【question process result answer】。使用 LangGraph、Spring AI Alibaba 等框架时框架会进一步帮助管理这些状态在不同节点之间的传递。六、工程思想State 背后最值得记住的一个思想是复杂任务不要只依赖方法内部的临时变量要把任务进行到哪里显式表达出来。普通的三五行程序可以从上往下执行完成。Agent 任务可能包含模型、工具、检索和人工操作步骤越来越多以后把关键数据集中保存为 State会让程序更容易理解。这个思想也可以迁移到订单处理、审批流程和批处理任务。只要一个业务需要经过多个步骤就可以思考当前任务进行到哪里已经得到哪些结果下一步需要哪些数据这就是状态设计最基础的价值。七、来源LangGraph Persistencehttps://docs.langchain.com/oss/python/langgraph/persistence原稿中的 State、Memory 与 Checkpoint 说明可见附件相关部分。