HuiMemory 是一个"延长单窗口对话"的本地语义记忆系统,核心设计哲学:检索系统 = 搜索引擎,不负责语义理解和答案生成。
HuiMemory 采用 "默认增强、可选接管" 的集成模式,与 Mem0、Zep 等主流记忆库保持一致:
宿主应用 HuiMemory
┌─────────────┐ ┌─────────────┐
│ 短期对话存储 │ │ 长期记忆存储 │
│ 上下文管理 │ ← 调用 → │ 语义检索 │
│ 业务逻辑 │ │ 时间过滤 │
└─────────────┘ └─────────────┘
宿主应用 HuiMemory
┌─────────────┐ ┌─────────────┐
│ 业务逻辑 │ ← 全部 → │ 短期+长期记忆 │
│ │ │ 上下文管理 │
│ │ │ 语义检索 │
└─────────────┘ └─────────────┘
默认情况下,HuiMemory 作为增强模式的外挂技能使用,不会接管或破坏宿主原有的记忆系统。
[id:xxx | prev: yyy | next: zzz] 双向链表导航
bge-base-zh-v1.5(768 维,~430MB)
# 克隆项目
git clone https://gitee.com/HuiMengAI/hui-memory.git
cd hui-memory
# 安装依赖
pip install -r requirements.txt
# 安装 embedding 依赖(轻量模型)
pip install -r requirements-embedding.txt
# 下载轻量中文模型(推荐,平衡性能和体积)
git clone https://gitcode.com/hf_mirrors/BAAI/bge-base-zh-v1.5.git models/bge-base-zh-v1.5
# 或使用极致轻量版(嵌入式设备)
# git clone https://gitcode.com/hf_mirrors/BAAI/bge-small-zh-v1.5.git models/bge-small-zh-v1.5
# 或使用 BGE-M3(重模型,性能最好)
# git clone https://gitcode.com/hf_mirrors/BAAI/bge-m3.git models/bge-m3
创建 configs/config.yaml:
embedding:
model_path: "models/bge-base-zh-v1.5" # 轻量模型(推荐)
dimension: 768 # base=768, small=384, m3=1024
# model_path: "models/bge-small-zh-v1.5" # 极致轻量版
# model_path: "models/bge-m3" # 重模型(可选)
device: "cpu" # 或 "cuda"
batch_size: 32
storage:
db_path: "data/huimemory.db"
cache_dir: ".cache"
cache_ttl_hours: 72
archive:
base_dir: "memory/sessions"
compression: "zstd"
level: 3
retriever:
default_top_k: 5
enable_progressive_scan: true
max_scan_weeks: 16
from huimemory import Retriever, Archiver, TopicManager
from huimemory.embedding import BGEMockEmbedding # 或 BGEEmbedding
# 初始化
embedding = BGEMockEmbedding() # 或 BGEEmbedding(model_path="models/bge-base-zh-v1.5")
retriever = Retriever(embedding=embedding, config_path="configs/config.yaml")
# 索引对话
from huimemory.chunker import TurnChunker
chunker = TurnChunker()
chunks = chunker.chunk_file("memory/sessions/2026-W15/2026-04-13/chat_xxx.md")
retriever.store.add(chunks)
# 检索
results = retriever.search(
query="用户问过什么关于 AI 意识的问题?",
top_k=5,
enable_progressive_scan=True
)
# 格式化输出
for r in results:
print(retriever.format_search_result(r))
print("---")
你是一个拥有长期记忆的 AI 助手。你可以通过 `recall_memory` 工具检索历史对话。
## 记忆检索规则
1. **关键词检索**:当用户提到具体内容时,使用关键词搜索
- 用户:"我之前问过什么关于 AI 意识的问题?"
- 调用:`recall_memory(query="AI 意识", top_k=5)`
2. **时间过滤**:当用户提到时间范围时,使用时间过滤
- 用户:"上周我们讨论了什么?"
- 调用:`recall_memory(query="", filter_expr="timestamp >= '2026-04-06' AND timestamp <= '2026-04-13'")`
3. **分段扫描**:当时间模糊时,系统会自动分段扫描
- 用户:"前段时间我们聊过什么项目?"
- 系统自动:从最近一周开始,逐步向前扫描
4. **轮次导航**:当需要查看上下文时,使用 `recall_by_id`
- 检索结果:`[id:a3f2c7 | prev: k7f2a1 | next: d2n7p3]`
- 调用:`recall_by_id(turn_id="k7f2a1")` 查看上一轮
## 输出格式
检索结果格式:
[id:a3f2c7 | prev: k7f2a1 | next: d2n7p3 | 相似度: 0.778]
📁 2026-W11/2026-03-05/chat_xxx.md | 话题: 本地模型部署 | 2026-03-05 Mon 10:00:07
使用 `prev`/`next` 值调用 `recall_by_id` 查看相邻轮次。
{
"tools": [
{
"name": "recall_memory",
"description": "检索历史对话记忆。支持关键词搜索、时间过滤、分段扫描。",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "搜索关键词或问题"
},
"filter_expr": {
"type": "string",
"description": "时间过滤表达式,如 \"timestamp >= '2026-04-06'\""
},
"top_k": {
"type": "integer",
"description": "返回结果数量,默认 5",
"default": 5
}
},
"required": ["query"]
}
},
{
"name": "recall_by_id",
"description": "根据轮次 ID 检索特定对话。用于导航到相邻轮次。",
"parameters": {
"type": "object",
"properties": {
"turn_id": {
"type": "string",
"description": "轮次 ID,如 'a3f2c7'"
}
},
"required": ["turn_id"]
}
}
]
}
┌─────────────────────────────────────────────────────────────┐
│ LLM 层(理解+回答) │
│ - 意图理解:关键词提取、时间范围推断 │
│ - 答案组织:基于检索结果生成回答 │
│ - 追问决策:是否需要更多上下文 │
└─────────────────────────────────────────────────────────────┘
↓ 调用工具
┌─────────────────────────────────────────────────────────────┐
│ 检索系统层(搜索引擎) │
│ - 关键词检索:向量相似度搜索 │
│ - 时间过滤:metadata 范围查询 │
│ - 分段扫描:周步长渐进式扫描 │
│ - 轮次导航:prev/next 指针 │
└─────────────────────────────────────────────────────────────┘
↓ 读取文件
┌─────────────────────────────────────────────────────────────┐
│ 存储层(数据持久化) │
│ - 向量存储:SQLite + Faiss │
│ - 元数据索引:timestamp, turn_index, topic, session_file │
│ - 归档管理:月包压缩(.tar.zst) │
└─────────────────────────────────────────────────────────────┘
当时间模糊时,系统自动从近到远扫描:
results = retriever.search_with_progress(
query="项目讨论",
on_round=lambda week, results: print(f"扫描 {week},找到 {len(results)} 条"),
max_weeks=16
)
检索到结果后,自动扩展相邻轮次:
results = retriever.search(
query="AI 意识",
context_window=2 # 包含 ±2 轮
)
支持自然语言时间:
from huimemory.utils.time_resolver import TimeResolver
resolver = TimeResolver()
result = resolver.parse("上周三下午")
# {"start": "2026-04-09T12:00:00", "end": "2026-04-09T18:00:00"}
模型对比:
推荐:
bge-base-zh-v1.5:平衡性能和体积,适合大多数应用
bge-small-zh-v1.5:嵌入式设备、移动端
BGE-M3:服务器部署、专业应用
系统采用分段扫描策略:
使用 context_window 参数:
results = retriever.search(
query="项目架构",
context_window=3 # 包含 ±3 轮
)
结果会标记 _context_role:hit(命中)、neighbor(邻居)
references/architecture.md - 详细架构设计
references/api-reference.md - 完整 API 文档
references/llm-integration.md - LLM 集成深度指南
examples/quickstart.py - 快速入门示例
examples/llm_integration_demo.py - LLM 集成完整示例
核心设计哲学:检索系统只负责"捞",LLM 负责"判断"。保持简单,避免过度设计。
共 1 个版本
暂无安全检测报告