AegisMemory:为AI智能体构建加密、可验证的区块链记忆存储系统
2026/5/14 14:34:32 网站建设 项目流程

1. 项目概述:AegisMemory,为AI智能体打造的加密记忆堡垒

如果你正在构建或使用基于OpenClaw框架的AI智能体,并且为如何安全、持久、可验证地存储智能体的“记忆”(即对话历史)而头疼,那么AegisMemory这个项目,很可能就是你一直在寻找的解决方案。简单来说,它是一个生产级的加密记忆存储系统,专为OpenClaw智能体设计,核心目标是把每一次对话都变成一份加密的、可追溯的、并且锚定在区块链上的数字资产。

想象一下,你的AI助手Theo(或者任何你构建的智能体)在与用户进行成千上万次对话后,它如何记住重要的上下文?传统的做法可能是将对话记录以明文形式存储在中心化数据库里,这不仅存在隐私泄露的风险,数据也容易被篡改或丢失。AegisMemory采用了一种截然不同的思路:端到端加密 + 去中心化存储 + 区块链存证。每一次对话结束时,系统会自动捕获内容,用源自你钱包的密钥进行高强度加密,然后立即上传到去中心化的IPFS网络(通过X1 Vault服务,完全免费)。更关键的是,它还会定期(默认每天一次)将这批加密数据的“指纹”(CID和哈希值)以交易备忘录的形式写入X1区块链,形成一个不可篡改的时间戳证明。这意味着,你的智能体的每一段“记忆”,都具备了可验证的真实性和完整性。

我最初接触这个项目,是因为我需要为一个处理敏感咨询的AI客服项目寻找一个合规且可靠的记忆方案。明文存储不可行,自建加密系统又太复杂。AegisMemory的出现,完美地解决了这个痛点。它不仅仅是一个存储插件,更是一套完整的数据主权解决方案。无论是个人开发者构建的私人助手,还是企业级的AI应用,都能通过它确保对话数据的隐私安全与永久可追溯。接下来,我将带你深入拆解它的架构、手把手完成部署配置,并分享在实际使用中积累的一系列实战经验和避坑指南。

2. 核心架构与设计哲学解析

AegisMemory的设计非常精巧,它没有重新发明轮子,而是优雅地整合了几项成熟的技术,构建了一个分层、高效且成本极低的存储验证体系。理解这个架构,是后续灵活运用和故障排查的基础。

2.1 双层存储模型:IPFS存数据,区块链存证明

这是整个系统的基石,也是最值得称道的设计。它清晰地将“数据存储”和“存证验证”两个职责分离。

第一层:X1 Vault (IPFS) —— 加密数据的免费仓库所有对话记忆的加密原文,都存储在这里。IPFS(星际文件系统)是一个内容寻址的去中心化存储网络。AegisMemory选择通过X1网络提供的Vault服务接入IPFS,最大的好处是完全免费且稳定。当你上传一份数据后,IPFS会为其生成一个唯一的“内容标识符”,也就是CID。这个CID就像是这份数据的指纹:只要内容不变,CID就永远不变;通过CID,任何人都可以从IPFS网络中检索到这份数据。

关键细节:AegisMemory在上传前,会使用AES-256-GCM算法和你的钱包私钥派生出的加密密钥对数据进行加密。这意味着,即使数据被存储在公开的IPFS网络上,没有对应私钥的人也完全无法解密查看其内容,真正实现了“数据公开存储,内容隐私拥有”。

第二层:X1 Blockchain —— 不可篡改的证明账本这一层不存储数据本身,而是存储数据的“承诺”。系统会定期(默认每日)将最新记忆的CID及其SHA256哈希值,通过Solana Memo Program(备忘录程序)写入X1区块链的一笔交易中。区块链的特性保证了这笔记录一旦上链,就无法被修改或删除,且具有精确的时间戳。

这个设计的精妙之处在于:

  1. 成本极低:在IPFS存储数据免费,在区块链上写入一个Memo的成本微乎其微(约0.000005 SOL,折合人民币几乎可以忽略不计)。
  2. 可验证性:任何人只要拥有CID和对应的区块链交易ID,就可以独立验证在某个时间点,这份数据确实存在且内容未被篡改(通过对比哈希值)。
  3. 责任分离:数据存储的可用性由IPFS网络保障,而数据存在的证明则由区块链保障,两者相互独立,提升了系统的整体鲁棒性。

