sqlite-memory如何为AI智能体构建持久化、可搜索的记忆系统?(附Markdown优化)
sqlite-memory is a SQLite extension that provides AI agents with persistent, searchable memory optimized for markdown content, featuring hybrid semantic search, markdown-aware chunking, and local embedding via llama.cpp. 原文翻译: sqlite-memory 是一个 SQLite 扩展,为 AI 代理提供持久化、可搜索的记忆功能,针对 Markdown 内容优化,具备混合语义搜索、Markdown 感知分块和通过 llama.cpp 的本地嵌入功能。
一个为 AI 智能体提供持久化、可搜索记忆的 SQLite 扩展,专为 Markdown 内容优化。具备混合语义搜索结合向量相似度搜索和全文搜索的技术,提高检索的准确性和智能性。(向量相似度 + FTS5全文搜索)、Markdown 感知分块根据 Markdown 文档结构进行智能分块,保留语义边界的技术。以及通过 llama.cpp 实现的本地嵌入在本地设备上运行嵌入模型生成向量表示,无需网络连接和数据外传。功能。
智能体的记忆数据库可以通过 sqlite-sync 使用 离线优先技术 在多个智能体之间同步。每个智能体独立工作,在连接时进行同步,这使其成为分布式 AI 系统、边缘部署和协作式智能体架构的理想选择。
AI 智能体记忆的未来
现代 AI 智能体需要持久化、可搜索的记忆,以在对话和任务之间保持上下文。受 OpenClaw 记忆架构 的启发,sqlite-memory 实现了我们认为将成为 AI 智能体记忆系统事实标准的方法:将 Markdown 文件作为单一事实来源。
在这种范式中:
- Markdown 文件 作为人类可读、可版本控制的知识库。
- 嵌入向量 实现语义理解和检索。
- 混合搜索 结合了全文搜索的精确性和向量相似度的智能性。
sqlite-memory 连接了这些概念,使得任何基于 SQLite 的应用程序都能够摄取、存储并对知识库进行语义搜索。
为什么选择 sqlite-memory?
对于 AI 智能体开发者
- 持久化记忆:为您的智能体提供在重启后依然存在的长期记忆。
- 语义回忆:基于含义而非仅仅是关键词检索相关上下文。
- 上下文隔离:按上下文(项目、对话、主题)组织记忆。
- 本地优先:完全在设备上运行,使用本地嵌入模型——无需 API 成本、无延迟、数据不出系统。
对于应用程序开发者
- 零基础设施:无需部署向量数据库服务器——它只是 SQLite。
- 单一文件:您的整个知识库都存储在一个便携的
.db文件中。 - SQL 接口:使用熟悉的 SQL 查询您的语义记忆。
- 可嵌入性:在任何 SQLite 可以运行的地方工作——移动端、桌面端、边缘、WASM。
技术优势
| 特性 | 描述 | 关键优势 |
|---|---|---|
| 混合搜索 | 结合向量相似度(余弦距离)与 FTS5 全文搜索 | 实现更优的检索效果 |
| 智能分块 | Markdown 感知解析,保留语义边界 | 提升检索准确性 |
| 智能同步 | 基于内容哈希的变更检测 | 跳过未变文件,原子化替换已修改文件,清理已删除文件 |
| 事务安全通过 SAVEPOINT 事务确保操作要么完全成功,要么完全回滚,避免数据不一致。 | 所有同步操作在 SAVEPOINT 事务内运行 | 完全成功或完全回滚,无部分索引内容风险 |
| 高效存储 | 二进制嵌入向量,维度可配置 | 节省存储空间 |
| 嵌入缓存 | 自动缓存已计算的嵌入向量 | 重新索引相同文本时跳过冗余 API 调用和计算 |
| 灵活嵌入 | 支持本地模型(llama.cpp)或远程 API(如 vectors.space) | 适应不同部署场景和需求 |
架构
┌─────────────────────────────────────────────────────────────┐
│ Your Application │
├─────────────────────────────────────────────────────────────┤
│ sqlite-memory │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Parser │ │ Embedding │ │ Hybrid Search │ │
│ │ (md4c) │ │ (llama.cpp) │ │ (vector + FTS5) │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ sqlite-vector │
├─────────────────────────────────────────────────────────────┤
│ SQLite │
└─────────────────────────────────────────────────────────────┘
快速开始
先决条件
| 组件 | 描述 | 备注 |
|---|---|---|
| SQLite | 核心数据库引擎 | 必需 |
| sqlite-vector | 向量扩展 | 必需 |
| sqlite-sync | 同步扩展 | 仅智能体同步时需要 |
| 本地嵌入模型 | GGUF 格式的嵌入模型(如 nomic-embed-text) | 用于本地嵌入 |
| 远程 API 密钥 | 来自 vectors.space 的免费 API 密钥 | 用于远程嵌入 |
快速入门示例
-- 加载扩展(sync 是可选的)
.load ./vector
.load ./sync
.load ./memory
-- 配置嵌入模型(选择一种):
-- 选项 1:使用 llama.cpp 进行本地嵌入(无需网络)
SELECT memory_set_model('local', '/path/to/nomic-embed-text-v1.5.Q8_0.gguf');
-- 选项 2:通过 vectors.space 进行远程嵌入(需要从 https://vectors.space 获取免费 API 密钥)
-- 提供者名称 'openai' 选择 vectors.space 的 OpenAI 兼容端点。
-- SELECT memory_set_model('openai', 'text-embedding-3-small');
-- SELECT memory_set_apikey('your-vectorspace-api-key');
-- 添加一些知识
SELECT memory_add_text('SQLite is a C-language library that implements a small, fast,
self-contained, high-reliability, full-featured, SQL database engine. SQLite is the
most used database engine in the world.', 'sqlite-docs');
SELECT memory_add_text('Vector databases store data as high-dimensional vectors,
enabling similarity search. They are essential for semantic search, recommendation
systems, and AI applications.', 'concepts');
-- 添加整个文档目录
SELECT memory_add_directory('/path/to/docs', 'project-docs');
-- 语义搜索您的记忆
SELECT path, snippet, ranking
FROM memory_search
WHERE query = 'how do databases store information efficiently';
-- 按语义相似度 + 关键词匹配排序的结果
-- ┌──────────────┬─────────────────────────────────────┬─────────┐
-- │ path │ snippet │ ranking │
-- ├──────────────┼─────────────────────────────────────┼─────────┤
-- │ (uuid) │ SQLite is a C-language library... │ 0.89 │
-- │ (uuid) │ Vector databases store data as... │ 0.82 │
-- └──────────────┴─────────────────────────────────────┴─────────┘
示例:构建一个具备记忆的 AI 智能体
import sqlite3
# 连接到您的记忆数据库
conn = sqlite3.connect('agent_memory.db')
conn.enable_load_extension(True)
conn.load_extension('./vector')
conn.load_extension('./memory')
# 一次性设置
conn.execute("SELECT memory_set_model('local', './models/nomic-embed-text-v1.5.Q8_0.gguf')")
# 存储对话上下文
def remember(content, context="conversation"):
conn.execute("SELECT memory_add_text(?, ?)", (content, context))
conn.commit()
# 检索相关记忆
def recall(query, min_score=0.7):
cursor = conn.execute("""
SELECT snippet, ranking FROM memory_search
WHERE query = ? AND ranking > ?
ORDER BY ranking DESC
""", (query, min_score))
return cursor.fetchall()
# 在您的智能体中使用
remember("User prefers concise responses and uses Python primarily.")
remember("Project deadline is March 15th, focusing on API integration.")
# 稍后,当用户询问项目时...
memories = recall("what's the project timeline")
# 返回关于 3月15日 截止日期的相关上下文
智能同步
所有 memory_add_* 函数都使用内容哈希变更检测来避免冗余工作:
memory_add_text:计算内容的哈希值。如果相同内容已被索引,则完全跳过。永远不会创建重复的嵌入向量。- **`
常见问题(FAQ)
sqlite-memory 如何实现 AI 智能体的持久化记忆?
sqlite-memory 是一个 SQLite 扩展,通过将 Markdown 文件作为单一事实来源,结合本地嵌入模型(如 llama.cpp)和 SQLite 数据库,为 AI 智能体提供重启后依然存在的长期记忆存储。
sqlite-memory 的混合搜索有什么优势?
它结合了向量相似度(语义搜索)和 FTS5 全文搜索,既能基于含义智能检索上下文,又能通过关键词精确匹配,从而实现更优的检索效果和准确性。
为什么说 sqlite-memory 适合分布式 AI 系统?
因为它支持通过 sqlite-sync 进行离线优先同步支持代理在离线状态下独立工作,连接时自动同步数据的技术架构。,每个智能体可独立工作并在连接时同步记忆数据库,无需中央服务器,非常适合边缘部署和协作式智能体架构。
版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。
文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。
若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。



