mcpField
A
Audrey

Audrey

本地服务
npmjs.com记忆与知识265 周前更新

关于 Audrey

Audrey 是面向 Codex 和 Claude Code 的本地持久化记忆引擎,可在会话开始和提交提示词时召回相关信息,并在工具执行前检查操作。适合希望代理记住项目经验并避免重复失败的开发者。

主要功能

  1. 01会话开始时注入记忆摘要
  2. 02提示词触发的相关记忆召回
  3. 03工具执行前的操作检查
  4. 04记录工具执行结果并关联
  5. 05记忆过期与矛盾标记
  6. 06本地 SQLite 存储

适用场景

  1. 01避免代理重复执行已失败的部署命令
  2. 02记录仓库约定,使新会话自动遵守
  3. 03检测已失效的脚本或路径引用

MCP 相关

该项目是 MCP 服务,README 未明确说明其 MCP 接口的具体工具内容。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"Audrey": {
"command": "npx",
"args": [
"-y",
"audrey"
],
"env": {
"AUDREY_DATA_DIR": "<AUDREY_DATA_DIR>",
"AUDREY_AGENT": "<AUDREY_AGENT>"
}
}
}
}
启动命令npx -y audrey
需要配置的环境变量
AUDREY_DATA_DIRDirectory for the SQLite memory store (defaults to ~/.audrey/data)
AUDREY_AGENTLogical memory owner used for scoped operations (defaults to the host name)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmaudrey1.3.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Audrey

让你的编码 Agent 不再犯同样的错误,记忆总在它行动之前出现。

Audrey 为 Codex 和 Claude Code 提供一套本地、有据可依的记忆闭环: 记住重要的事、自动回忆、行动前先核查,并从后续结果中学习。

CI npm version MIT license

你的 Agent 应该记住工作本身,而不只是对话

你在周一修好了部署命令。到了周四,一个新会话又去尝试那个坏掉的版本。

你解释过这个仓库从不提交生成的文件。下一个 Agent 却热心地把它们提交了。

你发现了一条微妙的迁移规则,把它记在某个地方,却仍然得记得把它粘贴进每一次新对话。

这就是 Audrey 要弥补的缺口。

Audrey 就坐在 Agent 旁边,自动参与到工作中。会话开始时,它会带回一小份相关的记忆包。当你提交提示词时,它会回忆起项目事实、偏好、流程和近期风险。在带有副作用的工具运行之前,Audrey 会依据过往证据核查拟议的操作。之后,它会把结果关联回紧接其前的那次核查。

模型不必记住存在某个记忆工具。这正是关键所在。

认识 Audrey Autopilot

安装一次 Audrey,审阅一次 hooks,然后照常使用 Codex 或 Claude Code。

npm install -g audrey
audrey install --host auto

需要 Node.js 22.16+(22.x)或 24+。SQLite 已内置在 Node 中,因此全新安装和 npx 启动都无需批准依赖脚本即可运行。npm 11.17+ 可能会对依赖脚本发出警告,npm 12 可能会提示它阻止了这些脚本;Audrey 的 CPU 嵌入运行时并不需要这些脚本。

auto 会配置所有已安装且受支持的 CLI。你也可以明确指定一个:

audrey install --host codex
audrey install --host claude-code

安装后重启宿主。Codex 会让你通过 /hooks 信任一次非托管 hooks;Claude Code 也可能要求你批准项目或插件组件。经过这一步明确的安装与信任之后,Audrey 就是自动的——绝不会被偷偷安装。

随后 Autopilot 会闭合这个环路:

时机Audrey 做什么
会话开始注入一份精简的、限定于该 Agent 的记忆简报
你发送提示词回忆相关证据;诸如“remember that…”或“I prefer…”这类明确持久的表述可以成为记忆
提出 bash/edit/write核查确切的过往失败、受信规则、流程、矛盾之处以及记忆健康状况
工具执行完毕将 tool_use_id 关联到 Guard 回执,并记录脱敏后的结果
上报工具失败形成一条持久、经净化的失败记忆,供下次尝试使用
回合停止或上下文压缩运行轻量、仅处理到期项的整合,不阻塞对话