2.2 CID链式结构:构建可追溯的记忆历史

AegisMemory没有简单地将每次对话孤立存储。它采用了一种链式结构,让记忆之间产生关联。每保存一份新的记忆,其元数据中都会包含前一份记忆的CID(prev_cid字段)。这就形成了一条从最新记忆不断向前追溯的“记忆链”。

这种设计带来了两个核心优势:

  1. 完整性验证:你可以从任意一个CID开始,沿着prev_cid链路向前验证,确保整条历史记录没有被中间插入或删除过任何片段。任何对历史记录的篡改都会导致链条断裂。
  2. 高效回溯:对于智能体来说,在需要加载历史上下文时,可以快速沿着这条链获取相关的历史对话,而不需要扫描全部存储。

2.3 TOON格式:在可读性与效率间取得平衡

为了进一步优化存储和传输效率,AegisMemory没有使用标准的JSON,而是自定义了一种名为TOON(Telegram Object Notation)的格式。它借鉴了类似INI配置文件的风格,但用于表示结构化的对话数据。

@aegismemory.v1 agent: theo wallet: 9SksTs4MBiqpK3aBxDhzrVforfsR2u9hAaawdrFsNPjd time: 2024-05-27T10:30:00.000Z cid: Qmabc123... prev_cid: Qmxyz789... sha256: a1b2c3... [messages] - role: user content: 今天X1网络的出块时间是多少? time: 2024-05-27T10:29:55.000Z - role: assistant content: 目前X1网络的平均出块时间约为2秒。 time: 2024-05-27T10:30:00.000Z

与JSON相比,TOON格式通过减少冗余的引号和括号,实现了高达46%的空间节省。这对于需要频繁上传到IPFS的场景来说,长期下来能节省可观的网络开销。同时,它依然保持了良好的人工可读性,在调试时直接查看原始加密文件(解密后)也非常清晰。

2.4 插件化集成:与OpenClaw的无缝协作

AegisMemory本质上是一个OpenClaw插件。它通过挂载到OpenClaw框架的生命周期钩子(特别是agent_end)来工作。这意味着,你几乎不需要修改智能体本身的核心逻辑。当你的智能体完成一次对话回合后,OpenClaw框架会自动触发AegisMemory的保存流程,整个过程对智能体是透明的。

这种设计使得集成变得极其简单:安装插件、配置钱包、启用即可。你的智能体立即就获得了持久化、加密的记忆能力,而你可以继续专注于业务逻辑的开发。

3. 从零开始:环境配置与详细安装指南

理论清晰后,我们进入实战环节。我将以一个全新的Ubuntu 22.04服务器环境为例,带你完整走通AegisMemory的安装和配置流程。过程中我会穿插我踩过的坑和最佳实践。

3.1 基础环境准备:Node.js与Solana CLI

首先,确保你的系统已安装Node.js 18或更高版本。我推荐使用nvm来管理Node.js版本,这样可以灵活切换。

# 安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash # 重新加载shell配置 source ~/.bashrc # 安装Node.js 18 nvm install 18 nvm use 18 # 验证 node --version

接下来是Solana CLI的安装。即使你只使用X1网络(一个基于Solana的L2),也需要它来管理钱包和签名交易。

# 安装Solana CLI sh -c "$(curl -sSfL https://release.solana.com/stable/install)" # 安装完成后,根据提示将solana的bin目录加入PATH # 通常需要执行类似下面的命令,具体路径以安装输出为准 export PATH="/root/.local/share/solana/install/active_release/bin:$PATH" # 可以将其写入 ~/.bashrc 以便永久生效 echo 'export PATH="/root/.local/share/solana/install/active_release/bin:$PATH"' >> ~/.bashrc source ~/.bashrc # 验证安装 solana --version solana config set --url https://rpc.mainnet.x1.xyz # 将默认RPC设置为X1网络

重要提示:Solana CLI的安装脚本可能会修改你的shell配置文件。如果安装后solana命令找不到,请检查你的~/.bashrc~/.zshrc文件,确认安装脚本添加的PATH路径是否正确,并执行source命令重新加载。

