Skip to content

Repository files navigation

DSH Recall Deck(记忆卡工坊)

独立 AI 产品案例 · deepseek-harness-java Java Native Plugin 文本出卡 · SM-2 间隔重复 · 学习统计(进度只增不删)

一个基于 DSH(deepseek-harness-java)Java Native Plugin 的独立 AI 产品:把任意 Q/A 学习材料变成记忆卡组,用 SM-2 算法安排间隔复习,并提供学习统计。AI 通过插件工具直接操作卡组,红线是学习进度只增不删。

架构

┌─────────────────────────────┐        ┌──────────────────────────────┐
│  dsh-java-recall-deck-app   │        │  deepseek-harness-java:8090  │
│  (Spring Boot, port 8117)   │        │                              │
│  ├─ REST: /api/deck/*       │◄───────┤  DshRecallDeckPlugin         │
│  ├─ /api/assistant/stream ──┼───────►│  (JAVA_NATIVE, in-process)   │
│  └─ static/ 记忆卡工坊 UI    │  SSE   │   ├─ fc_generate_deck        │
└─────────────────────────────┘        │   ├─ fc_import_text          │
                                       │   ├─ fc_schedule_sm2         │
                                       │   ├─ fc_review_today         │
                                       │   └─ fc_stats                │
                                       └──────────────────────────────┘
  • App(dsh-java-recall-deck-app):Spring Boot 应用,提供卡组 REST API + 工作台前端 + SSE 助手转发。
  • Plugin(dsh-java-recall-deck-plugin):AbstractHarnessPlugin Java Native 插件,5 个工具通过 REST 回调 App。

核心功能

工具 说明
fc_generate_deck 从 Q:/A: 格式文本生成卡组,同问题自动去重(追加式)
fc_import_text AI 拟卡入库(source=ai-import),同生成逻辑
fc_schedule_sm2 SM-2 排程:quality 0-2 答错重置 1 天,3-5 答对按 EF 拉长间隔(1天→6天→interval×EF),EF 下限 1.3
fc_review_today 今日待复习队列(dueAt 已到,按逾期排序)
fc_stats 学习统计:总卡数/已学/成熟卡(interval≥21天)/平均EF/保持率

安全红线

  • 所有工具只增不删:卡片与复习记录只追加,不提供删除/清空接口。
  • systemPrompt + PRE_TOOL_USE hook 强制约束;用户要求"清空学习记录"时,AI 拒绝并建议新建卡组或标记归档。
  • E2E T6 验证 AI 拒绝清空请求并给出替代方案。

运行

# 1. 构建
mvn package -DskipTests

# 2. 启动 App(端口 8117)
SERVER__PORT= java -jar dsh-java-recall-deck-app/target/dsh-java-recall-deck-app-0.1.0-SNAPSHOT.jar --server.port=8117

# 3. 安装插件(harness 运行在 8090)
cp dsh-java-recall-deck-plugin/target/dsh-java-recall-deck-plugin-0.1.0-SNAPSHOT.jar ~/.dsh/standalone/plugins/dsh-java-recall-deck-plugin.jar
curl -X POST http://127.0.0.1:8090/api/harness/plugins/install -H 'Content-Type: application/json' -d '{
  "pluginId":"dsh-java-recall-deck-plugin",
  "jarName":"dsh-java-recall-deck-plugin.jar",
  "displayName":"Recall Deck",
  "pluginVersion":"0.1.0",
  "runtimeType":"JAVA_NATIVE",
  "sourcePath":"/Users/<you>/.dsh/standalone/plugins/dsh-java-recall-deck-plugin.jar",
  "entrypoint":"cn.xiaofuge.dsh.com.dsh.recalldeck.plugin.DshRecallDeckPlugin",
  "installMode":"REPLACE"
}'
curl -X POST http://127.0.0.1:8090/api/harness/plugins/activate -H 'Content-Type: application/json' -d '{"pluginId":"dsh-java-recall-deck-plugin"}'

# 4. 打开 http://127.0.0.1:8117

注意:替换插件 jar 后需要重启 harness 进程,否则 JVM 缓存旧 jar 句柄会报 ZipFile invalid LOC header。

E2E

python3 recall_deck_e2e.py   # 21/21 PASS

覆盖:卡组生成/去重/短文本拒绝、SM-2 全流程(首过1天→二过6天→倍增→答错重置→非法quality拒绝)、今日队列、统计、SSE AI 工具调用(fc_review_today / fc_import_text)、红线(拒绝清空学习记录)。

截图

文件 场景
screenshots/01-home.png 工作台首页:今日待复习 6 张到期 / 8 总卡数
screenshots/02-ai-drawer.png AI 调用 fc_review_today + fc_stats 给出统计与建议
screenshots/03-safety.png AI 拒绝"清空学习记录"并给出替代方案

About

DSH Recall Deck: 记忆卡工坊/SM-2间隔重复/学习统计 - Java Native Plugin 独立 AI 产品,不删学习进度

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages