@ agentskit/ 记忆
简介 : major-package
坚持对话,并在您的代理中添加向量搜索——互换后端而无需更改代理代码.
标记 : ai • 妇女 agents • 妇女 llm • 妇女 agentskit • 妇女 ai-agents • 妇女 memory • 妇女 vector-db • 妇女 embeddings • 妇女 rag • 妇女 sqlite • 妇女 redis • 妇女 vector-search
已核实的证据
- 软件包元数据和测试在
packages/memory/。 。 。 . - 软件包指南 : https://www.agentskit.io/docs/reference/packages/memory (中文(简体) )
- 稳定地图: 文件/服务.md
如何适应生态系统
@ agentskit/memory 给出代理的连续性:聊天历史,向量内存,图表内存,加密存储,以及本地或托管后端.
- 探员Kit:与本回购中的其他包一起作曲,从可互换的小零件来构建代理.
- 书记官处: 查找已使用此图层的即时代理和模板 登记. agentskit.io。 。 。 .
- 游戏本: 学习本层背后的生产模式 游戏本. agentskit.io。 。 。 .
为什么记忆
- 在重启中幸存的对话 – SQLite 用于本地开发, Redis 用于生产; 您的代理在零代码更改的会话中记得上下文
- RAG 已准备好的向量搜索 ——储存并取回嵌入物
fileVectorMemory(纯JS,无原生道口)或 Redis 矢量搜索尺度 - 插入任何后端 - 那个
VectorStore接口是 3 个方法; 将 LanceDB 、 Pinecone 或任何自定义商店带入分钟内 - 一个接口,每个部署目标 - 互换自
inMemory改为sqlite改为redis没有触摸代理代码
安装
npm install @agentskit/memory better-sqlite3
# For production: npm install redis
# For vectors: npm install vectra
快速实例
import { createRuntime } from '@agentskit/runtime'
import { anthropic } from '@agentskit/adapters'
import { sqliteChatMemory } from '@agentskit/memory'
const runtime = createRuntime({
adapter: anthropic({ apiKey: process.env.ANTHROPIC_API_KEY, model: 'claude-sonnet-4-6' }),
memory: sqliteChatMemory({ path: './chat.db' }),
})
// Agent now remembers previous conversations across process restarts
const result = await runtime.run('What did we discuss yesterday?')
console.log(result.content)
带RAG
使用一个 向量 后端为 @agentskit/rag createRAG({ embed, store }) —— 说 fileVectorMemory 财务报告和审定财务报表 redisVectorMemory 执行 VectorMemory 用于块存储和搜索.
特征
聊天记忆(4)
fileChatMemory({ path })- JSON在磁盘上.sqliteChatMemory({ path })——WAL-mode SQLite;按会话索引.redisChatMemory({ client, keyPrefix })——分布相通,无服务器友好.tursoChatMemory({ url, authToken? })——主办或当地libSQL/Turso.
全部在顶上 createInMemoryMemory 编号 : createLocalStorageMemory 从
@agentskit/core。 。 。 .
浏览器网络存储
当主机需要验证、 绑定存储或
sessionStorage 而不是遗产 核心 localStorage 帮助者 :
import { createWebStorageMemory } from '@agentskit/memory/web-storage'
const memory = createWebStorageMemory({
key: 'app:chat',
getStorage: () => typeof sessionStorage === 'undefined' ? undefined : sessionStorage,
maxMessages: 20,
maxRecordBytes: 1_048_576,
})
Canonical记录被运行时间验证. 超大小保存拒绝
AK_MEMORY_SAVE_FAILED 在更改存储之前. migration 可能提供遗产
密钥和主机拥有的解析器; 遗留的密钥仅在犬科之后被删除
持久性成功.
病媒记忆(11)
fileVectorMemory——纯-JS,文件已存在(好到~10k向量).redisVectorMemory—— Redis Stack / Redis 8+ HNSW.pgvector- BYO SQL跑车手(postgres.js, (中文(简体) ),pg德瑞兹 普里斯玛 尼昂.pinecone管理;命名空间+元数据过滤器.qdrant——通过HTTP自行托管或云.chroma——Chroma v2 HTTP客户端,拥有租户,数据库,和象征性支持.upstashVector——无服务器的HTTP.supabaseVectorStore- Supabase公司主办Pgvector RPC.weaviateVectorStore——织出"云"或自办HTTP.milvusVectorStore——米尔武斯/齐利兹·雷斯特API.mongoAtlasVectorStore——蒙戈DB 阿特拉斯矢量搜索并有被注入的集合.
矢量适配器跟随 ADR 0003 : 只有在得分为
绝对大于 threshold。远程 HTTP 适配器接受 timeoutMs 财务报告和审定财务报表
maxResponseBytes,默认为15秒和2米B;两者都需要正数
安全整数。 喷出 fetch 和呼叫者 signal 也得到支持。 超时
和响应限制失败的使用 AK_MEMORY_REMOTE_HTTP。文件 KV 写入为
原子和序列化 在一个过程中。 他们不是
多进程协调原始; 使用 SQLite、 Redis 或其他外部
当多个进程写入相同文件时存储.
同样的三相方法 VectorStore 合同——互换不触摸代理代码.
高档包装纸(6)
createHierarchicalMemory——MemGPT风格分级:工作/召回/存档. 食谱。 。 。 .createVirtualizedMemory——热窗+冷取器作长会. 食谱。 。 。 .createAutoSummarizingMemory(通过)@agentskit/core/auto-summarize(中文(简体) ) 折叠最古老的 变成运行中的摘要. 食谱。 。 。 .createEncryptedMemory- AES-GCM-256 信封上的任何ChatMemory钥匙从不离开呼叫者. 食谱。 。 。 .createInMemoryGraph——知识图(节点+边缘+BFS). 食谱。 。 。 .createInMemoryPersonalization+ 键renderProfileContext——每个用户特质简介. 食谱。 。 。 .
内存合同v1(ADR0003)——跨域可替换 runtime, (中文(简体) ),
useChat,每个框架都具有约束力.
生态系统
| 软件包 | 作用 |
|---|---|
| @ agentskit/ 核心 | Memory, (中文(简体) ), VectorMemory 类型 |
| @ agentskit/ 擦伤 | 向量内存上方的弹簧+取回 |
| @ agentskit/ 运行时间 | memory 编号 : retriever 选项 |
| @ agentskit/ 适应器 | RAG 嵌入 |
贡献者
许可证
麻省理工学院——见 自由主义。 。 。 .
文档
成熟性和相容性
- 稳定性: β 语录 看到了吗 文件/服务.md
- 节点.js 20+ 财务报告和审定财务报表 类型脚本 严格模式
- 发表于
@agentskit/memory
捐款
PostgreSQL 聊天内存( 节点和工人)
安装 drizzle-orm 财务报告和审定财务报表 pg 与这个包裹。 可选
@agentskit/memory/postgres 子路径导出 postgresChatMemory, (中文(简体) ),
postgresChatTable (Drizzle schema),和 (中文(简体) ) postgresChatMigrationSql。 。 。 .
主条目不导入对等点 .
import { Pool } from 'pg'
import { drizzle } from 'drizzle-orm/node-postgres'
import { sql } from 'drizzle-orm'
import { postgresChatMemory, postgresChatMigrationSql } from '@agentskit/memory/postgres'
const pool = new Pool() // host owns connection configuration and shutdown
const db = drizzle(pool)
// Run once in your migration tooling, not on every request:
await db.execute(sql.raw(postgresChatMigrationSql))
const memory = postgresChatMemory({ db, tenantId: 'tenant-a', sessionId: 'session-a' })
await memory.save([])
await pool.end()
在工人中,启用 nodejs_compat; 创建和连接一个 pg.Client 每一个里面
请求,通过 drizzle(client),并用 ctx.waitUntil(client.end())
在所有内存操作(以及任何使用它们的流)完成后. 这个
软件包从不连接、迁移或关闭客户端。 节点 Pool 可能会是
(b) 各项请求共享。 无需依赖霓虹、超驱动或Cloudflare;
,主机可以酌情提供它们的连接配置.
每个查询都同时使用租户和会话,这构成了主键. 衍生 这些识别资料来自信任的授权范围: 提供电话的租户 姓名本身不是授权。 从解剖角度保存替换版本的 JSONB 抓取,保存部件,工具,元数据,日期,以及消息顺序. 同时 保存使用上一个写入- wins; 此 ChatMemory 不执行会话 CAS 或 转租。 Schema 迁移是明确的; SQL/连接错误被传播和 无效的记录失败,而不是默默地抛弃历史.
默认情况下不进行截取(CM1-CM6)。 选择到 maxMessages: N 改为
按原始顺序保存每个保存中最新的 N 信息 .
只保留在用户转弯边界上切:保留窗口总是从一个开始
user 消息,所以用户问题从不脱离其助手的回答
并且一个工具呼叫 永远不会与它的结果分开。 当N -最新截断
掉入最近的一圈(可能是在进行中), 整个一圈被保持,所以
结果可能超过 N system 信件总是保留。 历史
没有用户信件的存储不改变而不是被清空。 永远
删除更古老的转折并计数信件,而不是符号或字节. 对于语义
总结,整理主机的历史
换句话说 需要一个正的安全整数; 空保存仍然存在 []。 。 。 .
支持的 Drizzle 同行范围是 ^0.44.0 || ^0.45.3。两个下限
通过了真正的 PostgreSQL 合同套件和包类型检查.
signal 在任何 SQL 发布前拒绝已经放弃的操作 。 装入
还在 SQL 返回后检查 。 Drizzle/pg 在此不取消飞行中 SQL :
已提交的保存/ 清除程序可在中止后执行,并将报告
实际SQL结果。 在主机连接上配置查询/声明超时 .
可选的防御深度 RLS(作为迁移所有人运行,通过 无BYPASSRLS的非所有者角色; 将租户设置在主机管理的交易内 :
ALTER TABLE agentskit_chat_memory ENABLE ROW LEVEL SECURITY;
ALTER TABLE agentskit_chat_memory FORCE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON agentskit_chat_memory
USING (tenant_id = current_setting('app.tenant_id', true))
WITH CHECK (tenant_id = current_setting('app.tenant_id', true));
在交易外的共享池连接上不要设置租户. 东道主
必须执行角色权限,并将其信任的租户设定为本地交易
set_config('app.tenant_id', tenant, true)。 。 。 .
真正的验收(本地可支配的PostgreSQL 16,对回回路的信任认证); 没有生产账户:
docker run -d --name ak-memory-test -p 127.0.0.1:55439:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:16
AK_POSTGRES_TEST_PORT=55439 pnpm --filter @agentskit/memory test:postgres
AK_POSTGRES_TEST_PORT=55439 pnpm --filter @agentskit/memory test:workerd
docker rm -f ak-memory-test
CI 运行 test:postgres 针对具有信任认证的 PostgreSQL 16 服务
和一个明确的测试端口;不需要任何秘密。 本地跳过
没有明确的测试端口. test:workerd
运行 wrangler dev --local,每个请求使用客户端 waitUntil 关闭,
并进行与节点池测试相同的合成合同套件.