短期上下文
模型当前能看到的信息,通常随对话和上下文窗口变化。
Agent 要跨多轮持续工作,就不能每次都从零开始。状态记录当前任务做到了哪里,记忆保存跨任务可复用的信息。但记忆不是越多越好,企业 Agent 更需要结构化、可更新、可删除、可追溯的状态设计。
状态偏“当前任务”,记忆偏“长期复用”。这两个词很容易混,面试时要先区分边界。
模型当前能看到的信息,通常随对话和上下文窗口变化。
记录当前任务目标、进度、已知信息、阻塞和下一步。
跨会话保存的稳定事实、用户偏好、团队规范和历史决策。
控制哪些信息能写入、谁能读取、何时过期、如何删除。
Agent 状态管理是记录当前任务的目标、进度、事实、已查资料、待确认问题和下一步;长期记忆则保存跨任务可复用的信息。企业 Agent 不能盲目记住所有对话,而要做结构化、可删除、可审计、受权限控制的记忆和状态设计。
复杂任务经常跨多轮、跨天、跨多人协作。没有状态,Agent 容易重复查资料、忘记待确认问题、覆盖历史决定,或者把已否定的方案又拿出来。
用户第二天补充信息时,Agent 不知道昨天查过什么、哪些问题已确认、草稿到了哪个版本,只能重新开始。
Agent 读取任务状态,知道目标、已知事实、资料来源、open questions、当前草稿和下一步,能继续推进。
这三类信息的生命周期、存储方式和风险都不同。混在一起会造成上下文污染和隐私问题。
用户输入、当前资料片段、工具返回、中间推理材料。用完可以丢,不一定长期保存。
任务 ID、目标、进度、已确认事实、待办、阻塞、草稿版本、下一步。
用户偏好、团队规范、稳定业务规则、历史决策。必须有来源、权限和过期策略。
短期上下文回答“这轮能看到什么”,任务状态回答“这件事做到哪里”,长期记忆回答“以后还值得复用什么”。
结构化状态比一大段聊天历史更可靠。它能被查询、更新、校验、权限过滤和审计。
| 字段 | 说明 |
|---|---|
taskId |
任务唯一 ID,便于恢复和审计。 |
goal |
最终目标和验收标准。 |
knownFacts |
已确认事实,必须带来源或确认人。 |
sourcesChecked |
已查资料、版本、sourceId 和摘要。 |
openQuestions |
待用户、产品、研发确认的问题。 |
draftVersion |
当前草稿版本和变更摘要。 |
nextSteps |
下一步动作、负责人和阻塞原因。 |
{
"taskId": "PRD-2026-001",
"goal": "生成商品导入失败明细 PRD",
"status": "drafting",
"knownFacts": [
{
"fact": "现有接口只返回任务级失败统计",
"sourceId": "api-import-task-result-v3"
}
],
"sourcesChecked": ["product-import-prd-v2", "error-code-table-v4"],
"openQuestions": ["是否支持失败明细下载?"],
"draftVersion": "v0.3",
"nextSteps": ["确认失败策略", "补充验收标准"],
"updatedAt": "2026-06-12T15:00:00+08:00"
}
长期记忆一旦写错,会污染后续很多任务。企业系统里,写入长期记忆要比写入任务状态更谨慎。
长期记忆应该像数据库写入一样有规则:来源、确认、类型、权限、过期时间、更新策略都要明确。
shouldWriteMemory(candidate):
if candidate.isSensitive:
return false
if candidate.isTemporaryStatus:
return false
if not candidate.hasSource:
return false
if candidate.type in ["preference", "team_rule", "confirmed_decision"]:
return candidate.confirmedByUserOrSystem
return false
记忆不是刻在石头上。业务规则会变,用户偏好会变,权限会变。不能更新和删除的记忆会越来越危险。
同一事实有新版本时,要替换旧值并保留变更记录。
库存、订单、负责人、接口版本这类信息要设置有效期。
用户要求删除、权限变化或信息不再需要时,要真正清除或不可再用。
发现错误记忆后,要标记无效,避免后续检索继续命中。
长期记忆最好带 version、validFrom、validUntil、owner、sourceId 和 updatedAt。当新旧记忆冲突时,不要直接覆盖事实,要保留变更原因。
很多系统的记忆问题不是存不住,而是取出来太多、太旧、太不相关。检索记忆也要做相关性、权限和新鲜度过滤。
短期上下文用完可以丢,长期记忆会影响未来任务。它涉及用户隐私、企业数据、访问权限和合规风险。
密钥、账号、合同金额、个人隐私、未公开商业信息,不应进入长期记忆。
用户偏好和个人信息需要明确授权,并提供查看、修改和删除入口。
记忆要带 scope 和 ACL,避免跨部门、跨租户、跨项目泄露。
每条记忆要知道来源、写入时间、写入原因和更新记录。
企业任务经常不会一次完成。产品要补信息,研发要确认接口,评审要修改意见。Agent 要能从状态恢复,而不是重开一局。
resumeTask(taskId, newInput):
state = loadState(taskId)
changes = extractConfirmedUpdates(newInput)
state = merge(state, changes)
state.openQuestions = removeAnsweredQuestions(state.openQuestions, changes)
state.nextSteps = planNextSteps(state)
saveState(state)
return continueFrom(state.nextSteps[0])
很多 Agent 失败不是因为没有记忆,而是记错了、取多了、信过头了。
历史对话里有废话、猜测和过期信息,全部保存会干扰后续任务。
“用户喜欢表格”是偏好,“接口没有字段”是事实,处理方式完全不同。
接口版本、负责人、政策规则变了,旧记忆还在影响回答。
用户无法查看、修改、删除记忆,企业系统会很难治理。
不要只看“记住了多少”。好的记忆和状态管理,应该减少重复、降低错误、提升可恢复性和可审计性。
任务目标、进度、事实、来源、待确认和下一步是否完整。
暂停后能否从正确步骤继续,而不是重复或遗漏。
检索出来的记忆是否相关、不过期、有权限、有来源。
有多少记忆是错误、过期、无来源或不该保存的。
这个案例能把前面课程串起来:需求输入、多轮澄清、查知识库、生成草稿、评审修改和继续迭代。
{
"taskId": "PRD-IMPORT-FAILURE-DETAIL",
"status": "waiting_for_review",
"goal": "生成商品导入失败明细 PRD",
"decisions": [
{
"text": "本期只支持后台查看失败明细,不支持下载",
"confirmedBy": "product-owner",
"confirmedAt": "2026-06-12"
}
],
"openQuestions": [
"错误码是否需要给出用户可理解建议?"
],
"nextSteps": [
"补充埋点字段",
"让研发确认接口字段"
]
}
PRD Agent 不是“记住所有聊天”,而是把任务目标、资料来源、确认过的决策、草稿版本和下一步保存成结构化状态。这样下一轮才能可靠继续,也方便评审和审计。
面试官问记忆,不是想听“让 AI 记住用户”。更重要的是看你是否知道企业级记忆的风险和治理。
A:状态管理记录当前任务的目标、进度、已知事实、已查资料、待确认问题和下一步,让 Agent 能跨多轮继续工作。记忆则保存跨任务可复用的信息,例如稳定偏好、团队规范和历史决策。
A:短期上下文是当前对话和本轮任务能看到的信息;任务状态是当前任务的结构化进度;长期记忆是跨会话复用的信息。它们的生命周期、权限和风险不同,不能混在一起。
A:因为历史里有临时信息、过期事实、错误猜测和敏感内容。全保存会造成上下文污染、隐私风险和错误传播。企业 Agent 更应该保存结构化状态和经过确认的长期记忆。
A:适合保存稳定、可复用、经过确认的信息,例如用户输出偏好、团队模板、系统模块归属、历史业务决策。不适合保存密钥、隐私、一次性输入、实时状态和未确认猜测。
A:要有写入规则、权限范围、来源记录、过期时间、更新删除机制、审计日志和用户可控入口。记忆检索时也要按相关性、权限、新鲜度和可信度过滤。
学完这一课,要能把一个跨多轮任务设计成可保存、可恢复、可审计的状态结构。
为 PRD Agent 设计 taskId、goal、knownFacts、sourcesChecked、openQuestions 等字段。
用户补充一个答案后,说明如何更新 openQuestions、decisions、nextSteps 和 draftVersion。
至少列出 5 类,并说明原因:隐私、实时状态、未确认猜测、敏感资料、临时草稿。