Go to file
Bifang 11ca324d6b 重新初始化项目 2026-05-15 16:50:18 +08:00
.env.example 重新初始化项目 2026-05-15 16:39:57 +08:00
.gitignore 重新初始化项目 2026-05-15 16:50:18 +08:00
README.md 重新初始化项目 2026-05-15 16:39:57 +08:00
config.py 重新初始化项目 2026-05-15 16:39:57 +08:00
extractor.py 重新初始化项目 2026-05-15 16:39:57 +08:00
main.py 重新初始化项目 2026-05-15 16:39:57 +08:00
meeting_example.md 重新初始化项目 2026-05-15 16:39:57 +08:00
meeting_processor.py 重新初始化项目 2026-05-15 16:39:57 +08:00
meeting_state.py 重新初始化项目 2026-05-15 16:39:57 +08:00
obsidian_manager.py 重新初始化项目 2026-05-15 16:39:57 +08:00
requirements.txt 重新初始化项目 2026-05-15 16:39:57 +08:00
vector_store.py 重新初始化项目 2026-05-15 16:39:57 +08:00

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 — 图谱可视化 (扩展功能)