墨池
# InkPot - 墨池
> 砚田勤耕,墨香留痕。让AI陪你沉淀每一份知识。
**英文名**: InkPot(墨水瓶,寓意知识的源泉)
---
## 核心理念
墨池**始终在线**,在日常对话中:
1. **自动识别知识点** - 你问什么,墨池就沉淀什么
2. **分析用户行为** - 你让AI做什么,墨池就懂你擅长什么
3. **建立用户画像** - 记录你的擅长领域、兴趣点、常用技能
4. **智能推荐** - 基于画像推荐相关知识
---
## ⚡ 始终在线模式(重要)
**墨池在每次对话开始时自动加载,全程监听所有用户输入。**
### 自动触发策略
墨池采用**全量监听 + 智能提取**模式:
| 用户行为 | 墨池动作 |
|----------|----------|
| 询问概念("什么是...") | ✅ 提取知识点,记录学习 |
| 让AI写代码 | ✅ 提取代码技巧,记录实践 |
| 让AI解释代码 | ✅ 提取算法逻辑,记录理解 |
| 纠正AI回答 | ✅ 更新知识点,标记修正 |
| 让AI做题/讲题 | ✅ 提取算法模式,记录解题思路 |
| 日常闲聊 | 📝 记录用户偏好,更新画像 |
| 简单指令 | 📝 记录用户行为模式 |
**简单说:你说什么,墨池就学什么。**
---
## 触发规则(暴力模式)
**核心触发条件:只要用户输入包含以下任一关键词/符号,立即触发知识提取!**
### 暴力触发关键词(疑问句全覆盖)
| 类别 | 触发关键词 | 示例 |
|------|------------|------|
| **疑问代词** | 什么、怎么、为什么、如何、哪、几、谁、何时、何地、何处、多少、怎样 | "什么是差分"、"怎么做"、"为什么报错" |
| **口语疑问词** | 为啥、干嘛、咋 | "为啥不行"、"干嘛要这样"、"咋解决" |
| **疑问句式** | 是不是、对不对、好不好、能不能、可不可以、有没有、行不行 | "是不是这样"、"能不能帮我" |
| **问号** | ?、? | 任何带问号的句子 |
| **请求解释** | 解释、讲一下、说一下、介绍一下、帮我理解 | "解释一下这段代码"、"介绍一下Token" |
### 触发后的行为
一旦触发,墨池自动执行:
1. 提取用户问题中的核心概念
2. 创建/更新知识点
3. 更新学习日志和用户画像
### 命令触发
| 命令 | 说明 |
|------|------|
| `/墨池 画像` | 查看用户画像 |
| `/墨池 复习` | 智能推荐复习 |
| `/墨池 推荐` | 个性化学习推荐 |
| `/墨池 索引` | 查看知识库索引 |
| `/墨池 搜索 <关键词>` | 搜索知识点 |
| `/墨池 统计` | 学习统计报告 |
| `/墨池 导出` | 导出知识库 |
### 不触发的场景
仅有以下情况不触发:
- 纯命令执行(如"打开文件"、"运行xx",且不含问号/疑问词)
- 问候语("你好"、"谢谢")
---
## 自动执行流程
触发学习后,墨池自动执行:
```yaml
学习流程:
1. 知识提取:
- 识别核心概念
- 提取关键信息
- 确定知识分类
2. 知识存储:
- 检查是否已存在(查询索引数据库)
- 存在 → 更新学习次数、补充内容
- 不存在 → 创建新知识点
3. 索引更新:
- 更新 db/knowledge_index.json
- 更新 db/user_profile.json
- 建立知识关联
4. 反馈(可选):
- 关联推荐
- 复习提醒
```
---
## 数据库结构
```
墨池/
├── SKILL.md
├── inkpot.py # 核心库(KV 文本格式)
├── record.py # 快速记录接口
├── db/
│ ├── knowledge_index.txt # 知识点索引(KV 格式)
│ ├── user_profile.txt # 用户画像(KV 格式)
│ └── learning_log.txt # 学习日志(行格式)
├── knowledge/ # 知识点详情 Markdown 文件
│ ├── 算法数据结构/
│ ├── 数学/
│ ├── 计算机基础/
│ └── ...
└── profile/
├── index.md
└── records.md
```
**注意**:使用简单 KV 文本格式,避免 JSON 中文引号等格式问题。
---
## 知识点索引数据库 (knowledge_index.txt)
**使用简单 KV 格式,每个知识点一个块:**
```
=== 差分 ===
id: 算法_001
category: 算法数据结构
tags: 前缀和,区间修改,O1操作
summary: 前缀和的逆运算,用于高效处理区间修改问题
file: knowledge/算法数据结构/差分.md
learning_count: 3
mastery: 熟练
first_learned: 2026-03-25
last_learned: 2026-03-27
related: 前缀和,树状数组,线段树
source: 用户提问
=== 前缀和 ===
id: 算法_002
category: 算法数据结构
tags: 前缀和,区间查询,O1查询
summary: 预处理技巧,O(n)预处理后可O(1)查询任意区间和
...
```
**格式说明**:
- `=== 名字 ===` 标记知识点开始
- `key: value` 格式存储字段
- 列表用逗号分隔(如 tags, related)
- 多行文本用换行符即可,无需转义
- **完全不用担心 JSON 引号问题!**
---
## 用户画像数据库 (user_profile.txt)
**KV 格式记录用户身份和行为统计(每个 action 作为独立块):**
```
=== identity ===
primary_role: 信奥竞赛教练
secondary_roles: 算法学习者,C++开发者
confidence: 0.85
=== action:ask_concept ===
count: 15
topics: 前缀和,差分,树状数组
=== action:搬题 ===
count: 8
topics: ABC450A,ABC450B
=== action:算法讲解 ===
count: 5
topics: 快速排序,二分查找
```
**格式说明**:
- `=== identity ===` 存储用户身份推断结果
- `=== action:<type> ===` 存储各类行为统计(每个行为独立一个块)
- 避免嵌套字典,保持扁平结构
## 学习日志数据库 (learning_log.txt)
**简单行格式,用 `|` 分隔:**
```
2026-03-29 01:28 | 信息学竞赛数学学习路径 | 新增 | 对话学习
2026-03-29 01:30 | 差分 | 复习 | 用户提问
2026-03-29 02:15 | 快速排序 | 新增 | 算法讲解
```
**格式**:`时间 | 知识点 | 事件类型 | 触发来源`
---
## 学习卡片格式
```markdown
# [知识点名称]
## 一句话解释
[简洁定义]
## 详细解释
[深入说明]
## 关键要点
- 要点1
- 要点2
## 代码示例
```语言
代码
```
## 元信息
- id: [唯一标识]
- 分类: [领域/子领域]
- 标签: [标签1, 标签2]
- 学习日期: YYYY-MM-DD
- 学习次数: N
- 掌握程度: 了解/理解/熟练/精通
- 来源: 用户提问 / 任务分析 / 主动学习
- 关联: [[相关知识点1]], [[相关知识点2]]
```
---
## 使用方式
### 🚀 首次使用(重要)
墨池需要在每次对话开始时自动加载。请告诉 AI:
> "把每次对话加载墨池这件事记到 MEMORY.md 里"
这样 AI 会在记忆中记住这个偏好,之后每次对话都会自动加载墨池。
---
### 方式一:自然对话触发
直接向 AI 提问,墨池会自动识别并记录知识点:
```
用户: 什么是前缀和?
AI: [回答问题]
墨池: [自动记录"前缀和"知识点]
```
### 方式二:命令触发
使用 `/墨池` 命令查看和管理知识库:
```
/墨池 画像 # 查看你的学习画像
/墨池 复习 # 获取智能复习推荐
/墨池 搜索 差分 # 搜索"差分"相关知识点
```
---
## 快速检索功能
### 1. 关键词搜索
```
输入: "区间修改"
输出: 匹配的知识点列表(差分、线段树、树状数组)
```
### 2. 分类筛选
```
输入: category="算法数据结构"
输出: 该分类下所有知识点
```
### 3. 标签搜索
```
输入: tags=["前缀和"]
输出: 包含该标签的所有知识点
```
### 4. 掌握程度筛选
```
输入: mastery_level="理解"
输出: 掌握程度为"理解"的知识点(推荐复习)
```
### 5. 关联查询
```
输入: knowledge="差分"
输出: 相关知识点(前缀和、树状数组、线段树)
```
---
**作者**: fslong
**更新日期**: 2026-03-29
**更新说明**: 从 JSON 格式改为简单 KV 文本格式,避免中文引号等格式问题,提高稳定性。
标签
skill
ai