每个 hook 事件都带有宿主声明的超时(PreToolUse Guard 核查为 30 秒);Audrey 会让自身内部的嵌入/LLM 超时比该截止时间提前几秒结束,以便干净退出,而不是在竞速中输给宿主的强制终止。默认情况下,基础设施故障采用失败即放行:如果 Audrey 自身出错或超时,工具调用会无防护地继续,而不是冻结会话。设置 AUDREY_HOOK_FAIL_CLOSED=1,可在 PreToolUse 核查以此方式失败时改为拒绝该操作;其他生命周期 hook(会话开始、提示词回忆、工具执行后记账)没有可回退的“拒绝”行为,无论此设置如何都始终降级为放行。

一个关于部署失败的小故事

第一次尝试失败了:

$ npm run deploy
Error: deployment target is missing

Audrey 会保留一份经过脱敏的追踪记录以及确切的行动指纹。如果另一个会话在问题修复之前提出相同的行动,Guard 会返回带有证据的拒绝。更改命令或修复目标后,Audrey 会让工作继续进行。一旦该确切行动成功,旧的失败就不再阻止它。

这比“向量搜索找到了一个模糊相似的错误”更有用。Audrey 在行动之前创建回执,在行动之后记录发生了什么,并保留两者之间的谱系。

无需 API 密钥或网络调用即可尝试完整循环:

audrey demo --scenario repeated-failure

查看并不等于执行

在部署失败与重试之间,Agent 会运行大量无法改变任何东西的命令:用 grep 查找错误、git status、对配置文件执行 cat、对结果并不存在的目录执行 ls。一个记忆系统若把其中每一条都当作风险,或者把 grep 没有找到任何内容记作“失败”,就会变成一个在你烤面包时乱响的烟雾报警器。人们不再理会它,于是当烤面包机真的着火那天,它便一文不值。

Audrey 像工程师那样解读命令。一条命令的每一部分都被明确认定为只读(grep、git log、npm view、docker ps、sed -n '1,40p' 及其同类,且没有命令替换,除重定向到 /dev/null 外没有其他重定向,没有 sudo 或 xargs,没有可能改变动词解析结果的环境变量赋值),那么它根本不会到达 Guard。它的退出码会被记录,但绝不会被计为一课。其余一切照旧受到保护,任何 Audrey 无法明确识别的内容都被视为执行。

$ grep -rn "prisma" src/          Guard: silent
$ git status --short              Guard: silent
$ cat prisma/schema.prisma        Guard: silent
$ npm run deploy
Audrey Guard: BLOCKED
- recent_failure (high): This exact Bash action failed before: Prisma client was not generated. Run npm run db:generate before deploy.
- must_follow (high): Before running npm run deploy, run npm run db:generate because Prisma client must be generated first.

这是 audrey demo --scenario repeated-failure 的输出,它在没有 API 密钥和网络的情况下运行整个序列。

当 Guard 确实发言时,它会指明自己依据的是哪条记忆,而被记住的失败会依据所运行的命令(npm run deploy 对应 npm run deploy)与所提出的命令进行匹配,而不是依据两个字符串在嵌入向量中看起来有多相似。

带有可执行选项或生命周期脚本的命令会受到保护,包括 git ls-remote --upload-pack=...、npm pack --dry-run 和 ss -K。分类器只是为普通检查命令提供的便利,并不是操作系统沙箱。仓库配置、shell 展开以及由读取器调用的程序都可能改变一条命令的行为。在需要强制执行时,请使用主机权限或沙箱。

Audrey 记住了什么

Audrey 把记忆视为远不止一堆文本块。

  • 情节是发生过的事情:用户的决定、工具结果、项目事实、偏好。
  • 语义记忆是由累积证据支持的原则。
  • 程序性记忆是行动方式:如何重试、验证、避免或恢复。
  • 矛盾保持可见,而不是被静默覆盖。
  • 置信度会随来源质量、证据、时间、检索、干扰、上下文和反馈而变化。
  • 低价值记忆会衰减;重复的证据可以巩固为更持久的知让。

每个上下文包都包含记忆 ID、置信度、可获取时的来源,以及纳入原因。不确定或有争议的记忆会被标注为此类。检索到的内容会被一条简单规则包裹:记忆是证据,不是权威;当前的系统和用户指令永远优先。

当记忆不再为真

