企业智能体工程体系v1.1|企业智能体工程卷 · 第7期 ·工作记忆治理——记忆是企业资产,不是私货 企业智能体工程体系v1.1企业智能体工程卷 · 第7期工作记忆治理——记忆是企业资产不是私货作者技术治理研究组系列企业智能体工程卷发布版 v1.1主案例CASE-CR-0042信用提额申请本集对象MemoryItem适合读者架构师、技术负责人、AI 产品经理、企业级 Agent 开发者 本文档声明性质本文为企业智能体工程化设计参考框架的第 7 期聚焦 Agent 工作记忆的治理边界提供架构思路与教学级示意代码不构成生产级实现方案或法律合规意见如 GDPR、个人信息保护法等。证据锚定文中案例CASE-CR-0042为教学示意不对应任何真实客户系统。系列定位本篇在第 0 期企业公民·身份与审计确立的“证件号不进长程记忆”红线基础上引入MemoryItem 对象为 Agent 系统建立“有边界、有生命周期、有权限、有审计”的工作记忆治理框架。摘要在第 0 期中我们确立了一条红线证件号等强身份信息不得进入长程记忆。但仅靠“红线原则”远远不够——我们需要一套可执行的机制来落地这条红线。CASE-CR-0042 的处理链路中客户可能发送证件号、银行账号截图文字。如果放任 Agent 将这类信息写入记忆系统会发生什么风险场景后果客服 Agent “为下次方便”写入长程记忆隐私数据永久留存数据 Agent 缓存原始身份字段其他个案检索时命中跨 Agent 记忆共享非授权人员访问敏感信息无过期机制数据“永久”存在无法清理记忆是企业资产——有边界、生命周期、权限、审计。本期引入MemoryItem对象为 Agent 的工作记忆建立四维治理框架边界什么能记、生命周期记多久、权限谁能看、审计谁看了。一句话核心记忆治理不替代契约它管“留下来的东西”。1. 问题记忆是资产不是私货1.1 CASE-CR-0042 中的记忆风险在 CASE-CR-0042 的处理链路中多个环节涉及客户敏感信息环节可能接触的敏感信息风险客服受理证件号、营业执照号、银行账号“为下次方便”写入长程记忆数据 Agent信用报告、财务流水、身份字段缓存原始身份字段财务裁决客户资料、收入证明跨 Agent 记忆共享导致权限泄露核心矛盾Agent 需要记忆来提升效率“记住这个客户的偏好”但不能因此牺牲隐私合规“记住客户的证件号”。1.2 失控记忆的三种后果后果说明隐私泄露证件号、账号等敏感信息被其他 Agent 或非授权人员检索到合规违规违反 GDPR、个人信息保护法等法规对数据最小化、存储期限的要求审计失效无人知晓“谁写了什么、谁读了什么、什么时候过期”2. 四维治理框架2.1 治理维度维度CASE-CR-0042 要求实现机制边界禁止证件号、完整账号进长程记忆写入前过滤正则 规则引擎生命周期会话摘要 TTL裁决摘要更长但可审计expires_at时间戳 定时清理权限support 记忆 ≠ finance 默认可读owner字段 读取权限检查审计写入/读取留痕AuditEvent 全链路记录2.2 短程记忆 vs 长程记忆维度短程记忆长程记忆用途当前会话上下文跨会话经验复用生命周期会话结束清理TTL ≤ 24h按策略保留TTL 可配置内容类型完整对话、临时状态工单号、决策编号、非敏感摘要敏感数据禁止写入禁止写入3. 与主架构的关系DecisionRecord / 工具结果 → 过滤 → MemoryItem.put → 失败则仅 AuditEvent 记拦截记忆治理不替代契约SkillContract契约管“能不能做这件事”记忆治理管“这件事做完后什么东西能被留下来”。4. 最小代码过滤 TTL 属主以下为教学级示意代码展示 MemoryItem 的过滤、生命周期和权限管理from__future__importannotationsimportreimporttimefromdataclassesimportdataclassfromtypingimportOptional# 敏感信息识别规则教学级 # 正则匹配 18 位身份证号含最后一位 X/xSENSITIVE_ID_CARDre.compile(r\b\d{17}[\dXx]\b)# 匹配银行卡号16-19 位数字SENSITIVE_BANK_CARDre.compile(r\b\d{16,19}\b)# 匹配手机号11 位以 1 开头SENSITIVE_PHONEre.compile(r\b1\d{10}\b)defcontains_sensitive(text:str)-bool:检查文本是否包含敏感信息。returnbool(SENSITIVE_ID_CARD.search(text)orSENSITIVE_BANK_CARD.search(text)orSENSITIVE_PHONE.search(text))# MemoryItem 对象 dataclassclassMemoryItem:工作记忆条目——有边界、有生命周期、有属主。key:strvalue:strexpires_at:float# Unix 时间戳owner:str# 写入者身份如 agent.support.intakecase_id:str# 关联案例编号created_at:float# 创建时间# 治理型记忆存储 classGovernedMemory:受治理的工作记忆存储——写入前过滤读取时检查权限和过期。def__init__(self)-None:self._store:dict[str,MemoryItem]{}defput(self,key:str,value:str,owner:str,case_id:str,ttl_sec:int,)-None: 写入记忆条目。 Args: key: 记忆键 value: 记忆值文本 owner: 写入者身份 case_id: 关联案例 ttl_sec: 生存时间秒 Raises: ValueError: 当记忆值包含敏感信息时 # 1. 敏感信息过滤边界检查ifcontains_sensitive(value):raiseValueError(f拒绝写入敏感信息:{key}(检测到证件号/银行卡/手机号))# 2. 创建带 TTL 的记忆条目self._store[key]MemoryItem(keykey,valuevalue,expires_attime.time()ttl_sec,ownerowner,case_idcase_id,created_attime.time(),)defget(self,key:str,reader:str)-Optional[str]: 读取记忆条目。 Args: key: 记忆键 reader: 读取者身份 Returns: 记忆值如果不存在或已过期则返回 None Raises: PermissionError: 当读取者无权限时 itemself._store.get(key)# 不存在ifitemisNone:returnNone# 过期清理iftime.time()item.expires_at:delself._store[key]returnNone# 权限检查只有属主和审计角色可读ifreader!item.ownerandnotreader.startswith(auditor:):raisePermissionError(f无权读取记忆:{key}(owner{item.owner}, reader{reader}))returnitem.valuedeflist_by_case(self,case_id:str)-list[MemoryItem]:按案例列出所有有效记忆用于审计。result[]foriteminself._store.values():ifitem.case_idcase_idandtime.time()item.expires_at:result.append(item)returnresult# 使用示例CASE-CR-0042 if__name____main__:memGovernedMemory()print(*50)print(【场景 1写入正常记忆】)print(*50)mem.put(keycase:CASE-CR-0042:summary,value星河零售申请提额至 120000已转数据复核,owneragent.support.intake,case_idCASE-CR-0042,ttl_sec3600,# 1 小时)print(✅ 写入成功: case:CASE-CR-0042:summary)print(\n*50)print(【场景 2读取记忆属主本人】)print(*50)valuemem.get(case:CASE-CR-0042:summary,agent.support.intake)print(f✅ 读取成功:{value})print(\n*50)print(【场景 3写入敏感信息被拦截】)print(*50)try:mem.put(keycase:CASE-CR-0042:id_card,value法人证件 110101199001011234,owneragent.support.intake,case_idCASE-CR-0042,ttl_sec86400,)exceptValueErrorase:print(f 拦截:{e})print(\n*50)print(【场景 4跨 Agent 越权读取被拦截】)print(*50)try:mem.get(case:CASE-CR-0042:summary,agent.finance.limit)exceptPermissionErrorase:print(f 拦截:{e})print(\n*50)print(【场景 5按案例审计】)print(*50)itemsmem.list_by_case(CASE-CR-0042)foriteminitems:print(f -{item.key}| owner{item.owner}| expires_at{item.expires_at:.0f})运行输出 【场景 1写入正常记忆】 ✅ 写入成功: case:CASE-CR-0042:summary 【场景 2读取记忆属主本人】 ✅ 读取成功: 星河零售申请提额至 120000已转数据复核 【场景 3写入敏感信息被拦截】 拦截: 拒绝写入敏感信息: case:CASE-CR-0042:id_card (检测到证件号/银行卡/手机号) 【场景 4跨 Agent 越权读取被拦截】 拦截: 无权读取记忆: case:CASE-CR-0042:summary (owneragent.support.intake, readeragent.finance.limit) 【场景 5按案例审计】 - case:CASE-CR-0042:summary | owneragent.support.intake | expires_at1768000000代码要点治理维度代码实现说明边界contains_sensitive()写入前检查命中则拒绝生命周期expires_at读取时自动检查并清理过期条目权限owner 读取者匹配仅属主和审计角色可读审计list_by_case()按案例列出所有有效记忆5. 三个教训教训含义证据默认最小记忆不默认写入全部内容只有经过过滤的、非敏感的信息才能进入记忆系统put()中的敏感信息检查TTL 靠机制不靠自觉不能依赖 Agent “自觉清理”记忆必须由系统强制过期expires_at时间戳 读取时自动清理治理内建在 put 路径记忆治理必须在写入时执行不能“事后补救”敏感过滤在put()中而不是在get()中事故后补救成本高一个数量级数据一旦写入清理和追溯成本远高于写入前拦截拦截发生在写入前而非写入后6. 思考题以下问题供团队内部讨论帮助将记忆治理概念落地到具体场景裁决摘要的生命周期CASE-CR-0042 的裁决摘要财务 Agent 的最终决定应 TTL 多久谁有权限读取提示审计合规 vs 业务效率的权衡影像 OCR 文本治理如果客户上传了身份证照片OCR 识别出的文本应如何处理如何将影像文本纳入同一边界策略提示OCR 文本是否也适用“证件号不进长程记忆”规则审计角色设计当前代码中auditor:前缀的用户可读取所有记忆。这种设计是否足够审计员是否需要更细粒度的权限控制7. 下期预告第 8 期落地验收AssuranceReport整条提额链路的 AssuranceReport 与 P4Hotfix-8h。将前 7 期的所有治理机制Identity、SkillContract、四轴、DecisionBoard、ToolSpec、MemoryItem收束为一份可复核的放行证据包。8. 延伸阅读资源说明Metis: Memory Foundation ModelarXiv:2607.26760记忆基础模型研究GDPR 第 5 条数据最小化原则个人数据处理的合法性原则个人信息保护法 第 6 条最小必要原则中国个人信息处理的最小必要原则本卷第 0 期企业公民——Identity AuditEvent身份与审计基础本卷第 1 期技能即契约——SkillContract能力边界契约化本卷第 3 期无状态决策记忆——DecisionBoard多环节决策传递本卷第 8 期落地验收预告AssuranceReport 完整设计本文是「企业智能体工程卷」十期专栏的第 7 期。工作记忆治理——记忆是企业资产不是私货让 Agent 的记忆从“随心所欲的私货”进化为“有边界、有生命周期、有权限、有审计”的企业资产。欢迎转载请注明出处与原文标题。2026-08-10 | 发布

