octop 的 harness-memory 通过融合 sqlite fts5 全文索引、结构化存储与向量语义检索,实现低延迟高精度混合检索;支持并行双路查询、字段级过滤、轻量预处理及单文件可迁移部署。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

Octop 的 harness-memory 实现全文检索,核心不是只靠向量相似度匹配,而是把结构化文本存储 + FTS5 全文索引 + 语义检索能力三者融合,形成可落地、低延迟、高精度的混合检索路径。它不依赖外部搜索引擎(如 Elasticsearch),而是在 SQLite 内部完成全文检索与向量检索的协同调度。
关键实现机制
SQLite FTS5 作为全文底座
harness-memory 将每条记忆(如对话摘要、用户偏好、操作经验)以结构化字段存入 SQLite 表(例如memories表),并为关键文本字段(content,title,summary)启用 FTS5 虚拟表。FTS5 支持前缀匹配、短语查询、词干归一化和自定义分词器,能高效响应“上次怎么部署 MySQL”这类含动词+名词的自然语言关键词查询。-
混合检索流水线(Hybrid Retrieval Pipeline)
检索请求进来后,并行触发两路:- 向量路:将查询嵌入为向量,在 SQLite 的
vector扩展列中做近邻搜索(使用余弦相似度); - 全文路:用 FTS5 执行
MATCH '部署 AND MySQL'类查询,返回 BM25 排序结果; - 最终按预设权重(默认 30% 全文 + 70% 向量)加权合并,去重后取 top-k 返回。
- 向量路:将查询嵌入为向量,在 SQLite 的
-
字段级索引与元数据过滤
每条记忆带标准元数据:agent_id,session_key,memory_type(如experiences,preferences),timestamp,importance_score。FTS5 查询可结合WHERE子句做硬过滤,例如:SELECT * FROM memories_fts WHERE memories_fts MATCH '配置防火墙' AND memory_type = 'experiences' AND timestamp > '2026-09-01';
避免全文扫库,也支持按用户/会话/类型精准隔离。
-
轻量级分词与清洗前置
文本入库前会做统一预处理:- 移除 Markdown 标记、HTML 标签、重复空白;
- 保留中文分词边界(不切字),对英文做小写+停用词过滤(可选);
- 对代码块、命令行、路径等特殊片段加
code:前缀标记,提升后续识别准确率。
不依赖外部服务,单文件可迁移
整个全文索引与向量数据都存在一个.db文件里(如octop-memory.db),复制即迁移,换机器、换模型、换 Agent 都不丢检索能力——这也是 Octop 强调“可迁移记忆”的底层保障。
本质上,harness-memory 的全文检索不是“做个搜索框”,而是把用户每一次提问,都当作一次带上下文约束的事实查证来设计。它要快,更要准;要覆盖口语表达,也要尊重结构意图。