记忆出错并不只是因为时间久远。一条写着“用 npm run deploy:prod 发布”的笔记可能时效性极佳、来源可靠,但在该脚本被删除的那一天就彻底错了。更糟的是,每次召回都会强化它,因为检索本身就被当作记忆有用的证据。一个语气笃定、论据充分却错误的指令,比完全没有记忆更有害。

所以 Audrey 会做检查。当一条记忆被写入时,它会记录其中可对照项目验证的断言——仓库相对路径和 package 脚本名称——并且只保留在当时确实能解析的那些。正是最后这一点让这个信号有了价值:一条从未解析成功的断言,只是对拼写错误的猜测;而一条曾经解析成功、如今不再成功的断言,则意味着世界已经从一条仍自称有效的记忆脚下移开了。

audrey ground
[audrey] Grounding memories against /home/you/project
[audrey] Checked 14: 12 still true, 2 broken, 0 repaired.
[audrey]   01K8ZQ... references a missing npm_script: deploy:prod
[audrey]   01K8ZR... references a missing path: scripts/release.mjs

损坏的记忆不会被删除。它们保留内容,明确说明自己仍然指向什么,并接受置信度惩罚,从而默认不再起主导作用,但仍可读、可修复。它们也不再具备进入数据包 must-follow 部分的资格——那个部分可以强制触发 Guard 拦截,而一条指名了已不存在文件的规则,是没人能遵守的规则。

修复是对称的。恢复文件或脚本,下一次检查就会清除标记。一个已经迁移的检出会报告为未知,而不是损坏,因为一条记忆不应因为描述了本机当前看不到的项目而被否定。

没有可检查断言的记忆会保持未标注。沉默并不等于健康证明,把它当作健康证明,就是同一个错误指向了相反的方向。

它能做的一切,以及你什么时候会真正用到它

其中大部分功能在安装 Autopilot 后就会自行运行。你不需要调用 recall,也不需要调用 Guard。这张表列出的,是你会有意主动使用的部分,同时也让那些自动运行的部分变得清晰可读,而不是像魔法一样。

功能你何时需要它它为什么有用如何使用
Autopilot安装一次后,始终开启这就是核心所在。记忆会在 Agent 行动之前送达,而不是在你察觉出错之后才送达。audrey install --host auto,重启宿主,批准 hooks 一次
Guard在任何可能产生副作用的编辑、写入或 shell 命令之前自动触发会将确切的行动指纹与过往失败进行比对。不是“类似这样的东西曾经坏过”——而是这条确切的命令,至今仍然坏着。只读命令(grep、ls、git status)不受 Guard 保护,它们的非零退出也不会被记为失败。在 PreToolUse 时运行。手动执行:audrey guard --tool Bash --strict
Grounding在删除或重命名某条记忆可能提到的内容之后置信度告诉你一条记忆来源可靠。Grounding 告诉你它是否仍然为真。一条关于你已删除脚本的笔记,置信度很高,但内容是错的。audrey ground,或让维护清扫来执行
会话简报会话开始时自动触发小巧、范围明确的包,而不是每次都粘贴上下文。未变更的记忆每个会话只注入一次;内容或状态有变化的记忆会再次发送。SessionStart hook。用 audrey greeting 预览
显式捕获当你说“记住……”或“我偏好……”时有意留下的记忆比推断出来的更有价值,而这样表达就足够了。直接输入即可。Autopilot 会识别这些句式
整合空闲时自动触发;长时间休息前手动执行重复的事件片段会归并为一条原则。否则存储里就是一堆近乎重复的内容,recall 会变得嘈杂。audrey dream
矛盾当两条记忆互相冲突时任何一方都不会悄悄胜出。两者都会保持可见并带有标注,直到有东西解决它们。在包中呈现;用 memory_resolve_truth 来裁定
衰减自动触发低价值的记忆会淡出。被强化的记忆会保留下来。与整合在同一次清扫中运行。属于 audrey dream 的一部分
提升当某个模式值得成为仓库规则时把一个学到的习惯从记忆中移出,放进团队可以阅读和审查的文件里。先执行 audrey promote --dry-run
影响当你想知道这一切是否在起作用时显示哪些记忆被使用过,以及它们是否有帮助。回答“这东西是否值得保留”。audrey impact --window 30
快照备份,或迁移到新机器时完整存储保存在一个 JSON 文件中。导入时将其视为不受信任:导入过程中会进行脱敏并去除信任标记。AUDREY_ENABLE_ADMIN_TOOLS=1,然后 memory_export / memory_import
Doctor包不再送达时两个真正的原因是 hook 入口点发生偏移,以及整合长期得不到执行。Doctor 会指出是哪一个。audrey doctor
Demo在信任这一切之前无需 API key、无需网络即可运行整个循环。无需任何配置就能看到它工作。audrey demo --scenario repeated-failure
REST sidecar不是 Codex 或 Claude Code 的自定义 Agent相同的记忆运行时,相同的证据契约,通过 HTTP 提供。包含 Python 和 JS 客户端。在设置了 AUDREY_API_KEY 的情况下运行 audrey serve