相关新闻

最新新闻

基于大模型的代码库智能解读:从RAG到知识图谱的工程实践

基于大模型的代码库智能解读:从RAG到知识图谱的工程实践

1. 项目缘起:当代码库变成“黑盒”,我们如何自救? 最近在团队里接手一个遗留项目,打开代码仓库的那一刻,我有点懵。几十个模块,上万行代码,注释寥寥无几,README里只有一句“部署说明…

2026/8/10 4:07:36
GPU运行Llama模型全攻略:从环境配置到性能调优

GPU运行Llama模型全攻略:从环境配置到性能调优

1. 项目概述:为什么要在GPU上跑Llama模型? 最近和几个搞AI应用开发的朋友聊天,发现一个挺有意思的现象:大家手里或多或少都攒了一些开源大模型,比如Llama 3、Qwen这些,但真到想跑起来用一用的时候&#xff…

2026/8/10 4:07:36
从ReAct模式到智能体实战:构建动态思考的AI Agent

从ReAct模式到智能体实战:构建动态思考的AI Agent

1. 从“单步调用”到“思考-行动”的范式转变最近在搞AI应用落地的朋友,估计没少被“Agent”这个词刷屏。从OpenAI的GPTs到各种开源框架,好像不提Agent,技术方案就落伍了。但说实话,很多初涉此道的开发者,包括我早期也…