3.2 钱包创建与资金准备

AegisMemory需要一个Solana钱包来支付区块链交易手续费(锚定操作)以及派生加密密钥。请务必在安全的环境下操作,并妥善备份助记词或密钥文件。

# 生成一个新的密钥对(钱包) solana-keygen new --outfile ~/.config/solana/id.json # 系统会提示你输入密码来加密本地密钥文件,并显示助记词。请务必记录并离线保存助记词! # 查看生成的公钥(钱包地址) solana address --keypair ~/.config/solana/id.json # 输出类似:9SksTs4MBiqpK3aBxDhzrVforfsR2u9hAaawdrFsNPjd # 检查余额(初始为0) solana balance

现在你需要向这个钱包地址转入少量SOL。因为X1网络使用SOL作为Gas费,你需要从其他交易所或钱包(如Phantom)转账到上述地址。

成本估算与实操建议

  • 每笔锚定交易约消耗0.000005 SOL
  • 如果采用默认的“每日锚定”模式,一年仅需约0.0018 SOL
  • 即使采用“每次保存都锚定”的模式,按每天100次对话计算,一年也仅需约0.18 SOL
  • 建议初次转入0.1-0.5 SOL,这足以支持数万甚至数十万次操作,相当长一段时间内都无需再充值。
  • 你可以随时使用solana balance命令查看余额。

转账完成后,再次确认余额:

solana balance --url https://rpc.mainnet.x1.xyz

3.3 安装与配置AegisMemory插件

假设你的OpenClaw项目目录为~/my-openclaw-agent

# 1. 克隆AegisMemory仓库 cd ~ git clone https://github.com/Xenian84/aegismemory.git cd aegismemory npm install # 2. 作为OpenClaw插件安装(推荐方式) # 进入你的OpenClaw代理目录 cd ~/my-openclaw-agent # 将AegisMemory链接为本地插件 openclaw plugins install ~/aegismemory openclaw plugins enable aegismemory

接下来是关键的配置环节。AegisMemory支持通过环境变量或OpenClaw配置文件进行配置。我强烈推荐使用两者结合的方式:敏感信息(如私钥)放在环境变量,通用配置放在openclaw.json

第一步:配置环境变量在AegisMemory目录或项目根目录创建.env文件:

cd ~/aegismemory cp .env.example .env nano .env

编辑内容如下(注意:私钥是高度敏感信息,切勿泄露):

# 你的钱包公钥 AEGISMEMORY_WALLET_PUBKEY=9SksTs4MBiqpK3aBxDhzrVforfsR2u9hAaawdrFsNPjd # 你的钱包私钥(Base58编码格式)。可以通过以下命令获取: # solana-keygen pubkey ~/.config/solana/id.json | xargs solana-keygen decode - | grep -oP ‘[A-HJ-NP-Za-km-z1-9]{40,}’ AEGISMEMORY_WALLET_SECRET_KEY=你的Base58编码私钥字符串 # 你的智能体唯一标识 AEGISMEMORY_AGENT_ID=theo_bot_v1 # 启用锚定功能,并指定X1网络RPC AEGISMEMORY_ANCHOR_ENABLED=true AEGISMEMORY_ANCHOR_RPC_URL=https://rpc.mainnet.x1.xyz # 使用TOON格式以节省空间 AEGISMEMORY_MEMORY_FORMAT=toon

第二步:配置OpenClaw插件编辑你的OpenClaw配置文件~/.openclaw/openclaw.json