Audrey 刻意不做的事

Audrey 默认不会把你的记忆上传到托管服务。它不会把每一句话都当作永久真理。它不会把任意工具输出中的指令提升为受信任的策略。它不会声称一个小型本地基准测试就证明了最先进的记忆质量。

原始提示词事件和工具正文默认不会保留。Audrey 存储哈希、有界摘要、指纹和脱敏元数据。显式的用户记忆语言会被有意持久化;工具失败记忆会先经过净化。除非设置 AUDREY_ENABLE_ADMIN_TOOLS=1,否则管理导出/导入/遗忘/提升相关接口处于禁用状态。

静态加密、绑定身份的租户授权、速率限制和合规保留目前仍是部署方的责任。它们不会被隐藏在“生产就绪”的徽章背后。

为什么团队可能真的需要这个

更少的重复错误

Guard 会在记忆可能改变行动的位置检查它,而不是在损害发生之后。精确的失败指纹避免了那种嘈杂的“一个 Bash 命令失败了,所以所有 Bash 命令都可疑”的行为。

跨 Agent 会话的连续性

Audrey 不绑定于某一个模型供应商。Codex 和 Claude Code 使用相同的记忆运行时和相同的证据契约。MCP、REST、JavaScript 和 Python 客户端也让核心能力可用于自定义 Agent。

人类可以检查的证据

允许、警告和阻止决策都带有回执和证据 ID。结果记录会连接回这些回执。团队不仅可以问“Agent 记住了什么?”,还可以问“哪条记忆改变了这次行动,那是否有用?”

本地控制

默认存储是 SQLite、FTS5 和 sqlite-vec。默认使用本地嵌入。云端嵌入或大模型提供商需要显式配置。

更安全的共享存储

按 Agent 作用域的召回会继续经过验证、矛盾检测、干扰、情感、失败查找、胶囊、问候、Guard 和 REST 请求路由。召回会为其返回结果更新检索簿记(语义记忆和程序记忆的使用次数与最后强化时间戳)。胶囊和 Guard 过滤可能会进一步收窄这些结果。显式验证反馈(memory_validate / /v1/validate)会单独根据记忆实际表现来调整显著性,而不仅仅是因为它被召回了。

向量候选会在最近邻排序之前按 Agent 分区,因此一个繁忙的 Agent 无法在有界搜索中把另一个挤出去。对于硬性租户边界,仍应为每个租户或安全域使用不同的 AUDREY_DATA_DIR。

在安装任何东西之前先看看

npm exec --yes --package=audrey -- audrey demo --scenario repeated-failure

该命令会从 npm 缓存运行,演练完整的由 SQLite 支持的 Guard 循环,并且不改变主机配置。

Audrey 记忆连续性、召回、证据、本地存储,以及行动前记忆

我们想把它带到哪里

目标是打造面向 Agent 的时间证据图:不可变观察、显式有效窗口、来源信任、演化中的声明、限定作用域的过程,以及基于结果校准的策略。真正站得住脚的部分不是存储更多文本。而是知道曾经相信什么、为什么相信、在什么上下文中相信、相信了多久,以及据此行动是否有帮助。

近期工作包括持久后台认知任务、绑定凭据的租户命名空间、记忆隔离与污染传播、公开长期评估、加密备份选项,以及一个持久本地守护进程,彻底消除每个 hook 的模型启动。

如果这正是你想构建的那种 Agent 基础设施,请开一个 issue,或者从演示开始。Audrey 采用 MIT 许可证,产品边界是有意可检查的。


技术参考

