Files
HeurAMS/README.md
2025-12-16 04:10:54 +08:00

231 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 潜进 (HeurAMS) - 启发式辅助记忆程序
## 概述
"潜进" (HeurAMS: Heuristic Auxiliary Memorizing Scheduler, 启发式记忆辅助调度器) 是为习题册, 古诗词, 及其他问答/记忆/理解型知识设计的多用途辅助记忆软件, 提供动态规划的优化记忆方案
## 关于此仓库
"潜进" 软件组项目包含多个子项目
此仓库包含了 "潜进" 项目的核心和基于 Textual 的基本用户界面的实现
## 开发计划
0.0.x: 简易调度器实现与最小原型.
0.1.x: 命令行操作的调度器.
0.2.x: 使用 Textual 构建富文本终端用户界面, 项目可行性验证, 采用 SM-2 原始算法, 评估方式为用户自评估的原型.
0.3.x: 简单的多文件项目, 创建了记忆内容/算法数据结构, 基于 SM-2 改进算法的自动复习测评评估. 重点设计古诗文记忆理解功能, 以及 TUI 界面实现, 简单的 TTS 集成.
0.4.x (当前): 使用模块管理解耦设计, 增加文档与类型标注, 采用上下文设计模式的隐式依赖注入与遵从 IoC, 注册器设计的算法与功能实现, 支持其他调度算法模块 (SM-2, FSRS) 与谜题模块, 采用日志调试, 更新文件格式, 引入动态数据模式(宏驱动的动态内容生成), 与基于文件的策略调控, 更佳的用户数据处理, 加入模块化扩展集成, 将算法数据格式换为 json 提高性能, 采用 provider-service 抽象架构, 支持切换服务提供者, 整体兼容性改进.
下一步?
使用 Flutter 构建酷酷的现代化前端, 增加云同步/文档源服务...
## 特性
### 间隔迭代算法
> 许多出版物都广泛讨论了不同重复间隔对学习效果的影响。特别是,间隔效应被认为是一种普遍现象。间隔效应是指,如果重复的间隔是分散/稀疏的,而不是集中重复,那么学习任务的表现会更好。因此,有观点提出,学习中使用的最佳重复间隔是**最长的、但不会导致遗忘的间隔**。
- 采用经实证的 SM-2 间隔迭代算法, 此算法亦用作 Anki 闪卡记忆软件的默认闪卡调度器
- 动态规划每个记忆单元的记忆间隔时间表
- 动态跟踪记忆反馈数据,优化长期记忆保留率与稳定性
### 学习进程优化
- 逐字解析:支持逐字详细释义解析
- 语法分析:接入生成式人工智能, 支持古文结构交互式解析
- 自然语音:集成微软神经网络文本转语音 (TTS) 技术
- 多种谜题类型:选择题 (MCQ)、填空题 (Cloze)、识别题 (Recognition)
- 动态内容生成:支持宏驱动的模板系统,根据上下文动态生成题目
### 实用用户界面
- 响应式 Textual 框架构建的跨平台 TUI 界面
- 支持触屏/鼠标/键盘多操作模式
- 简洁直观的复习流程设计
### 架构特性
- 模块化设计:算法、谜题、服务提供者可插拔替换
- 上下文管理:使用 ContextVar 实现隐式依赖注入
- 数据持久化TOML 配置与内容JSON 算法状态
- 服务抽象音频播放、TTS、LLM 通过 provider 架构支持多种后端
- 完整日志系统:带轮转的日志记录,便于调试
## 安装
### 从源码安装
1. 克隆仓库:
```bash
git clone https://gitea.imwangzhiyu.xyz/ajax/heurams.git HeurAMS
cd HeurAMS
```
2. 安装依赖:
```bash
pip install -r requirements.txt
```
3. 以开发模式安装包:
```bash
pip install -e .
```
## 使用
### 启动应用
```bash
# 在任一目录(建议是空目录或者包根目录, 将被用作存放数据)下运行
python -m heurams.interface
```
### 数据目录结构
应用会在工作目录下创建以下数据目录:
- `data/nucleon/`: 记忆内容 (TOML 格式)
- `data/electron/`: 算法状态 (JSON 格式)
- `data/orbital/`: 策略配置 (TOML 格式)
- `data/cache/`: 音频缓存文件
- `data/template/`: 内容模板
首次运行时会自动创建这些目录.
## 配置
配置文件位于 `config/config.toml`(相对于工作目录)。如果不存在,会使用内置的默认配置。
### 创建配置文件
复制示例配置:
```bash
cp -r config.example/config.toml config/
```
然后编辑 `config/config.toml` 以符合你的需求。
### 主要配置项
```toml
# 调试设置
persist_to_file = 1 # 是否将更改保存到文件
daystamp_override = -1 # 覆盖日戳(测试用)
timestamp_override = -1 # 覆盖时间戳(测试用)
quick_pass = 0 # 一键通过模式
# 每个会话默认新记忆单元数量
tasked_number = 8
# 时区偏移(秒),用于日戳计算
timezone_offset = +28800 # 中国标准时间 (UTC+8)
# 谜题默认配置
[puzzles.mcq]
max_riddles_num = 2 # 选择题最大谜题数
[puzzles.cloze]
min_denominator = 3 # 填空题最小分母
# 路径配置(相对于工作目录或绝对路径)
[paths]
nucleon_dir = "./data/nucleon"
electron_dir = "./data/electron"
orbital_dir = "./data/orbital"
cache_dir = "./data/cache"
template_dir = "./data/template"
# 服务提供者配置
[services]
audio = "playsound" # 可选: playsound, termux
tts = "edgetts" # 可选: edgetts
llm = "openai" # 可选: openai
# OpenAI 兼容 LLM 配置
[providers.llm.openai]
url = "" # API 端点 URL
key = "" # API 密钥
```
## 项目结构
### 架构图
以下 Mermaid 图展示了 HeurAMS 的主要组件及其关系:
```mermaid
graph TB
subgraph "用户界面层 (TUI)"
TUI[Textual TUI]
Widgets[界面组件]
Screens[应用屏幕]
end
subgraph "服务层"
Config[配置管理]
Logger[日志系统]
Timer[时间服务]
AudioService[音频服务]
TTSService[TTS服务]
OtherServices[其他服务]
end
subgraph "内核层"
Algorithms[算法模块]
Particles[数据模型]
Puzzles[谜题模块]
Reactor[调度反应器]
end
subgraph "提供者层"
AudioProvider[音频提供者]
TTSProvider[TTS提供者]
OtherProviders[其他提供者]
end
subgraph "数据层"
Files[本地文件数据]
end
subgraph "上下文管理"
Context[ConfigContext]
CtxVar[config_var]
end
TUI --> Config
TUI --> Logger
TUI --> AudioService
TUI --> TTSService
TUI --> OtherServices
Config --> Context
AudioService --> AudioProvider
TTSService --> TTSProvider
OtherServices --> OtherProviders
Reactor --> Algorithms
Reactor --> Particles
Reactor --> Puzzles
Particles --> Files
Algorithms --> Files
Config --> Files
```
### 目录结构
```
src/heurams/
├── __init__.py # 包入口点
├── context.py # 全局上下文、路径、配置上下文管理器
├── services/ # 核心服务
│ ├── config.py # 配置管理
│ ├── logger.py # 日志系统
│ ├── timer.py # 时间服务
│ ├── audio_service.py # 音频播放抽象
│ └── tts_service.py # 文本转语音抽象
├── kernel/ # 核心业务逻辑
│ ├── algorithms/ # 间隔重复算法 (FSRS, SM2)
│ ├── particles/ # 数据模型 (Atom, Electron, Nucleon, Orbital)
│ ├── puzzles/ # 谜题类型 (MCQ, cloze, recognition)
│ └── reactor/ # 调度和处理逻辑
├── providers/ # 外部服务提供者
│ ├── audio/ # 音频播放实现
│ ├── tts/ # 文本转语音实现
│ └── llm/ # LLM 集成
├── interface/ # Textual TUI 界面
│ ├── widgets/ # UI 组件
│ ├── screens/ # 应用屏幕
│ └── __main__.py # 应用入口点
└── default/ # 默认配置和数据模板
```
## 贡献
欢迎贡献!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解贡献指南。
## 许可证
本项目基于 AGPL-3.0 许可证开源。详见 [LICENSE](LICENSE) 文件。