{ "plugins": { "entries": { "aegismemory": { // 公钥和Agent ID可以在这里覆盖,但私钥建议只放在.env "walletPubkey": "9SksTs4MBiqpK3aBxDhzrVforfsR2u9hAaawdrFsNPjd", "agentId": "theo_bot_v1", // 记忆存储格式,可选 'toon' 或 'json' "memoryFormat": "toon", // 是否在智能体启动时加载最近记忆 "recallEnabled": true, // 是否在智能体结束时自动保存记忆 "addEnabled": true, // 是否启用区块链锚定 "anchorEnabled": true, // X1网络RPC端点 "anchorRpcUrl": "https://rpc.mainnet.x1.xyz", // 本地保留的最大记忆条数(不影响IPFS存储) "memoryLimit": 100, // 捕获策略:'full'保存完整对话,'summary'可尝试保存总结(需智能体支持) "captureStrategy": "full" } }, // 关键:将AegisMemory注册为默认的记忆槽提供者 "slots": { "memory": "aegismemory" } } }

3.4 验证安装与初步测试

配置完成后,进行一个快速的完整性测试。

# 进入AegisMemory目录 cd ~/aegismemory # 运行状态检查命令 ./bin/aegismemory.js status

如果一切配置正确,你将看到类似下面的输出:

AegisMemory Status ================== Wallet: 9SksTs4MBiqpK3aBxDhzrVforfsR2u9hAaawdrFsNPjd (Balance: 0.5 SOL) Agent: theo_bot_v1 Memory Format: toon Anchor Enabled: true RPC: https://rpc.mainnet.x1.xyz Queue: 0 pending jobs State: No memories yet

看到钱包地址、余额和配置信息正确显示,说明基础配置和连接都已成功。至此,AegisMemory的安装与基础配置就完成了。你的OpenClaw智能体在接下来的对话中,将会自动享受加密记忆存储服务。

4. 核心功能实战与CLI工具深度使用

安装配置只是第一步,AegisMemory真正的威力体现在其丰富的功能和CLI工具上。这部分我将带你深入每个核心操作,并分享一些手册里不会写的实用技巧。

4.1 记忆的保存、召回与验证流程

当你的OpenClaw智能体(例如Theo)运行并配置了AegisMemory插件后,记忆的保存是完全自动化的。但了解其内部流程和如何手动干预,对于调试和高级用法至关重要。

自动化保存流程

  1. 触发:智能体完成一次对话回合(agent_end生命周期钩子)。
  2. 捕获:AegisMemory插件捕获本次对话的完整消息历史。
  3. 加密:使用钱包私钥派生的密钥,通过AES-256-GCM算法加密对话数据。
  4. 上传:将加密后的数据立即上传至X1 Vault (IPFS),获得一个唯一的CID。
  5. 链接:将新CID与上一次保存的CID链接,形成链条。
  6. 状态更新:在本地状态文件中记录最新CID等信息。
  7. 队列:将“锚定”任务放入一个持久化队列(如果启用锚定)。
  8. 锚定:队列处理器会在适当时机(例如每日一次)将CID的哈希值提交到X1区块链。

你可以通过CLI工具手动模拟或检查这一流程:

# 手动触发一次记忆保存(假设你有一个测试对话文件 test_convo.json) # 首先,你需要按照TOON或JSON格式准备数据。更常见的是通过智能体自动完成。 # 召回最近N条记忆 ./bin/aegismemory.js recall --limit 5

recall命令会从IPFS获取并解密最近的记忆,并以可读格式输出。一个实用技巧:使用--format json参数可以输出原始JSON,便于用jq等工具进行二次处理。

./bin/aegismemory.js recall --limit 1 --format json | jq .

验证记忆的完整性: 这是AegisMemory的核心价值之一。你可以通过CID验证一段记忆是否完好无损,并且是否被正确锚定在链上。

# 假设你从 recall 命令或日志中获得了某个CID: QmXyz... ./bin/aegismemory.js verify --cid QmXyz...

这个命令会执行以下检查:

  1. IPFS检索:从网络获取加密数据。
  2. 解密验证:尝试用你的钱包密钥解密,确认密钥正确。
  3. 哈希校验:计算解密后内容的SHA256哈希,与元数据中记录的哈希值比对。
  4. 链式验证:检查该记忆的prev_cid是否指向一条已知的有效记录。
  5. 区块链锚定验证(需加--rpc参数):连接到X1网络,查询该CID的哈希值是否存在于区块链的Memo交易中。
./bin/aegismemory.js verify --cid QmXyz... --rpc

如果所有检查都通过,你会看到“All verifications passed”的提示,这给了你十足的信心——这段记忆是真实、完整且经过时间公证的。

4.2 语义搜索与记忆管理(v2.1+)

从v2.1版本开始,AegisMemory引入了基于向量嵌入的语义搜索,这改变了你与记忆交互的方式。

基础搜索: 不再需要精确匹配关键词,你可以用自然语言描述你要找的内容。

./bin/aegismemory.js search "用户询问关于钱包安全的问题" --limit 3

系统会将你的查询语句和所有记忆的文本内容转换为384维的向量,然后计算余弦相似度,返回相关性最高的结果。输出会包含一个分数(0到1之间,1为完全相关)。

高级过滤

# 搜索特定Agent的记忆(在多Agent场景下有用) ./bin/aegismemory.js search "节点配置" --agent theo --limit 5 # 设置最低相关性阈值,过滤掉低分结果 ./bin/aegismemory.js search "宕机处理" --min-score 0.65

HTML可视化查看: 这是一个非常实用的功能,尤其当你想回顾一段较长的对话时。

./bin/aegismemory.js view --cid QmAbC123...

这个命令会:

  1. 获取并解密指定CID的记忆。
  2. 生成一个带有样式的HTML文件(默认保存在/tmp/convo.html)。
  3. 自动用你系统的默认浏览器打开该文件。 在HTML视图中,不同角色的对话会以不同颜色高亮(例如用户是蓝色,助手是绿色),时间戳清晰,阅读体验远好于终端纯文本。

实操心得search功能依赖于在保存记忆时生成的向量嵌入。确保你的captureStrategy配置为full,以便保存完整的对话文本供索引。首次对大量历史记忆进行搜索时,可能会需要一些时间生成嵌入向量,请耐心等待。

4.3 跨智能体记忆共享详解(v3.1+)

这是v3.1版本最强大的功能之一,它允许不同的AegisMemory实例(即不同的智能体)在授权的前提下安全地共享记忆。这为构建协作型AI网络奠定了基础。

核心概念:许可即访问跨智能体共享不是开放的。Agent A必须明确授权给Agent B,B才能访问A的记忆。授权分为两种模式:

  1. 一次性共享令牌:针对单条特定记忆。
  2. 持续访问权限:针对共享者当前及未来的所有记忆。

实战演练:假设你有两个智能体,Theo(钱包A)和Alice(钱包B)

场景一:Theo想与Alice分享某次关于“X1网络升级”的对话记忆(CID: QmShareThis)

# 1. 在Theo的AegisMemory实例上操作,生成一个分享令牌 # 切换到Theo的目录和环境 cd /path/to/theo_aegismemory ./bin/aegismemory.js share --cid QmShareThis --agent Alice_Wallet_Address # 输出: aegis://QmShareThis/Theo_Wallet_Address/EncryptedKeyString # 2. Theo将这个令牌字符串通过安全渠道(如加密消息)发送给Alice。 # 3. 在Alice的AegisMemory实例上操作,导入该记忆 cd /path/to/alice_aegismemory ./bin/aegismemory.js import --token "aegis://QmShareThis/Theo_Wallet_Address/EncryptedKeyString"

导入成功后,Alice就可以像查看本地记忆一样,使用recall,view,search等命令来查看这条来自Theo的共享记忆了。关键点:这个令牌仅对QmShareThis这一条记忆有效。

场景二:Theo希望Alice能长期查询自己所有关于“开发教程”的记忆

# 1. Theo授予Alice持续访问权限 cd /path/to/theo_aegismemory ./bin/aegismemory.js grant --agent Alice_Wallet_Address # 2. 现在,Alice可以主动查询Theo的记忆库了 cd /path/to/alice_aegismemory # 查询Theo所有记忆中关于“开发教程”的内容 ./bin/aegismemory.js query --from Theo_Wallet_Address --search "开发教程" --limit 5 # 或者直接获取Theo的一条特定记忆(如果她知道CID) ./bin/aegismemory.js query --cid QmSpecificMemory --from Theo_Wallet_Address

权限管理

# Theo可以查看他给哪些人授予了权限 ./bin/aegismemory.js permissions # 输出列表显示 Alice_Wallet_Address 等信息 # 如果Theo想取消Alice的访问权限 ./bin/aegismemory.js revoke --agent Alice_Wallet_Address

权限信息被加密存储在授权方的本地,无需中心化服务器协调,实现了去中心化的信任。

安全警告grant操作请谨慎使用。授予持续访问权限意味着对方在你撤销权限前,可以解密并读取你未来生成的所有记忆。务必只授予你完全信任的合作伙伴。对于临时或一次性的分享,优先使用share命令生成令牌。

4.4 Cyberdyne用户档案系统实战(v3.0+)

这是一个独立但强大的功能,用于在IPFS上创建和管理加密的用户声誉档案。其“零知识”架构意味着,处理这些档案的AI智能体(如Theo)在服务过程中,永远接触不到明文的档案数据,只有在用户明确授权(通过钱包签名)的特定解密场景下,数据才会被临时解密使用。

创建你的第一个用户档案: 假设你在运营一个社区助手Theo,用户“Skywalker432”(Telegram ID: 5451495644)在社区中活跃,获得了417分,排名第8。

./bin/aegismemory.js cyberdyne-create \ --telegram-id 5451495644 \ --username Skywalker432 \ --score 417 \ --rank 8 \ --tier HARMONIC \ --display-name "Skywalker" \ --xp 17 \ --level 4

这个命令会:

  1. 将你提供的档案数据(包含身份、声誉、贡献等)结构化。
  2. 使用调用者的钱包私钥(即Theo运营者的钱包)对档案进行加密。
  3. 将加密后的数据上传到IPFS,获得一个档案CID。
  4. 在本地建立一个索引,将telegram-id映射到该CID。

在OpenClaw工具中集成: 在你的Theo bot代码中,可以这样使用:

// 当需要获取用户档案时 const profileResult = await ctx.tools.cyberdyne_get_profile({ telegram_id: userTelegramId }); if (profileResult.success) { // profileResult.data 包含了解密后的完整档案信息 const userScore = profileResult.data.reputation.score; const userTier = profileResult.data.reputation.tier; // Theo可以根据用户的层级和分数,提供差异化的服务或响应 if (userTier === ‘HARMONIC’) { await ctx.reply(`尊敬的Harmonic成员,您有${userScore}积分,可享受专属服务。`); } }

高级操作

# 列出所有已创建的档案索引 ./bin/aegismemory.js cyberdyne-list # 获取某个档案的详细统计信息(需要解密) ./bin/aegismemory.js cyberdyne-stats --telegram-id 5451495644 # 更新档案(例如用户分数增加) ./bin/aegismemory.js cyberdyne-update \ --telegram-id 5451495644 \ --score 425 \ --rank 7

更新操作实际上是创建了一个新版本的加密档案,并将其CID链接到旧版本,形成了档案的修改历史链。

架构优势解读:为什么这是“零知识”?AI智能体Theo的代码逻辑里,只持有加密后的CID和调用cyberdyne_get_profile工具的能力。当需要读取档案时,这个工具调用会由OpenClaw框架路由到AegisMemory插件执行。插件会用本地存储的、对应的钱包私钥来解密数据。这意味着,运行Theo的服务器或平台,如果本身不是档案的创建者/持有者(没有对应的私钥),就无法解密档案内容。从而实现了用户数据对AI服务提供方的保密。

5. 生产环境部署、监控与故障排查指南

将AegisMemory用于生产环境时,除了基本功能,更需要关注其可靠性、可观测性和问题处理。这里分享我总结的一套实践方案。

5.1 配置优化与最佳实践

1. 锚定频率策略选择

  • daily(默认):平衡安全性与成本的最佳选择。每天首次需要保存记忆时,会执行一次锚定交易。适合大多数对话频率中等或较低的场景。
  • every_save:每次保存记忆都进行锚定。提供了最高的可验证性粒度,但Gas费消耗与对话次数成正比。适用于对审计追踪有极端要求、或对话频率本身就很低的场景。
  • never:完全禁用区块链锚定。记忆仍会加密存储在IPFS上,但失去了不可篡改的时间戳证明。仅适用于纯测试或成本极度敏感且不需要存证的场景。

配置方法:在.env文件中设置AEGISMEMORY_ANCHOR_FREQUENCY=daily(或every_save,never)。

2. 状态文件与队列持久化AegisMemory在~/.aegismemory/目录下维护状态:

  • state.json: 记录当前Agent ID、最新CID、上次锚定时间等关键状态。建议定期备份此文件,它是恢复记忆链的关键。
  • queue/目录:存放待处理的锚定任务(LevelDB格式)。确保运行AegisMemory的用户对该目录有写权限。

3. 钱包安全与密钥管理

  • 绝对不要将私钥明文提交到代码仓库或配置文件中。始终使用.env文件,并将其加入.gitignore
  • 生产服务器上,考虑使用硬件钱包(如Ledger)通过solana-keygen派生出的“无权限”密钥对进行签名,这样私钥永不离开硬件设备。
  • 或者,使用环境变量注入(如Docker secrets、Kubernetes secrets、AWS Secrets Manager)来传递私钥,而非文件存储。

4. RPC端点选择与降级

  • https://rpc.mainnet.x1.xyz是官方主网端点。如果遇到连接问题,可以尝试社区或第三方提供的公共RPC。
  • 在配置中,可以将anchorRpcUrl设置为备用端点。如果锚定功能因RPC问题暂时失败,记忆仍会安全保存在IPFS,队列中的任务会等待重试。

5.2 系统监控与健康检查

你需要知道系统是否在正常运行。除了直接查看日志,可以建立简单的监控脚本。

创建一个健康检查脚本check_aegis.sh

#!/bin/bash cd /path/to/aegismemory LOG_FILE="/var/log/aegismemory_health.log" # 1. 检查进程是否存活(假设你通过PM2等进程管理器运行) if ! pgrep -f "node.*aegismemory" > /dev/null; then echo "$(date): AegisMemory process not found!" >> $LOG_FILE # 这里可以加入告警通知,如发送邮件、Slack消息等 exit 1 fi # 2. 检查钱包余额 BALANCE=$(./bin/aegismemory.js status 2>/dev/null | grep -oP ‘Balance: \K[0-9.]+‘) if [ -z "$BALANCE" ]; then echo "$(date): Failed to get wallet balance." >> $LOG_FILE exit 1 fi # 如果余额低于阈值(如0.01 SOL),发出警告 THRESHOLD=0.01 if (( $(echo "$BALANCE < $THRESHOLD" | bc -l) )); then echo "$(date): Wallet balance low: $BALANCE SOL" >> $LOG_FILE # 触发充值提醒 fi # 3. 检查队列积压 PENDING_JOBS=$(./bin/aegismemory.js status 2>/dev/null | grep -oP ‘Queue: \K[0-9]+‘) if [ -n "$PENDING_JOBS" ] && [ "$PENDING_JOBS" -gt 10 ]; then echo "$(date): Queue backlog high: $PENDING_JOBS jobs" >> $LOG_FILE # 可以考虑手动触发 replay-queue # ./bin/aegismemory.js replay-queue & fi echo "$(date): Health check passed. Balance: $BALANCE SOL, Queue: $PENDING_JOBS" >> $LOG_FILE

将此脚本加入crontab,每5分钟执行一次。

关键指标监控

  • 磁盘空间:IPFS缓存和状态文件可能增长,监控~/.aegismemory/目录大小。
  • 网络连接:确保服务器能稳定访问https://vault.x1.xyz(IPFS) 和https://rpc.mainnet.x1.xyz(区块链)。
  • 错误日志:OpenClaw和AegisMemory自身的运行日志是首要的问题排查点。

5.3 常见问题与故障排查实录

以下是我在运维过程中遇到过的典型问题及解决方法。

问题1:状态检查失败,提示“Wallet balance check failed”或RPC连接错误。

  • 可能原因1:RPC端点不稳定或不可用。
    • 排查:使用curl -s https://rpc.mainnet.x1.xyz -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getHealth"}'测试RPC连通性。
    • 解决:在配置中更换为备用RPC URL,或稍后重试。
  • 可能原因2:钱包密钥配置错误或权限不足。
    • 排查:运行solana balance <你的钱包地址> --url https://rpc.mainnet.x1.xyz确认余额可查。如果失败,说明密钥或地址有误。
    • 解决:仔细检查.env文件中的AEGISMEMORY_WALLET_PUBKEYAEGISMEMORY_WALLET_SECRET_KEY值是否正确。确保私钥是Base58编码格式。

问题2:记忆保存成功,但一直未锚定上链(lastAnchoredDate很久未更新)。

  • 可能原因1:队列处理器未运行或卡住。
    • 排查:运行./bin/aegismemory.js status查看Queue是否有积压的pending jobs
    • 解决:手动运行./bin/aegismemory.js replay-queue处理积压任务。检查进程日志,看是否有持续的锚定错误。
  • 可能原因2:Gas费不足。
    • 排查:检查钱包余额是否低于0.001 SOL(虽然单次交易费用极低,但余额太少可能影响交易构造)。
    • 解决:向钱包转入少量SOL。
  • 可能原因3:时钟不同步。
    • 排查:服务器系统时间是否准确?AegisMemory使用UTC日期判断是否是新的一天。
    • 解决:安装并启用ntp服务,确保时间同步。

问题3:recallsearch命令返回空或报错“CID not found”。

  • 可能原因1:本地状态文件损坏或丢失。
    • 排查:检查~/.aegismemory/state.json文件是否存在且内容有效(包含latestCid字段)。
    • 解决:如果你有备份,恢复state.json。如果没有,你可能需要从区块链上记录的最后一个锚定交易中解析出CID,然后手动重建状态,这是一个复杂的过程,凸显了定期备份的重要性。
  • 可能原因2:IPFS网络暂时无法检索到该CID。
    • 排查:尝试使用公共网关访问https://ipfs.io/ipfs/<CID>(注意,这是加密数据,你看不懂是正常的,但应该能下载)。或者使用curl -s https://vault.x1.xyz/ipfs/api/v0/cat?arg=<CID>
    • 解决:IPFS是分布式网络,有时需要等待数据传播。稍后再试。确保你的上传节点(X1 Vault)运行正常。

问题4:跨智能体共享时,importquery失败,提示解密错误。

  • 可能原因1:分享令牌无效或已过期。一次性令牌在使用后即失效。
  • 可能原因2:授权已被撤销。如果使用grant授权,对方可能执行了revoke
  • 可能原因3:源Agent的钱包密钥已更改。如果源Agent更换了钱包,用旧钱包加密的共享密钥将无法被新钱包解密。
  • 解决:联系共享方重新提供有效的令牌或重新授权。

问题5:Cyberdyne档案创建成功,但智能体工具调用cyberdyne_get_profile返回空。

  • 可能原因:OpenClaw工具路由配置不正确。
    • 排查:确认在openclaw.jsonplugins.entries中正确配置了aegismemory,并且plugins.slots.memory指向了它。
    • 解决:重启OpenClaw智能体,确保插件被正确加载。检查OpenClaw的日志,看工具调用是否被正确转发到AegisMemory插件。

5.4 备份与恢复策略

任何生产系统都需要备份计划。对于AegisMemory,关键数据包括:

  1. 钱包助记词/私钥:离线、物理方式多重备份。这是所有数据的解密钥匙,一旦丢失,所有加密记忆将永久无法读取。
  2. ~/.aegismemory/state.json文件:定期备份(例如每天)。这个文件记录了记忆链的头部CID。结合区块链上的锚定记录,你可以从任何CID开始向前追溯恢复整条链。
  3. ~/.aegismemory/queue/目录:可以备份,但非必须。如果丢失,未锚定的任务需要重新触发。

简易恢复流程(假设钱包密钥完好,但state.json丢失):

  1. 从备份中恢复state.json文件到~/.aegismemory/
  2. 运行./bin/aegismemory.js verify --cid <latest_cid_from_state> --rpc验证最新记忆的完整性和锚定状态。
  3. 运行./bin/aegismemory.js recall测试记忆召回。 如果state.json也丢失了,你需要:
  4. 从区块链浏览器上,找到你的钱包地址最近的Memo交易,从中提取出CID。
  5. 手动创建一个新的state.json,填入该CID作为latestCid
  6. 由于链式结构,你可以通过该CID在IPFS上找到前一个记忆的CID,逐步向前恢复,直到无法找到更早的记录为止。这个过程可以编写脚本自动化,但相对复杂。

经过以上步骤,你的AegisMemory系统应该已经成为一个健壮、可观测、可恢复的生产级组件,能够为你的OpenClaw智能体提供坚实可靠的记忆基石。这套系统将数据的隐私、主权和完整性牢牢掌握在你手中,是构建可信、可审计AI应用的关键基础设施。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询