下面全部是机制。上面的简短版本才是产品。

环境要求与包
  • Node.js 22.16+(22.x)或 24+;不再支持 Node 20 和 23
  • npm 包:audrey
  • Python 客户端:audrey-memory
  • 默认存储:本地 SQLite + FTS5 + sqlite-vec
  • 默认嵌入:本地 384 维模型
npm install audrey
pip install audrey-memory

Audrey 使用 node:sqlite;sqlite-vec 在平台包中提供其扩展。本地嵌入运行时也包含其 CPU 二进制文件,因此 npm install --ignore-scripts audrey 可以正常工作。请保持可选依赖项启用:它们包含 sqlite-vec 和 sharp 的平台文件。GPU 加速可能需要针对你的平台提供额外的 ONNX Runtime 库。某些受支持的 Node 版本会在启动时打印实验性 SQLite 警告;这不会妨碍运行。

对于 Autopilot,优先使用全局或其他稳定安装方式。Hook 和 MCP 配置会固定实际的 Node 可执行文件和 Audrey 入口点;临时性的 npx 缓存不是持久的生产运行时。

宿主配置

独立预览或应用生命周期 hook:

audrey hook-config claude-code
audrey hook-config claude-code --apply --scope local
audrey hook-config claude-code --apply --scope project
audrey hook-config claude-code --apply --scope user

audrey hook-config codex
audrey hook-config codex --apply --scope project
audrey hook-config codex --apply --scope user

Claude Code 作用域映射遵循宿主的术语:

  • local → .claude/settings.local.json
  • project → .claude/settings.json
  • user → ~/.claude/settings.json

Codex 支持项目级 .codex/hooks.json 和用户级 ~/.codex/hooks.json;它没有本地 hook 作用域。Audrey 会保留无关的 hook,替换较旧的 Audrey 自有处理器,写入带时间戳的私有备份,并在重复安装时保持幂等。与项目相邻的备份名称匹配 *.audrey-*.bak;请保持该模式被忽略,因为宿主配置可能包含无关的凭据。

Audrey 遵循 CLAUDE_CONFIG_DIR 和 CODEX_HOME。生成的 hook 会固定安装时使用的稳定 Node 可执行文件、Audrey 入口点、数据目录、Agent 身份和非机密 provider 选择。使用本地嵌入时,Autopilot 安装会执行一次预热,以免第一个真实 hook 同时也是第一次模型加载;设置 AUDREY_DISABLE_WARMUP=1 可跳过预热。

生成 MCP 配置但不应用:

audrey mcp-config codex
audrey mcp-config generic
audrey mcp-config vscode

使用安装时相同的宿主和作用域移除 Audrey 自有的 MCP 注册和 hook:

audrey uninstall --host auto --scope user
audrey uninstall --host claude-code --scope local
audrey uninstall --host codex --scope project

添加 --dry-run 可在不更改任一宿主的情况下预览卸载。仅当你有意保留 Audrey hook 时,才添加 --mcp-only。

Autopilot 安全契约

共享的 hook 适配器会规范化当前 Codex 和 Claude Code 的 payload。

  • 上下文注入受 AUDREY_CONTEXT_BUDGET_CHARS 限制(默认为 4000;除非另有覆盖,Autopilot 使用更保守的 3200 字符数据包)。
  • 提示词和工具检索查询在嵌入前会先被限制。大型编辑携带哈希和长度,而非文件正文;精确的 Guard 身份使用完整的脱敏摘要,而非截断的前缀。
  • 生成的默认 hook 会守卫并观察 Bash、Edit、MultiEdit、Write、NotebookEdit、apply_patch,以及来自已连接 MCP 服务的每个 mcp__* 工具,但排除 Audrey 自身的内存工具,这样 Guard 永远不会守卫自己。
  • 只有当 Bash 命令可能产生副作用时才会被守卫。如果一条命令的每一部分都被明确识别为只读(grep、ls、sed -n、git status、npm ls 及类似命令;没有命令替换,除了重定向到 /dev/null 外没有重定向,没有 sudo、xargs 或 eval),则跳过预检,其非零退出码会被记录,但绝不会被视为需要避免的失败。分类器无法识别的任何内容都会被守卫。
  • 记住的 Bash 失败会依据其所运行的动词(npm run deploy、git push)与提议的命令进行匹配,而不是依据两条命令字符串的相似程度。
  • 前/后关联使用 session_id + tool_use_id,因此并行的工具调用不会附加到错误的回执上。
  • Claude 的 PostToolUseFailure 以及显式暴露非零退出码的 Codex 响应会规范化到同一失败路径。当前的 Codex hook 可能省略 Bash 退出状态;Audrey 会将不透明的结果记录为 unknown,而绝不会记录为捏造的成功。
  • 发生内部错误时,每个 hook 都会记录到 stderr 并输出 {}(不表态,因此工具继续执行)。只有 PreToolUse 在 AUDREY_HOOK_FAIL_CLOSED=1 时会改变行为,改为输出拒绝决定;上下文注入和工具后 hook 没有拒绝路径,始终输出 {}。
  • Stop hook 始终输出有效 JSON,绝不继续或阻止已完成的回合。

