多Agent记忆同步系统
多Agent记忆同步系统:让AI智能体之间共享记忆的实时协作平台
一、背景:为什么需要多Agent记忆同步?
在AI应用日益普及的今天,单一Agent已经难以应对复杂任务。实际场景中,往往是多个Agent协同工作:
- Research-Agent 负责信息检索与调研
- Code-Agent 负责代码生成与修改
- Review-Agent 负责代码审查与质量评估
这些Agent各自拥有独立的记忆空间——搜索策略、技术偏好、审查清单等。问题来了:当Research-Agent发现了一个高效的数据源,Code-Agent怎么知道?当Code-Agent确定了技术框架,Review-Agent怎么同步审查标准?
信息孤岛是多Agent协作的最大障碍。每个Agent都像一座孤岛,拥有宝贵的知识却无法共享。
多Agent记忆同步系统正是为解决这一问题而生。它提供了一套完整的记忆管理、选择性同步和冲突解决机制,让多个Agent能够高效地共享上下文知识。
二、系统架构
系统采用前后端分离架构,技术栈如下:
| 层级 | 技术选型 | 说明 |
|---|---|---|
| 前端 | React 18 + Vite + TypeScript | 组件化UI,类型安全 |
| 样式 | Tailwind CSS | 原子化CSS,深色科技风 |
| 后端 | Node.js + Express | RESTful API |
| 实时通信 | WebSocket (ws) | 双向推送,自动重连 |
| 数据存储 | 内存 Map | 轻量级,无需数据库依赖 |
┌──────────────────────────────────────────────────┐
│ 前端 (React) │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Dashboard │ │ Agents │ │ Sync │ │
│ │ 仪表盘 │ │ Agent管理│ │ 记忆同步 │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Conflicts│ │ Timeline │ │
│ │ 冲突中心 │ │ 时间线 │ │
│ └──────────┘ └──────────┘ │
└──────────────┬───────────────────────────────────┘
│ REST API + WebSocket
┌──────────────┴───────────────────────────────────┐
│ 后端 (Express) │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ agents │ │ sync │ │ conflicts │ │
│ │ 路由 │ │ 路由 │ │ 路由 │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
│ ┌────────────────────────────────────────────┐ │
│ │ store.js (核心存储) │ │
│ │ agents(Map) + memories(Map) + conflicts │ │
│ └────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘
三、核心功能详解
3.1 Agent管理
每个Agent具有名称、类型、描述等属性,并维护在线/离线状态。系统启动时预置三个示例Agent:
function createAgent({ name, type, description }) {
const id = uuidv4();
const agent = {
id, name,
type: type || 'general',
description: description || '',
status: 'online',
createdAt: now(),
};
agents.set(id, agent);
addTimeline('agent_created', id, `Agent "${name}" 已注册`, { name, type: agent.type });
emit({ channel: 'agents', payload: { action: 'created', agent } });
return agent;
}
每条操作都会写入全局时间线,并通过WebSocket实时推送通知。
3.2 记忆存储
每个Agent拥有独立的记忆空间,采用Key-Value结构组织。每条记忆支持标签和优先级:
interface Memory {
id: string;
agentId: string;
key: string; // 记忆键,如 "search_strategy"
value: string; // 记忆值,如 "深度优先搜索 + 语义检索"
tags: string[]; // 标签,如 ["search", "strategy"]
priority: Priority; // 优先级:high | medium | low
createdAt: number;
updatedAt: number;
}
示例数据中,Research-Agent存储了搜索策略和数据源偏好,Code-Agent存储了框架选择和代码风格,Review-Agent存储了审查清单。注意三个Agent都有 language_pref 这个key,但值不同——这为后续的冲突检测演示埋下了伏笔。
3.3 记忆同步(核心功能)
同步是系统的核心。用户选择源Agent、勾选记忆条目、选择目标Agent,系统自动执行同步:
function performSync({ sourceAgentId, targetAgentId, memoryIds }) {
const results = { added: [], conflicts: [], skipped: [] };
for (const memId of memoryIds) {
const srcMem = memories.get(memId);
const existing = targetMems.find(m => m.key === srcMem.key);
if (!existing) {
// 目标Agent没有这条记忆,直接添加
const newMem = addMemory(targetAgentId, { ... });
results.added.push(newMem);
} else if (existing.value === srcMem.value) {
// 值相同,跳过
results.skipped.push({ key: srcMem.key, reason: 'value identical' });
} else {
// 值不同,创建冲突记录
const conflict = { ...conflictData, status: 'pending' };
conflicts.set(conflictId, conflict);
results.conflicts.push(conflict);
}
}
return { sync, results };
}
同步逻辑分三种情况处理:
- 新增:目标Agent没有该key的记忆,直接添加
- 跳过:目标Agent已有相同key且相同value的记忆,无需操作
- 冲突:目标Agent已有相同key但value不同,记录冲突待人工解决
3.4 冲突检测与解决
当同步的记忆与目标Agent已有记忆冲突时(相同key不同value),系统自动将冲突记录到冲突中心。用户可以选择三种解决方式:
function resolveConflict(conflictId, { resolution, resolvedValue }) {
let finalValue;
if (resolution === 'overwrite') {
finalValue = conflict.sourceValue; // 用源值覆盖
} else if (resolution === 'keep') {
finalValue = conflict.targetValue; // 保留目标值
} else if (resolution === 'merge') {
finalValue = resolvedValue; // 手动合并
}
// 更新目标记忆
const targetMem = memories.get(conflict.targetMemoryId);
targetMem.value = finalValue;
targetMem.updatedAt = now();
// 标记冲突已解决
conflict.status = 'resolved';
conflict.resolution = resolution;
conflict.resolvedValue = finalValue;
}
| 解决方式 | 说明 | 适用场景 |
|---|---|---|
| 覆盖 (overwrite) | 用源Agent的值替换目标Agent的值 | 源Agent的信息更准确/更新 |
| 保留 (keep) | 保留目标Agent原有的值 | 目标Agent的值更合适 |
| 合并 (merge) | 手动输入合并后的值 | 两个值都有价值,需要整合 |
3.5 全局时间线
系统维护一个全局时间线,按时间倒序记录所有操作历史:
function addTimeline(type, agentId, description, data = {}) {
const event = {
id: uuidv4(),
type, // agent_created, memory_added, sync, conflict, ...
agentId,
description, // 人类可读的描述
timestamp: now(),
data, // 附加数据
};
timeline.unshift(event); // 最新的在前
if (timeline.length > 500) timeline.pop(); // 限制最多500条
emit({ channel: 'timeline', payload: event });
return event;
}
时间线记录的事件类型包括:Agent注册、记忆添加/更新/删除、同步操作、冲突产生、冲突解决。最多保留500条,超出后丢弃最旧的。
3.6 WebSocket实时通知
前端通过WebSocket与后端保持长连接,实时接收事件推送:
// useWebSocket Hook
const useWebSocket = (onMessage: (msg: WSMessage) => void) => {
const [connected, setConnected] = useState(false);
const wsRef = useRef<WebSocket | null>(null);
useEffect(() => {
const connect = () => {
const ws = new WebSocket(`ws://${location.host}`);
ws.onopen = () => setConnected(true);
ws.onclose = () => {
setConnected(false);
setTimeout(connect, 3000); // 3秒后自动重连
};
ws.onmessage = (e) => onMessage(JSON.parse(e.data));
};
connect();
}, []);
return { connected };
};
收到消息后,根据channel类型弹出不同的通知提示:
sync:绿色成功通知"记忆同步已完成"conflict:黄色警告通知"检测到冲突"agents:蓝色信息通知"新Agent已注册"memories:蓝色信息通知"新记忆已添加"
四、界面设计
采用现代深色科技风格:
- 主背景:
#0a0e1a(深蓝黑) - 卡片背景:
#141b2d(深蓝灰) - 强调色:
#00d4ff(青蓝)和#7c3aed(紫色) - 布局:左侧导航栏 + 右侧主内容区
- 状态指示:绿色圆点表示在线,灰色表示离线
- 动画:页面切换淡入效果,通知滑入滑出
五个页面各有侧重:
- 仪表盘 (Dashboard):全局统计卡片(Agent数、记忆数、同步数、冲突数)+ 最近活动
- Agent管理 (Agents):Agent列表卡片,展开可查看/添加/删除记忆
- 记忆同步 (Sync):三步式同步流程——选源Agent → 勾选记忆 → 选目标Agent → 执行
- 冲突中心 (Conflicts):待处理冲突列表,支持覆盖/保留/合并三种解决方式
- 时间线 (Timeline):全局操作历史,按时间倒序排列
五、快速启动
# 克隆仓库
git clone https://gitcode.com/sdf2342/agent-memory-sync.git
cd agent-memory-sync
# 安装前端依赖
npm install
# 安装后端依赖
cd server && npm install && cd ..
# 启动后端(端口 3000)
cd server && node index.js &
# 启动前端(端口 5173)
npm run dev
打开浏览器访问 http://localhost:5173 即可看到仪表盘界面,系统已预置三个示例Agent及其记忆数据。
六、使用场景
场景一:多Agent协作开发
Code-Agent确定了技术框架为"React + TypeScript",通过同步将这一决策共享给Review-Agent。Review-Agent据此调整审查标准,确保代码符合框架规范。
场景二:研究与实现联动
Research-Agent发现了一个高效的搜索策略"深度优先搜索 + 语义检索",同步给Code-Agent。Code-Agent在实现搜索功能时直接采用该策略,避免重复研究。
场景三:知识沉淀与传承
资深Agent积累了大量最佳实践和配置经验,通过选择性同步将关键记忆传递给新加入的Agent,加速新Agent的上手过程。
场景四:跨项目知识复用
不同项目的Agent间共享通用配置(如语言偏好、代码风格),避免每个项目都从零配置。当遇到配置差异时,冲突中心提供三种解决方式,灵活应对。
七、技术亮点
7.1 事件驱动架构
整个系统基于事件驱动设计。所有状态变更都通过 emit() 广播事件,前端通过WebSocket订阅这些事件并实时响应。这种设计使得UI更新无需轮询,体验流畅。
7.2 选择性同步
不同于全量同步,系统支持选择性同步——用户可以勾选特定的记忆条目进行同步。这在实际场景中非常重要:并非所有记忆都适合共享,有些可能是Agent私有的上下文。
7.3 冲突自动检测
同步过程中,系统自动比较key和value,无需用户手动检查。冲突产生后不会中断同步流程,而是记录下来继续处理其他记忆,最后统一在冲突中心解决。
7.4 轻量级零依赖存储
数据存储使用内存Map,无需安装数据库,启动即可用。适合演示和轻量场景。生产环境可替换为Redis或数据库,store.js的接口设计兼容这种扩展。
八、未来展望
- 持久化存储:接入Redis或SQLite,支持数据持久化
- Agent认证:增加API Key认证,区分不同Agent的访问权限
- 同步策略:支持自动同步规则(如新记忆自动同步给指定Agent)
- 记忆版本:记录记忆的历史版本,支持回滚
- 可视化分析:记忆关联图谱,展示Agent间的知识流动
九、总结
多Agent记忆同步系统解决了AI多智能体协作中的信息孤岛问题。通过选择性同步、自动冲突检测和实时通知,让Agent间的知识共享变得简单可控。系统采用React + Express + WebSocket技术栈,前后端分离,代码结构清晰,适合作为多Agent协作的基础设施进一步扩展。
项目已开源至 GitCode:https://gitcode.com/sdf2342/agent-memory-sync
欢迎交流讨论!
- 点赞
- 收藏
- 关注作者
评论(0)