</br>
</br>

<p>
  <img  width="260"  src="/docs/logo-text.png" />
</p>

<!--
> [!IMPORTANT]
> **该项目目前仍处于早期阶段，存在许多问题和 Bug 需要解决**。因此，我们非常欢迎您提供宝贵的反馈和问题报告，共同参与完善这个项目！如果您有任何想法或问题，请随时在 [Discussions](https://github.com/codeacme17/examor/discussions) 中提出，期待您的参与！❤️
-->

<p>
  <strong>
    一款网站应用，它可以根据您的知识笔记进行周期性的测试，让您真正的记住所学所写
  </strong>
</p>

<img src = "https://github.com/codeacme17/examor/blob/main/docs/product-full.png?raw=true"></img>

<!--
## 🗒️ 本周开发计划（10/16 - 10/22）

- 加入 `题库` 模块
- 对项目的代码进行重构，优化代码的可读性和可扩展性
-->

## 💡 启发

> **对于学习者来说，最好的习惯之一应该是进行有规律的自测** - _认知天性：让学习轻而易举的心理学规律_

在我平日学习某一个新的技术时，有记笔记的习惯，将重要的信息写在笔记之中。这是一个好习惯，但是，我还有一个不好的习惯就是不喜欢阅读我写过的笔记（不知道是不是大部分人都这样）。这使得我的笔记最后只成了一个纪念品，并没有实质的作用，所以我选择制作这样的一个应用，为的就是不断的通过提问让您复习您的笔记内容

## 🏁 开始

> [!IMPORTANT]
> 强烈建议在上传笔记前阅读 [文档最佳实践](https://github.com/codeacme17/examor/blob/main/docs/best-practices/zh-best-practices.md) 来优化文档

#### 克隆当前的仓库

```bash
git clone https://github.com/codeacme17/examor.git
cd examor
```

#### 使用 docker compose 启动项目

```bash
docker compose up
```

> 请确保您的本机安装了 Docker，并且本地的 `51717`、`51818` 和 `52020` 端口没有被占用

在浏览器中打开 `http://localhost:51818` 开始使用 examor（因为模块优化方案，在第一次加载项目或切换页面时会比较缓慢）

## ✨ 功能

### 根据文档生成问题

用户在创建笔记时，需要同时上传文档，应用会通过这些文档生成一定数量的问题，这些问题都是根据文档内容生成的，在未来这些问题会推送给用户。在创建笔记的时候，用户可以选择想要生成的题型，从而给予用户更丰富的学习内容

### 根据回答进行检测

在用户拿到当天的问题后，用户就可以对问题进行回答了，在此处，GPT 会为用户的回答进行打分、纠错和给予正确答案。其中分数是根据回答与所传文档的正确性的评测（0 ~ 10 分），这个分数会影响后续艾宾浩斯的记录

### 艾宾浩斯记忆

> 我实现了一个乞丐版的艾宾浩斯，目前这个艾宾浩斯只有 8 行代码，在未来我会优化这个函数（v0.1）

在 GPT 生成检测后，我会记录检测中的分值，通过分值的高低来影响未来复习的日期，也就是说分数越高下次复习的日期就会越远

### 角色选择

> [!NOTE]
> 建议使用 GPT-4 模型，以获得稳定的体验

<img  width="500"  src="/docs/screen-shot/zh-role.png" />

角色可以为题目生成和检测创造更多的可能性，您可以在配置页面中设置角色，更多的角色简介建议查看 [角色手册](/docs//zh-role.md)

### 题型选择

在创建笔记时选择题型

<img  width="420"  src="/docs/screen-shot/zh-question-type.png" />

刷题的时候就可以使用不同的方式进行回答，如下图是一道单选题

<img  width="800"  src="/docs/screen-shot/zh-question-type-answer.png" />

## 🧩 模块

### 题库（新增 v0.4.0）

在 **题库** 中，已经积累了一些高质量的文档题目，包括默认提供的 `vue-component` 和 `hello-algo` 等优秀开源文档和书籍。在这一功能模块中，您可以轻松地将这些现有的题目导入到自己的笔记中。此外，也非常欢迎您贡献更多高质量的文档或书籍，以丰富我们的题库！具体的贡献方式请查看 [贡献题库](/docs/contribute/zh-bank.md)

### 笔记管理

**笔记管理** 是一个管理您已上传的所有文档的模块，在该门块中您可以对您已上传的笔记进行删除或新增文件的管理，当然如果您删除了一个笔记下的所有文档即问题都会被清除

### 随机提问

**随机提问** 是一个从现有的问题库中随机抽取一个问题的模块，该模块中可以实现对问题的抽答

### 笔记

**笔记** 是一个抽象的模块，在应用中会根据您创建的每个笔记而生成一个笔记模块，在该模块中，您可以回答该笔记中的问题。并且问题的推送是根据艾宾浩斯记忆曲线实现的，比如您会收到三类的问题数据：

- 今日需复习的题目：顾名思义，这是当天需要对以往回答过题目尽心当天复习的问题数据

- 已过期的题目：这是由于没有在当天准时的完成需要复习的题目，所以会被收集到这个问题数据之中

- 新增的题目：当以上两个数据集中，没有满足用户所定义的每日题目数量，则这个数据集将作为问题的补充，推送给用户

### 检测

**检测** 是最为核心的模块，在该模块中，用户可以对问题进行回答，从而让 GPT 对回答进行打分和检测。该模块中有着三个组件：

- 回答：用户输入答案，提交后可以显示出检测的内容

- 上次的记录：记录用户上一次对该问题的回答和检测的内容

- 文档内容：该组件中会展示用户实际上传的文档内容，也就是产生这个问题的依据和最终答案

## ♻️ 更新项目

当在启动项目的时候，应用会判断是否需要更新，如果版本需要进行更新则会提醒用户。您可以通过以下几步进行更新：

1. 将您的笔记、问题或配置项通过个人配置页面中的 **导出配置及笔记** 按钮进行导出作为备份。这将会导出一个名为 `examor-data.xlsx` 的文件，您可以查看文件内容，**但不建议对文件内容进行修改**

<img  width="700"  src="/docs/screen-shot//zh-export-import.png" />

2. 重新拉取更新最新的远程代码，更新本地的项目

3. 删除原有的 docker 容器，使用 `docker compose up --build` 命令重新构建最新的项目

4. 构建成功后进入个人配置页面，点击 **文件导入** 按钮，将备份过的数据重新导入到项目中

> 目前的更新方式是我个人的使用方式，这一定不是最好的更新方式。如果您有更好的更新方法，十分欢迎在 issus 中提供帮助 ❤️