Codex hook 拦截是一道护栏,而非完整的 shell 策略边界。当前宿主契约不会拦截每一条更丰富的 unified_exec 路径,并可能省略静默 Bash 失败的退出状态。参见 Codex hooks 文档。将 Guard 回执用作证据,并保持沙箱、审批、CI 和部署控制到位。

JavaScript API
import { Audrey, MemoryController } from 'audrey';

const memory = new Audrey({
  dataDir: './audrey-data',
  agent: 'payments-agent',
  embedding: { provider: 'local', dimensions: 384 },
});

await memory.encode({
  content: 'Stripe returns HTTP 429 above 100 requests per second.',
  source: 'direct-observation',
  tags: ['stripe', 'rate-limit'],
  context: { service: 'billing' },
});

const capsule = await memory.capsule('increase Stripe throughput', {
  scope: 'agent',
  budgetChars: 3000,
});

const guard = new MemoryController(memory);
const before = await guard.beforeAction({
  action: 'deploy the billing worker',
  tool: 'Bash',
  command: 'npm run deploy:billing',
  cwd: process.cwd(),
});

console.log(before.decision, before.evidenceIds);
await memory.closeAsync();
REST sidecar
AUDREY_AGENT=payments-agent audrey serve
curl http://127.0.0.1:7437/health

核心路由:

需求路由
编码一个 episodePOST /v1/encode
召回记忆POST /v1/recall
构建上下文数据包POST /v1/capsule
在动作前检查POST /v1/preflight
创建 Guard 回执POST /v1/guard/before
关闭 Guard 回执POST /v1/guard/after
整合与衰减POST /v1/dream
健康与索引状态GET /v1/status
将学到的过程提升为规则文件(管理员)POST /v1/promote

对任何非环回部署使用 AUDREY_API_KEY。X-Audrey-Agent 会在受信任部署内限定编码、召回、capsule、preflight、Guard、整合和问候语的作用域;它是一个路由头,而非认证边界。请在你的网关处绑定 Agent/租户身份,而不要信任任意的公共头。每条路由还接受 JSON 正文中的每次调用 agent 字段,作为无法为每个请求设置头的调用方(例如 Python 客户端)的回退方案;当两者同时存在时,头优先。

Python 客户端
from audrey_memory import Audrey

memory = Audrey(base_url="http://127.0.0.1:7437", agent="payments-agent")
memory_id = memory.encode(
    "Stripe returns HTTP 429 above 100 requests per second.",
    source="direct-observation",
)
results = memory.recall("Stripe rate limit", limit=5)
memory.close()

Python 包是 REST sidecar 的客户端;内存运行时仍保留在 Node 进程中。

记忆与检索流水线
episode
  ├─ transactional SQLite + vector + FTS write
  ├─ agent-scoped interference / resonance / validation
  ├─ reinforcement or contradiction evidence
  ├─ sleep-time consolidation into semantic or procedural memory
  └─ grounding checks that stored claims still hold in the project

query
  ├─ bounded vector candidates
  ├─ FTS5 lexical candidates
  ├─ reciprocal-rank fusion and confidence scoring
  ├─ context / affect / recency / interference modifiers
  └─ final-only retrieval bookkeeping

Agent 范围内的向量搜索在最近邻排序之前使用原生 sqlite-vec 分区键,而不是对全库候选进行后过滤。如果融合结果不足,Audrey 会执行一次有界的分区本地重试。语义检索和程序性检索的计数仅在最终结果被产出时更新;去重后、超出上限以及未被消费的流式候选不会获得权威性提升。

