Agent有对话记录就不怕重启吗?用持久工作区分清三种状态

25 阅读1分钟

Agent能接着聊天,不代表它能接着干活。聊天记录保存“说过什么”,工作区保存“做出了什么”,长期记忆保存“以后仍值得使用的事实”。把三者混成一个数据库,轻则上下文越来越贵,重则用户A的文件被用户B读到。分层后,重启恢复、权限审计和删除才有清楚边界。

最新事件:虚拟文件系统接上对象存储

微软在9月22日介绍langchain-azure-storage的公开预览:LangChain Deep Agents可把readwriteeditlsglobgrep等文件工具接到Azure Blob Storage。文本保存在Blob内容中,目录由对象键前缀模拟;第二个Agent即使没有第一个Agent的对话,也能读取同一工作区产物。来源为微软Azure SDK文章当前包说明

这项更新真正值得学的,不是把本地目录换成云存储,而是给Agent状态划清层次。

三种状态分别解决什么问题

生活类比:对话状态像会议记录,工作区像会议共享盘,长期记忆像经过确认后写进公司制度。会议记录能解释上下文,共享盘承载代码、表格和草稿,制度库只保留稳定规则。

类比的边界是:Agent不会天然判断哪句话应升级为长期记忆,也不会因为文件在共享盘里就自动理解它。应用仍需决定写入时机、命名空间、检索方式和删除策略。

准确地说,对话状态通常是消息与工具调用序列;持久工作区是Agent可通过文件工具读写的任务产物;长期记忆则是跨会话复用、经过提炼的用户偏好或领域事实。三者的保留期限、访问主体和一致性要求不同。Blob后端解决的是文件耐久性,不自动提供语义检索、事实去重或正确性保证。

flowchart LR
    A[用户提出任务] --> B[对话状态记录意图]
    B --> C[Agent调用文件工具]
    C --> D[临时草稿]
    D --> E{是否需要跨重启保留}
    E -- 否 --> F[临时空间到期删除]
    E -- 是 --> G[持久工作区按用户和任务隔离]
    G --> H{是否为稳定事实}
    H -- 否 --> I[继续作为任务文件]
    H -- 是 --> J[审核后写入长期记忆]
    J --> K[新会话按权限检索]

最小实践:两个“Agent进程”共享产物

无需第三方依赖,保存为workspace_demo.py后运行python workspace_demo.py

from pathlib import Path
import hashlib
import json

ROOT = Path("agent_workspace")

def task_dir(user_id: str, task_id: str) -> Path:
    safe = hashlib.sha256(f"{user_id}:{task_id}".encode()).hexdigest()[:16]
    path = ROOT / safe
    path.mkdir(parents=True, exist_ok=True)
    return path

def first_process() -> None:
    path = task_dir("user-42", "report-7")
    (path / "draft.md").write_text("结论:先核对原始数据。", encoding="utf-8")
    (path / "manifest.json").write_text(
        json.dumps({"owner": "user-42", "status": "draft"}, ensure_ascii=False),
        encoding="utf-8",
    )

def second_process() -> None:
    path = task_dir("user-42", "report-7")
    manifest = json.loads((path / "manifest.json").read_text(encoding="utf-8"))
    assert manifest["owner"] == "user-42"
    print((path / "draft.md").read_text(encoding="utf-8"))

first_process()
second_process()

task_dir先把用户与任务组合成稳定命名空间,避免直接信任外部路径;第一个进程写草稿和清单,第二个进程不需要任何聊天历史也能恢复产物。这个本地示例已在本次任务中用Python 3实际运行,输出“结论:先核对原始数据。”。它只演示状态边界,不等同云端并发、权限和故障测试。

真实接入可安装pip install -U "langchain-azure-storage[deepagents]",再用AzureBlobBackend配置账户URL、容器和前缀。官方包默认使用DefaultAzureCredential,生产环境应优先托管身份;模型密钥与存储身份是两套权限,不要混为一个万能密钥。

四个常见误区

第一,保存全部聊天就等于持久化。聊天中可能没有生成文件的完整内容,也缺少版本与校验值。第二,共享容器就等于协作。没有按租户、用户和任务划分前缀及权限,共享会变成串数据。第三,Blob耐久就等于一致。两个Agent同时编辑同一文件仍需版本号、租约或冲突处理。第四,工作区就是知识库。文件能被列出,不代表能按语义找到正确段落;RAG(检索增强生成)还需要切分、索引、过滤和引用。

还要警惕“什么都永久保存”。草稿、上传原件和推理中间物可能含敏感数据,应分别设置保留期、加密、审计与删除流程。真正进入长期记忆的内容,最好经过用户确认或业务规则审核。

版本控制同样不能省。对象存储里的最后一次写入可能覆盖前一个Agent的结果;至少要保存内容哈希、写入者、来源任务和生成时间。高价值产物还应采用不可变版本或条件写入,让冲突显式失败,而不是静默留下一个看似完整的错误文件。

适用与不适用场景

持久工作区适合长任务、代码生成、报告制作、跨进程协作和需要恢复的Agent。不适合拿来替代事务数据库,也不适合让多个租户无条件共享同一前缀。需要精确查询、强事务或语义检索时,应配合数据库与向量索引,而非要求对象存储包办一切。

我的判断

Agent可靠性的第一步,不是记住更多,而是让每类状态只承担一种责任。 对话负责解释过程,工作区负责保存产物,长期记忆负责复用稳定事实。分开之后,恢复、授权和遗忘才都可测试。

5分钟实践题

列出你的Agent会产生的五类数据,为每类写下所有者、保存时长、恢复方式和删除条件。若某项同时被叫作“聊天记录”“文件”和“记忆”,就说明边界还没画清。

你的Agent重启后,最应该保留的是聊天、文件,还是经过审核的长期事实?

关注「蜗牛聊AI」,一起看懂技术变化背后的真正机会。


本文首发于 java4u.cn,转载请注明出处。