2026/8/10 4:07:36
ThreadLocal探秘(末尾已附上示例代码)

ThreadLocal探秘(末尾已附上示例代码)

一、核心定义 ThreadLocal 是 Java 并发编程工具类,为每个线程单独创建一份独立的变量副本: 多个线程共用同一个 ThreadLocal 对象,但各自存取的数据互不干扰、线程隔离,天然规避多线程共享变量的并发竞争问题。 简单一句话&#…

2026/8/10 4:07:36
Java面试核心攻略:从八股文到系统设计,全面备战金九银十

Java面试核心攻略:从八股文到系统设计,全面备战金九银十

在实际 Java 技术面试中,尤其是面对“金九银十”这样的招聘高峰期,很多开发者会感到迷茫:究竟要准备到什么程度才能通过大厂或中大型公司的技术面试?面试官考察的不仅仅是死记硬背的“八股文”,更是将基础知识、场景设…

2026/8/10 4:07:36
区域综合能源系统鲁棒规划工具解析

区域综合能源系统鲁棒规划工具解析

1. 项目概述:多能负荷不确定性下的区域综合能源系统规划挑战区域综合能源系统(RIES)作为能源互联网的重要载体,其规划质量直接影响着系统运行的经济性和可靠性。在实际工程中,负荷预测误差、可再生能源出力波动等不确定…

2026/8/10 4:02:36