MCP 接口

Audrey 暴露 23 个 MCP 工具,以及状态、近期记忆和原则资源,还有简报/回忆/反思提示词。主要分组如下:

  • 捕获:memory_encode、memory_reflect、memory_observe_tool
  • 检索:memory_recall、memory_capsule、memory_greeting
  • 操作安全:memory_preflight、memory_guard_before、memory_guard_after、memory_reflexes
  • 生命周期:memory_consolidate、memory_dream、memory_decay、memory_resolve_truth、memory_ground
  • 治理:memory_validate、memory_promote、memory_forget、memory_export、memory_import、memory_status、memory_introspect

当生命周期钩子不可用时,该服务还会发送解释 Guard 回执循环的主机指令。

环境变量
变量默认值用途
AUDREY_MODEL_CACHE_DIR$XDG_CACHE_HOME/audrey/models 或 ~/.cache/audrey/models用于本地模型文件的可写单用户缓存
AUDREY_SHARED_STORE0设为 1 以对有意共享的存储保留运维人员管理的权限
AUDREY_DATA_DIR~/.audrey/dataSQLite 存储;每个租户/安全边界使用不同的目录
AUDREY_AGENT因主机而异用于作用域操作的逻辑记忆所有者
AUDREY_EMBEDDING_PROVIDERlocallocal、gemini、openai 或 mock
AUDREY_LLM_PROVIDER未设置用于反思/整合的 anthropic、openai 或 mock;未设置(或 auto)时仅使用本地启发式方法,绝不使用环境中的 ANTHROPIC_API_KEY/OPENAI_API_KEY
AUDREY_LLM_MODEL提供方默认值显式覆盖 LLM 模型
AUDREY_DEVICEgpu本地嵌入设备;回退到 CPU
AUDREY_CONTEXT_BUDGET_CHARS4000默认胶囊的最大大小
AUDREY_AUTOPILOT_SCOPEagent用于钩子的 agent 或显式的跨 Agent shared 召回
AUDREY_PACKET_FORMATcompact注入数据包的样式:compact 行格式或 verbose key=value
AUDREY_PACKET_DELTA1每个会话对每个未更改的记忆版本仅注入一次;0 表示每次提示词都重新发送完整数据包
AUDREY_HOOK_FAIL_CLOSED0当 Audrey 自身失败时拒绝受保护的操作
AUDREY_API_KEY未设置用于 REST 访问的 Bearer 令牌
AUDREY_ALLOW_NO_AUTH0设为 1 以允许未经身份验证的非回环 REST 访问
AUDREY_HOST127.0.0.1REST 绑定地址
AUDREY_PORT7437REST 端口
AUDREY_ENABLE_ADMIN_TOOLS0启用导出、导入、遗忘和提升操作
AUDREY_ENABLE_SHARED_SCOPE0允许显式的跨 Agent REST 召回;管理工具也会启用它
AUDREY_PROFILE0包含阶段计时诊断信息
AUDREY_DISABLE_WARMUP0禁用 MCP 嵌入预热
AUDREY_PRAGMA_DEFAULTS1设为 0 以禁用 SQLite 性能调优

提供方密钥绝不会嵌入生成的钩子命令中。--include-secrets 仅适用于 MCP 注册;优先使用主机环境注入或密钥管理器。

新的本地存储会在支持 POSIX 模式的文件系统上使用私有目录和数据库权限。现有的数据库和 WAL 文件在打开时会受到限制。Windows 和挂载卷需要适当的操作系统 ACL。仅当你自行管理共享访问时,才设置 AUDREY_SHARED_STORE=1(SDK:sharedStore: true)。

本地模型在首次使用时会下载到单用户缓存中。在依赖离线钩子之前,请让首次运行完成。初始化失败可以在同一进程中重试。对于由 root 安装的系统包,请以桌面用户身份运行初始模型加载,以保持缓存可写。

快照格式 2 保留接地锚点、其最后已知状态以及整合撤销日志;较旧的快照仍可导入。工作树在召回时共享仓库标识,而接地检查则检查记录锚点的检出。回滚在撤销合并时会保留较早的知识。无法安全逆转的旧式合并(没有撤销日志)将被拒绝。

