131 lines
3.1 KiB
Markdown
131 lines
3.1 KiB
Markdown
# 会议纪要长期记忆系统
|
|
|
|
一个面向会议纪要的长期记忆原型,当前架构已经从“根目录脚本堆叠 + 外部向量库存储”迁移为更清晰的包结构,并收敛到:
|
|
|
|
- `Neo4j` 作为唯一图存储与检索数据载体
|
|
- `Embedding + 关键词 + 图事实` 的混合检索模式
|
|
- 更接近 `graphiti` 的 `Meeting / Episode / Entity / Fact` 数据组织方式
|
|
|
|
## 当前能力
|
|
|
|
- 会议文本结构化抽取
|
|
- 原文归档到 `data/raw`
|
|
- 行动项和指标状态的跨会议合并
|
|
- 基于内容哈希和语义相似度的重复检测
|
|
- 基于 `Neo4j` 的图谱写入
|
|
- 基于 `Neo4j` 的混合检索
|
|
|
|
## 处理流程
|
|
|
|
```text
|
|
meeting.md
|
|
-> 内容哈希去重
|
|
-> Neo4j 语义相似去重
|
|
-> LLM 抽取结构化信息
|
|
-> 原文归档
|
|
-> 行动项 / 指标状态合并
|
|
-> 写入 Neo4j:
|
|
Meeting
|
|
Episode
|
|
Entity
|
|
Fact
|
|
```
|
|
|
|
## 项目结构
|
|
|
|
```text
|
|
meeting_memory/
|
|
├── meeting_memory/
|
|
│ ├── __init__.py
|
|
│ ├── cli.py
|
|
│ ├── config.py
|
|
│ ├── extractor.py
|
|
│ ├── graph_store.py
|
|
│ ├── meeting_processor.py
|
|
│ ├── meeting_state.py
|
|
│ ├── raw_store.py
|
|
│ └── services/
|
|
│ ├── __init__.py
|
|
│ └── embedding_service.py
|
|
├── data/
|
|
│ ├── raw/
|
|
│ └── meeting_state.json
|
|
├── main.py
|
|
├── MIGRATION_TASKS.md
|
|
└── requirements.txt
|
|
```
|
|
|
|
说明:
|
|
|
|
- `meeting_memory/` 包目录中是当前真实实现
|
|
- 根目录现在只保留 `main.py` 作为 CLI 入口,其他实现全部收拢到包目录
|
|
- `vector_store.py` 已移除,检索能力已迁到 `Neo4j` 图结构中
|
|
|
|
## 环境配置
|
|
|
|
复制环境变量模板:
|
|
|
|
```bash
|
|
copy .env.example .env
|
|
```
|
|
|
|
填写配置:
|
|
|
|
```ini
|
|
LLM_API_KEY=sk-xxx
|
|
LLM_BASE_URL=https://api.deepseek.com/v1
|
|
LLM_MODEL=deepseek-chat
|
|
|
|
EMBEDDING_API_KEY=sk-xxx
|
|
EMBEDDING_BASE_URL=https://api.openai.com/v1
|
|
EMBEDDING_MODEL=text-embedding-3-small
|
|
|
|
NEO4J_ENABLED=true
|
|
NEO4J_URI=bolt://localhost:7687
|
|
NEO4J_USER=neo4j
|
|
NEO4J_PASSWORD=your-password
|
|
NEO4J_DATABASE=neo4j
|
|
```
|
|
|
|
## 安装
|
|
|
|
```bash
|
|
python -m venv .venv
|
|
.venv\Scripts\pip install -r requirements.txt
|
|
```
|
|
|
|
## 使用方式
|
|
|
|
```bash
|
|
python main.py
|
|
python main.py process meeting_example.md
|
|
python main.py process meeting_example.md -f
|
|
python main.py text "今天会议讨论了弱光指标和交付节奏"
|
|
python main.py query "弱光指标目标值是多少"
|
|
python main.py stats
|
|
python main.py batch "meetings/*.md" -f
|
|
```
|
|
|
|
## 检索设计
|
|
|
|
当前查询不再依赖独立向量库,而是基于 `Neo4j` 中的三类候选进行混合排序:
|
|
|
|
- `Episode`:会议级文本上下文
|
|
- `Entity`:实体摘要与描述
|
|
- `Fact`:主体-关系-客体事实
|
|
|
|
排序信号包括:
|
|
|
|
- 语义相似度
|
|
- 关键词命中
|
|
- 图事实加权
|
|
|
|
## 迁移说明
|
|
|
|
迁移任务记录见 [MIGRATION_TASKS.md](/d:/github_project/my_code/meeting_memory/MIGRATION_TASKS.md:1)。
|
|
|
|
## 当前限制
|
|
|
|
- 当前环境如果没有安装 `neo4j` Python 包,导入图存储模块时会退化为禁用状态
|
|
- 由于本地运行环境限制,端到端验证仍然依赖可用的 Neo4j 实例和正确的凭据
|