“背单词”这件事,可以说是我们学习生涯中一座难以翻越的大山。最令人沮丧的不是背的过程,而是遗忘的速度——今天刚背的50个单词,明天可能就忘了一半。这种无力感,其实源于一个深刻的认知规律:艾宾浩斯遗忘曲线

德国心理学家艾宾浩斯通过实验发现,我们对新事物的遗忘速度,是先快后慢的。如果我们不在恰当的时间点进行复习,大部分信息都会在短时间内迅速流失。而对抗这条曲线最有效的武器,就是间隔重复系统(Spaced Repetition System, SRS)

像 Anki 这样的经典工具就是基于此原理。但今天,我们要更进一步,将 AI 注入这个古老而有效的学习法中,打造一个更智能、更懂你的“单词记忆神器”。

目标:创建一个AI驱动的间隔重复记忆工具

我们将编写一个 Python 脚本,它能:

  1. 管理一个你想要背诵的单词列表。
  2. 根据间隔重复算法,每天自动为你筛选出“即将忘记”的单词。
  3. 在复习时,调用 AI 为每个单词生成独特的例句或助记法,加深理解。
  4. 根据你的回答情况,智能地调整下一个复习日期。

第一步:奠定理论基础

  • 遗忘曲线: 你学到一个新知识后,遗忘会立即开始。
  • 间隔重复: 在你即将忘记的那个“最佳时间点”进行复习,能最高效地加固记忆,延长下一次遗忘的时间。这个复习的间隔会越来越长,比如1天、3天、7天、20天…

第二步:数据结构设计

我们需要一个地方来存储我们的单词卡片以及它们的状态。一个 JSON 文件是绝佳的选择。

my_vocabulary.json:

[
    {
        "id": 1,
        "word": "ubiquitous",
        "definition": "present, appearing, or found everywhere.",
        "last_review": null,
        "next_review": "2025-03-21",
        "interval": 1,
        "ease_factor": 2.5
    },
    {
        "id": 2,
        "word": "ephemeral",
        "definition": "lasting for a very short time.",
        "last_review": "2025-03-18",
        "next_review": "2025-03-25",
        "interval": 7,
        "ease_factor": 2.6
    }
]
  • interval: 当前的复习间隔(天)。
  • ease_factor: 简易度因子,一个浮点数,表示这个单词对你来说有多“简单”。它会根据你的回答动态调整。

第三步:核心算法与AI的融合

现在,我们用 Python 来实现这个智能系统。

  1. 安装依赖:

    pip install openai
    
  2. 创建主脚本 smart_anki.py:

    # smart_anki.py
    import json
    import os
    from datetime import datetime, timedelta
    from openai import OpenAI
    
    client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
    VOCAB_FILE = "my_vocabulary.json"
    
    def load_vocab():
        """加载词汇表"""
        if not os.path.exists(VOCAB_FILE):
            return []
        with open(VOCAB_FILE, 'r', encoding='utf-8') as f:
            return json.load(f)
    
    def save_vocab(vocab_list):
        """保存词汇表"""
        with open(VOCAB_FILE, 'w', encoding='utf-8') as f:
            json.dump(vocab_list, f, indent=4)
    
    def get_ai_context(word, definition):
        """调用AI为单词生成上下文"""
        try:
            prompt = f"I'm learning the English word '{word}', which means '{definition}'. To help me remember it, please provide one simple and clear example sentence, and one creative mnemonic. Format your response as: \nExample: [sentence]\nMnemonic: [mnemonic]"
            response = client.chat.completions.create(
                model="gpt-4o",
                messages=[{"role": "user", "content": prompt}],
                temperature=0.7,
                max_tokens=100
            )
            return response.choices[0].message.content
        except Exception as e:
            return f"Error getting AI context: {e}"
    
    def review_session(vocab_list):
        """开始复习"""
        today = datetime.now().date()
        due_cards = [card for card in vocab_list if datetime.strptime(card['next_review'], '%Y-%m-%d').date() <= today]
    
        if not due_cards:
            print("今天没有需要复习的单词,太棒了!")
            return
    
        print(f"你好!今天有 {len(due_cards)} 个单词需要复习。\n")
    
        for card in due_cards:
            print("="*30)
            print(f"单词: {card['word']}\n")
    
            # AI 生成上下文
            ai_help = get_ai_context(card['word'], card['definition'])
            print(f"--- AI 助记 ---\n{ai_help}\n------------------\n")
    
            input("准备好了吗?(按回车键查看答案)")
            print(f"\n答案: {card['definition']}\n")
    
            # 用户反馈
            while True:
                try:
                    rating = int(input("你对这个单词的熟悉程度是?(1:完全忘记, 2:记错了, 3:有点印象, 4:记得, 5:非常熟悉): "))
                    if 1 <= rating <= 5:
                        break
                    else:
                        print("请输入1到5之间的数字。")
                except ValueError:
                    print("无效输入,请输入数字。")
    
            # 更新卡片状态 (简化的SM-2算法)
            if rating < 3:
                card['interval'] = 1 # 答错了,明天再来
            else:
                card['ease_factor'] = round(card['ease_factor'] + (0.1 - (5 - rating) * (0.08 + (5 - rating) * 0.02)), 2)
                if rating == 3:
                     card['interval'] = round(card['interval'] * 1.2)
                else:
                    card['interval'] = round(card['interval'] * card['ease_factor'])
    
            card['last_review'] = today.strftime('%Y-%m-%d')
            card['next_review'] = (today + timedelta(days=card['interval'])).strftime('%Y-%m-%d')
    
            print(f"更新成功!下一次复习时间: {card['next_review']}\n")
    
        save_vocab(vocab_list)
        print("今天的复习结束了!")
    
    
    if __name__ == "__main__":
        all_vocab = load_vocab()
        review_session(all_vocab)
    

第四步:开始你的智能记忆之旅

  1. 准备数据:在 my_vocabulary.json 文件里,填入你想背的单词。一开始,last_review 可以是 nullnext_review 设置为今天的日期。
  2. 设置密钥:在终端设置你的 OPENAI_API_KEY 环境变量。
  3. 每日执行:每天运行一次 python smart_anki.py

程序会自动筛选出到期的单词。在复习时,AI 会为你提供独特的、充满创意的例句和助记法,这比干巴巴地看释义要有趣得多,也更容易形成深度记忆。你只需要根据自己的真实情况打分,剩下的计算就交给算法好了。

结语

我们通过几十行代码,就将一个经典的记忆理论和强大的 AI 模型结合起来,创造了一个远超传统“死记硬背”的学习工具。

这个脚本只是一个起点,但它蕴含着一个重要的思想:AI 不仅仅是回答问题的工具,更是可以用来增强我们自身学习能力、优化我们认知流程的强大伙伴。

现在,开始把那些你一直想背却又总是忘记的东西,放进你的智能记忆神器里吧!