AI多Agent协作系统实战(四十六):改了十次规则,AI员工还是老样子——会话缓存的坑

我们的AI统筹员工,用 delegate_task 派发任务------违反了铁律。

我们把铁律写进了 skill、写进了 SOUL.md、写进了 AGENTS.md。

改了十次。它还是老样子。

重启了网关,还是老样子。

最后发现:你改的不是它的脑子,是下一个它的脑子。

事故现场

团队有一条铁律:派发任务必须用 send_task.py------这是唯一正式入口,会写数据库、会走复核闭环。

但AI统筹员工(我们叫它小密)连续几次派发,用的都是 delegate_task:

复制代码
Delegating 根据《平台建设方案》,设计6个主要页面的可交互原型...
✅ 任务已派发 DEV-20260811-001 → 小虾(开发岗位)

任务派发了,数据库里却没有这条任务。没有任务ID、没有复核、没有闭环------它绕过了整个机制。

我们改规则:在 skill 里写死"禁止 delegate_task 派发正式任务"。

它不听。

我们再改:在 SOUL.md(系统提示词)里写"send_task.py是唯一正式派发入口"。

它还是不听。

我们改 AGENTS.md、改环境说明、改 memory------前后改了十次。它每次都是老样子。

排查:规则文件全都对

我们把规则文件逐个打开检查:

复制代码
SOUL.md:     "禁止用delegate_task派发正式任务" ✅ 在
skill:       "send_task.py是唯一正式派发入口" ✅ 在
AGENTS.md:   "创建任务MD → send_task.py派发" ✅ 在

文件都对。路径都对。甚至重启了网关进程。

它还是用 delegate_task。

那一刻的困惑是真实的:规则就在文件里,它为什么看不见?

根因:系统提示词是会话创建时的快照

翻文档才发现机制:

Hermes 的系统提示词,在会话创建的那一刻组装并缓存。

整个会话期间,提示词不再重新读取文件。

也就是说:

复制代码
会话创建时:
  SOUL.md(旧版------没有铁律) → 组装进系统提示词 → 缓存
之后你改SOUL.md(加了铁律):
  文件变了------但【当前会话的提示词】还是旧快照
  → agent永远看不到新规则

我们改的不是它的脑子------我们改的是下一个它的脑子。

当前会话的它,永远活在过去那个快照里。

代码级:提示词什么时候组装

如果把机制写成伪代码,它是这样的:

python 复制代码
def create_session(user_id):
    # 会话创建:组装系统提示词(一次性)
    system_prompt = build_system_prompt(
        soul=read_file('SOUL.md'),      # ← 此刻读一次
        skills=scan_skills(),           # ← 此刻读一次
        agents=read_file('AGENTS.md')   # ← 此刻读一次
    )
    session.cache_prompt(system_prompt)  # 整个会话缓存

def on_message(session, msg):
    # 之后的每一条消息:用缓存的提示词------不再读文件
    model.call(session.cached_prompt, msg)

关键在 create_session 那一步:文件只读一次。之后你改多少次文件,当前会话都无感知。

重启网关也一样------gateway restart 不会销毁已存在的会话,提示词快照还在。

验证:重启不重建,新会话才生效

我们做了对照组:

复制代码
❌ 改SOUL.md + 重启网关 → 旧会话继续用旧快照 → 还是delegate_task
✅ 改SOUL.md + 新开会话(清sessions) → 新会话加载新快照 → 立刻用send_task.py

同一个文件,同一个时刻------只有新会话能看到。

这也解释了为什么"身份改名不生效"、"skill更新不生效"、"铁律不生效"------全是同一个机制。

解决方案:改完规则,必须"重启 + 新会话"

现在我们的操作规范变成了:

复制代码
① 改规则文件(skill/SOUL/AGENTS)
② 重启网关(让新会话有干净环境)
③ 【新开会话】(新DM/清sessions)------这是最容易漏的一步
= 三步缺一不可------第二步不能替代第三步

以及一个认知修正:这不是 bug,是特性。会话缓存保证上下文连贯------用户上一句说的事,下一句 agent 还记得。代价是规则修改对存量会话不生效。我们要做的不是"修掉缓存",而是"改完规则记得开新会话"。

你改的不是AI的脑子,是下一个AI的脑子。

规则文件是给"未来的会话"看的。想让"现在的它"听话------请先和它说再见,开个新会话。

相关推荐
system_error_x16 分钟前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
microrain30 分钟前
SagooIoT 的缓存换后端只改一行配置,文件后端连 Redis 都不需要
物联网·缓存·golang·sagooiot
驭渊的小故事1 小时前
Spring AI Alibaba 实战:从maven依赖治理到声明式工具调用
java·人工智能·spring
Elastic 中国社区官方博客1 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1881 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn2 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
y1su2 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
我命由我123453 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
苜蓿muxu4 小时前
Java 字符串拼接:+、StringBuilder、StringBuffer的区别
java
摇滚侠4 小时前
《Java并发编程之美》第 4 章 Java 并发包中原子操作类原理剖析 阅读笔记 7
java·笔记·python