REST API 要求 JSON 请求体,并拒绝跨源浏览器请求。除非显式设置 AUDREY_ALLOW_NO_AUTH=1,否则未经身份验证的请求要求回环主机。对于网络部署,请配置 AUDREY_API_KEY。

生产检查清单
  • 为每个租户或硬隔离域分配独立的 AUDREY_DATA_DIR。
  • 显式固定 embedding 和 LLM 提供商。
  • 在提供商、维度或版本迁移前备份存储。
  • 将 REST sidecar 置于身份验证和速率限制之后;不要将 agent 选择标头暴露为身份标识。
  • 除非跨 Agent 检索是有意为之且经您自己的身份层授权,否则保持 REST 共享范围禁用。
  • 将凭据和受监管的原始内容排除在编码记忆之外。
  • 在受监管使用前确定保留、删除、加密和审计策略。
  • 监控 audrey status --json --fail-on-unhealthy。
  • 将 hook 运行时保持在稳定的已安装路径上。
  • 针对您的拓扑对并发写入者进行负载测试;SQLite WAL 不是分布式协调层。

本地 embedding 使用 Transformers.js 4.3+ 和 sharp 0.35.4+,解决了已发布依赖树中先前的 libvips/libheif 安全公告。托管 embedding 提供商改变了运行时执行,但不会移除已安装的软件包。针对您的安装运行 npm audit --omit=dev 以检查当前安全公告。

基准测试与证据

在本地运行发布门禁:

npm test
npm run bench:memory:check
npm run bench:guard:check
npm run bench:guard:publication:verify
npm run smoke:cli
npm run pack:check

GuardBench 目前包含十个本地、确定性的行动前场景,涵盖重复失败、过程、范围变更、恢复、脱敏、冲突指令和噪声存储。已检入的 v1 方法论使用模拟的 64 维 embedding 提供商,旨在捕获回归。本地完美通过并不代表真实提供商的延迟或生产误报率。

此检出中的最新本地结果:10/10 场景通过,100% 预防率,0% 误拦截率,0 原始机密泄露,0 已发布产物泄露,在模拟提供商方法论下 Guard 延迟 p50/p95 为 3.805ms / 13.445ms。

benchmarks/perf-snapshot.js 在可配置的语料库大小下测量编码和混合召回的 p50/p95/p99,并附带机器和提供商来源信息。在您计划运营的硬件和 embedding 提供商上运行它;托管提供商的延迟主要由其网络往返决定。

较长期的公开评估目标包括 LongMemEval、MemoryAgentBench 以及对抗性记忆投毒案例。相关的设计方向包括 Zep/Graphiti 中的双时态知识图谱、A-MEM 中的演化记忆组织,以及 Sleep-time Compute 中的睡眠时间 Agent 计算。

开发
git clone https://github.com/Evilander/Audrey.git
cd Audrey
npm ci
npm run build
npm run lint
npm run format:check
npm test

参见 CONTRIBUTING.md、SECURITY.md 和 docs/MEMORY_BENCHMARKING.md。

维护者发布门禁

这些命令被有意记录,因为论文和发布证据账本会针对公开源代码树验证它们:

npm run bench:guard:zep
npm run bench:guard:external:dry-run
npm run bench:guard:external:evidence
npm run bench:guard:external:evidence:strict

npm run paper:arxiv:compile
npm run paper:arxiv:compile:strict
npm run paper:launch-results
npm run paper:launch-results:strict

npm run release:cut:plan
npm run release:cut:apply
npm run release:readiness
npm run release:readiness:strict
npm run python:release:check

实时 Zep 运行需要 ZEP_API_KEY;ZEP_GUARDBENCH_INGEST_DELAY_MS 调整摄取稳定时间。外部干运行矩阵无需凭据即可证明适配器形态,而外部证据验证将待处理运行与已验证的实时证据区分开来。

发布打包执行绝对路径扫描,在社交文案中预留 X URL,并检查提交的 artifact-url 目标。发布就绪状态分别报告源代码控制状态、实时远程 HEAD 验证、npm 注册表/认证就绪状态和 PyPI 发布就绪状态。

MIT 许可。为那些应当在工作上变得更好而不失问责能力的 Agent 而构建。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。