|
|
||
|---|---|---|
| .env.example | ||
| .gitignore | ||
| README.md | ||
| config.py | ||
| extractor.py | ||
| main.py | ||
| meeting_example.md | ||
| meeting_processor.py | ||
| meeting_state.py | ||
| obsidian_manager.py | ||
| requirements.txt | ||
| vector_store.py | ||
README.md
会议纪要长期记忆系统
基于 LLM + LlamaIndex 向量库 + Obsidian 知识图谱的会议纪要长期记忆管理系统,支持行动项状态追踪与双重内容去重。
工作流程
会议纪要.md ──→ ①内容哈希查重 ──→ ②语义相似度查重 ──→ LLM 结构化抽取 ──→ 状态合并
│ │ │
│ │ ┌─────┘
│ │ │ meeting_state.json
│ │ │ (行动项/指标历史/内容哈希)
│ │ └─────┐
│ │ │
│ ├──→ ③标题+日期查重 ──┼──→ Obsidian Vault
│ │ │ ├── Raw/
│ │ │ ├── Meetings/
│ │ │ ├── Entities/
│ │ │ └── Graphs/
│ │ │
│ │ └──→ 向量索引持久化
│ │
└── 命中 → 跳过 ────┘── 命中 → [s]跳过 / [o]覆盖
快速开始
cd meeting_memory
# 1. 安装依赖
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt
# 2. 配置 API
cp .env.example .env
# 编辑 .env,填入你的 LLM 和 Embedding API 信息
# 3. 处理一个会议纪要
.venv\Scripts\python main.py process 会议文件.md
# 4. 用 Obsidian 打开 obsidian_vault/ 查看知识图谱
使用方式
交互模式(推荐)
.venv\Scripts\python main.py
进入后可直接输入问题查询,支持以下命令:
| 命令 | 说明 |
|---|---|
query 问题 |
语义查询会议记忆 |
process 文件路径 |
处理新的会议文件 |
stats |
查看统计 |
exit/quit |
退出 |
非命令文本自动作为查询处理。
命令行模式
# 处理会议文件(重复时会交互询问跳过/覆盖)
python main.py process meeting_example.md
# 强制覆盖(不询问,清理旧数据后重新处理)
python main.py process meeting_example.md -f
# 语义查询
python main.py query "弱光指标目标值是多少?"
# 查看统计
python main.py stats
# 直接输入文本
python main.py text "今天会议讨论了..."
# 批量处理(自动交互,推荐加 -f 跳过确认)
python main.py batch "meetings/*.md" -f
架构
meeting_memory/
├── config.py 配置 (LLM / Embedding / Obsidian / 向量库 / 状态路径)
├── extractor.py LLM 从会议纪要中抽取结构化信息
│ ├── title, date, participants
│ ├── entities (人物/组织/指标/概念)
│ ├── relations (主体-谓词-客体)
│ ├── action_items (任务+负责人+截止)
│ ├── metrics (指标+数值+趋势)
│ └── decisions (决策记录)
├── meeting_state.py ★ 跨会议状态追踪引擎
│ ├── ActionItem: 按 task+assignee 哈希匹配
│ ├── Metric: 按 metric_name+owner 哈希匹配
│ ├── 历史演变记录 (时间线)
│ ├── 会议系列自动识别 (去除期号后缀)
│ └── ★ 内容哈希注册表 (content_hashes) 防重复
├── vector_store.py LlamaIndex 向量索引管理
│ ├── 自定义 Embedding 适配 (兼容任意 OpenAI 兼容 API)
│ ├── 会议文档向量化存储 (含演变信息)
│ ├── 语义检索 (similarity_top_k)
│ ├── ★ 查重 + 按 meeting_id 删除覆盖
│ └── ★ 原文语义相似度查重 (find_similar_text)
├── obsidian_manager.py Obsidian Vault 生成器
│ ├── Raw/ — 未加工的原文 (status: unprocessed/processed)
│ ├── Meetings/ — 完整会议笔记 + YAML frontmatter
│ ├── Entities/ — 实体笔记 (含行动项时间线)
│ └── Graphs/ — 知识图谱总览 (MOC)
├── meeting_processor.py 主流程编排
│ ├─ 内容哈希查重 → 语义相似度查重 → LLM 抽取 → 状态合并 → Obsidian → 向量库
│ ├─ ★ 前置去重 (LLM 调用前),避免无效 API 调用
│ └─ ★ 重复处理时支持 skip/overwrite 选择
├── main.py CLI 入口 (交互模式 + 子命令,支持 -f 强制覆盖)
├── requirements.txt 依赖
├── .env 密钥配置
├── meeting_state.json ★ 跨会议状态持久化文件 (行动项/指标历史演变/内容哈希注册表)
├── vector_store_data/ 向量索引持久化目录
└── obsidian_vault/ Obsidian 知识库 (可直接用 Obsidian 打开)
├── .obsidian/ Obsidian 配置 (app.json, core-plugins.json)
├── Raw/ ★ 未加工原文 (处理前先保存)
├── Meetings/ 会议笔记 *.md
├── Entities/ 实体笔记 *.md (含历史时间线)
└── Graphs/ 知识图谱总览
核心能力
1. LLM 结构化抽取
输入原始会议纪要,自动抽取:
- 会议元信息: 标题、日期、参会人
- 实体: 人物、部门、项目、KPI指标、概念制度
- 关系: 主体-谓词-客体 (如
建维部 → 负责 → 网络运维) - 行动项: 任务描述 + 负责人 + 截止时间 + 优先级
- 指标: 指标名 + 当前值 + 目标值 + 趋势 (向好/持平/恶化)
- 决策: 决策内容 + 提出人 + 状态
2. LlamaIndex 向量检索
- 会议内容向量化存储
- 支持自然语言语义查询
- 持久化索引,重启自动加载
- 兼容任意 OpenAI 兼容的 Embedding API
3. 跨会议行动项追踪
- 每个行动项按
task + assignee生成稳定哈希 ID - 同系列会议(自动去除"第X期"后缀)中的相同任务被自动匹配
- 状态变更历史完整保留:
待办 → 进行中 → 已完成 - Obsidian 笔记中展示完整时间线
meeting_state.json持久化所有历史
4. 双重内容去重
处理前在 LLM 调用之前进行两道去重检查,避免重复内容污染记忆库:
- ① 内容哈希指纹:SHA256(原文) 精确匹配,拦截完全相同的文件/文本(纳秒级,100% 确定)
- ② 语义相似度:原文 Embedding 余弦相似度 > 0.92 时触发,拦截同一会议的不同转录版本
- ③ 标题+日期查重(兜底):LLM 提取后,在向量库中检索相同标题/日期的会议
- 命中后交互询问:[s]跳过 或 [o]覆盖
- 覆盖模式:删除旧向量节点 + 旧 Obsidian 笔记 + 旧哈希注册,重新处理
-f / --force标志跳过所有确认,适用于批量处理
5. Obsidian 知识图谱
- 自动生成完整的 Obsidian Vault
- 所有实体独立笔记,
[[Wiki Link]]双向链接 - 实体笔记中的行动项显示最新状态 + 历史演变
- 打开 Obsidian Graph View 即可看到实体关系网络
- 知识图谱总览提供全局索引
.obsidian/配置自动生成
配置
编辑 .env:
# LLM API (用于结构化抽取)
LLM_API_KEY=sk-xxx
LLM_BASE_URL=https://api.deepseek.com/v1
LLM_MODEL=deepseek-chat
# Embedding API (用于向量检索)
EMBEDDING_API_KEY=sk-xxx
EMBEDDING_BASE_URL=https://api.openai.com/v1
EMBEDDING_MODEL=text-embedding-3-small
依赖
openai— LLM 调用pydantic— 结构化数据模型llama-index— 向量索引与语义检索chromadb— 向量数据库后端python-dotenv— 环境变量管理pyvis— 图谱可视化 (扩展功能)