第 1.7.5 节:组装状态、记忆与会话的作品集交付件
这一节把前面完成的材料收束成可展示、可复盘的交付件。完成本节后,你应该能够把状态、记忆与会话收束成作品集页面、验收证据和面试回答。
本节交付物与面试讲法
和作品集项目的关系
本章内容可以直接放进这些作品集项目:
- 智能客服 Agent(智能体)工作台:用状态字段和迁移表证明你能做多轮客服任务。
- RAG(检索增强生成)企业知识库问答系统:用会话摘要和状态控制知识库上下文。
- MCP(模型上下文协议)工具调用平台:用状态日志说明工具结果如何被追踪。
- 多智能体协作系统:用任务状态交接说明多 Agent 不会互相丢上下文。
面试时不要只说“我做了 memory(记忆)”。应该说清楚:我设计了哪些状态字段、如何恢复、如何停止、如何保护隐私、如何审计。
练习题
基础练习
用自己的话解释状态、会话和记忆的区别。要求结合客服退款场景说明。
项目练习
不用写代码。为“用户投诉并要求退款”的客服任务设计一张任务状态字段表,至少包含 current_step(当前步骤)、missing_fields(缺失字段)、used_tools(已用工具)、risk_level(风险等级)、approval_required(需要审批)和 stop_reason(停止原因)。
挑战任务
设计一个会话恢复流程:用户昨天提交退款投诉,但没有提供订单号;今天回来补充订单号。说明系统如何找到旧会话、如何确认是否继续旧任务、如何更新状态、如何进入查订单工具。
面试题和推荐回答
1. Agent(智能体)为什么需要状态?
推荐回答:因为真实任务通常是多轮、多步骤的。状态记录当前步骤、已知事实、缺失信息、工具结果、失败次数和停止原因。没有状态,Agent 只能依赖聊天历史,容易重复追问、忘记工具结果或无法恢复。
2. 状态和聊天记录有什么区别?
推荐回答:聊天记录是原始对话,状态是从对话和工具结果中提炼出的任务事实。工程上不应该把全部聊天都塞给模型,而应该用状态摘要和必要历史构造上下文。
3. 会话和长期记忆有什么区别?
推荐回答:会话服务于当前多轮交互,通常有过期时间;长期记忆跨会话保存,只能保存有明确价值、权限和生命周期的信息。订单状态这类业务事实不应该放进长期记忆。
4. 如何避免长期记忆泄露隐私?
推荐回答:先限制可保存的信息类型,再定义写入条件、访问权限、过期时间、删除机制和审计日志。敏感信息、凭据、资金状态和未核实事实不进入长期记忆。
5. Agent(智能体)的停止条件包括哪些?
推荐回答:包括任务完成、需要用户补充信息、需要人工审批、失败次数达到上限、工具不可用、输出校验失败、用户问题超范围等。停止条件要写进状态和日志,不能只靠模型自由判断。
6. 工具结果应该如何进入状态?
推荐回答:工具结果不应原样全部塞进上下文,而应保存结构化摘要、来源 trace_id(追踪编号)、是否成功、错误原因和下一步影响。敏感字段要过滤。
7. 如何处理用户中断后回来继续?
推荐回答:读取 session_id(会话编号)、session_status(会话状态)和 current_step(当前步骤),向用户确认是否继续旧任务;确认后用状态摘要恢复,而不是让模型猜历史。
8. 状态不一致怎么办?
推荐回答:状态迁移要有规则校验。例如缺订单号不能直接进入退款审批。如果发现当前步骤和工具结果矛盾,应进入异常状态,记录日志并转人工。
9. 为什么不能把长期记忆当业务数据库?
推荐回答:长期记忆可能过期、不完整或缺少权限控制。订单、退款、工单这类业务事实必须以业务系统为准,记忆只能保存偏好、摘要或经过确认的非敏感信息。
10. LangGraph(智能体状态图框架)和本章有什么关系?
推荐回答:本章讲的是状态字段、状态迁移和恢复策略;LangGraph(智能体状态图框架)可以把这些迁移实现成状态图。先有清晰状态设计,再选框架实现。
11. 面试官问“记忆是不是就是把历史放进向量库”,怎么回答?
推荐回答:不是。向量库只是可能的存储方式。记忆的核心是治理:什么能记、为什么记、谁能读、保存多久、怎么删除、如何避免污染上下文。
12. 怎么验收状态管理做得好不好?
推荐回答:用多轮样例验收。比如缺订单号后补充、工具失败后重试、用户中断后恢复、高风险请求转人工、重复提交不重复建单。验收时看状态字段、日志和最终行为是否一致。
本章交付物
交付物 1:系统流程图
读者应该能画出客服问题从用户输入、读取会话、更新状态、调用工具、等待审批到完成或转人工的完整流程。
交付物 2:字段契约表
至少完成三类字段:
| 类型 | 必备内容 |
|---|---|
| 会话字段 | session_id(会话编号)、user_id(用户编号)、channel(渠道)、session_status(会话状态)、session_summary(会话摘要)。 |
| 任务状态字段 | task_id(任务编号)、intent(意图)、risk_level(风险等级)、current_step(当前步骤)、missing_fields(缺失字段)、used_tools(已用工具)、stop_reason(停止原因)。 |
| 记忆字段 | memory_type(记忆类型)、owner_scope(归属范围)、source_trace_id(来源追踪编号)、expires_at(过期时间)、access_policy(访问策略)。 |
交付物 3:失败与兜底表
至少覆盖上下文膨胀、重复追问、工具结果丢失、状态不一致、记忆泄露、用户中断、重试失控和高风险自动推进。
交付物 4:面试讲法
1 分钟讲法:
我在客服 Agent 项目里不会把“记忆”简单理解成保存聊天历史。我会把多轮任务拆成会话状态、任务状态和长期记忆三层。会话状态解决当前窗口的连续性,任务状态记录当前步骤、缺失字段、工具结果和停止原因,长期记忆只保存有明确权限和生命周期的信息。这样系统能从用户补充信息、工具失败或人工审批中恢复,也能通过状态变更日志复盘每一步为什么发生。
小结
Agent 要进入真实业务,必须能处理多轮、多步骤、工具结果、人工确认和失败恢复。状态、会话和记忆不是附加功能,而是让 Agent 可控、可验收、可面试表达的核心工程能力。
本章的重点不是让模型“记住更多”,而是让系统“记得正确、记得必要、记得可控”。下一节会继续把状态、记忆和会话整理成上下文包,说明每次模型调用到底应该看到什么。