用 TiMem 做 AI 学习助手:让它记住你的薄弱点和学习进度

5 阅读5分钟

用 TiMem 做 AI 学习助手:让它记住你的薄弱点和学习进度

大多数 AI 学习助手都有一个反常识的问题:你用得越久,它越没用

第一次用,AI 还能认真回答你的问题。用了一个月之后,它对你的了解还是零。你上周刚把「递归」搞明白,今天又重新讲。你三次问错同一类题,它没有任何感知。

这不是 AI 的问题,是记忆层缺失的问题。本文带你用 TiMem 搭一个真正有记忆的 AI 学习助手。


理想的 AI 学习助手应该做什么

把优秀家教的行为拆开来看:

  1. 记住你学过什么:不重复讲已经掌握的内容
    1. 标记你的薄弱点:同一类型出错 2 次以上,自动标记
    1. 追踪学习进度:知道你在整个知识体系里到了哪里
    1. 调整讲解风格:你喜欢类比还是代码示例?喜欢简洁还是详细?

这四件事,普通 AI 助手一件都做不到。TiMem 的五层记忆树可以全部支撑。


TiMem 五层记忆树在学习场景的映射

层级学习场景存储内容
L1 原始片段每道题的对话原文
L2 会话摘要本次学习的知识点和错误记录
L3 每日总结今天掌握/未掌握的模块
L4 每周总结本周薄弱点模式、进步趋势
L5 用户画像整体学习风格、长期薄弱领域

动手搭建

1. 安装依赖

pip install timem-client openai

申请 TiMem API Key:console.timem.cloud

2. 初始化

import os
from timem_client import TiMemClient
from openai import OpenAI

timem = TiMemClient(api_key=os.environ["TIMEM_API_KEY"])
llm = OpenAI()

3. 核心:记忆感知的答题辅导

def tutor_reply(user_id: str, question: str) -> str:
    # 检索学习历史
        memories = timem.search(
                query=question,
                        user_id=user_id,
                                top_k=5
                                    )
                                    
                                        # 构建学习上下文
                                            learning_context = ""
                                                if memories:
                                                        lines = [f"- {m['content']}" for m in memories]
                                                                learning_context = "关于这位学生你已知道:\n" + "\n".join(lines)
                                                                
                                                                    base_prompt = (
                                                                            "你是一位耐心的编程导师。"
                                                                                    "根据学生的学习历史,有针对性地讲解,避免重复已掌握的内容,"
                                                                                            "重点关注薄弱点。讲解风格简洁,优先用代码示例。"
                                                                                                )
                                                                                                    system_content = base_prompt
                                                                                                        if learning_context:
                                                                                                                system_content = base_prompt + "\n\n" + learning_context
                                                                                                                
                                                                                                                    response = llm.chat.completions.create(
                                                                                                                            model="gpt-4o",
                                                                                                                                    messages=[
                                                                                                                                                {"role": "system", "content": system_content},
                                                                                                                                                            {"role": "user", "content": question}
                                                                                                                                                                    ]
                                                                                                                                                                        )
                                                                                                                                                                            reply = response.choices[0].message.content
                                                                                                                                                                            
                                                                                                                                                                                # 存入学习记录
                                                                                                                                                                                    timem.add(
                                                                                                                                                                                            messages=[
                                                                                                                                                                                                        {"role": "user", "content": question},
                                                                                                                                                                                                                    {"role": "assistant", "content": reply}
                                                                                                                                                                                                                            ],
                                                                                                                                                                                                                                    user_id=user_id
                                                                                                                                                                                                                                        )
                                                                                                                                                                                                                                            return reply
                                                                                                                                                                                                                                            ```
                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                            ### 4. 主动标记薄弱点
                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                            ```python
                                                                                                                                                                                                                                            def mark_weakness(user_id: str, topic: str, detail: str):
                                                                                                                                                                                                                                                """学生答错时,主动写入薄弱点标记"""
                                                                                                                                                                                                                                                    timem.add(
                                                                                                                                                                                                                                                            messages=[{
                                                                                                                                                                                                                                                                        "role": "system",
                                                                                                                                                                                                                                                                                    "content": f"[薄弱点标记] 主题:{topic},问题:{detail}"
                                                                                                                                                                                                                                                                                            }],
                                                                                                                                                                                                                                                                                                    user_id=user_id
                                                                                                                                                                                                                                                                                                        )
                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                        def mark_mastered(user_id: str, topic: str):
                                                                                                                                                                                                                                                                                                            """学生连续答对时,写入掌握标记"""
                                                                                                                                                                                                                                                                                                                timem.add(
                                                                                                                                                                                                                                                                                                                        messages=[{
                                                                                                                                                                                                                                                                                                                                    "role": "system",
                                                                                                                                                                                                                                                                                                                                                "content": f"[已掌握] {topic},连续答对,无需重复讲解"
                                                                                                                                                                                                                                                                                                                                                        }],
                                                                                                                                                                                                                                                                                                                                                                user_id=user_id
                                                                                                                                                                                                                                                                                                                                                                    )
                                                                                                                                                                                                                                                                                                                                                                    ```
                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                    ### 5. 生成学习报告
                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                    ```python
                                                                                                                                                                                                                                                                                                                                                                    def generate_learning_report(user_id: str) -> str:
                                                                                                                                                                                                                                                                                                                                                                        """基于记忆层生成学习进度报告"""
                                                                                                                                                                                                                                                                                                                                                                            memories = timem.search(
                                                                                                                                                                                                                                                                                                                                                                                    query="学习进度 薄弱点 掌握情况",
                                                                                                                                                                                                                                                                                                                                                                                            user_id=user_id,
                                                                                                                                                                                                                                                                                                                                                                                                    top_k=10
                                                                                                                                                                                                                                                                                                                                                                                                        )
                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                            if not memories:
                                                                                                                                                                                                                                                                                                                                                                                                                    return "暂无学习记录"
                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                        lines = [f"- {m['content']}" for m in memories]
                                                                                                                                                                                                                                                                                                                                                                                                                            memory_text = "\n".join(lines)
                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                response = llm.chat.completions.create(
                                                                                                                                                                                                                                                                                                                                                                                                                                        model="gpt-4o",
                                                                                                                                                                                                                                                                                                                                                                                                                                                messages=[{
                                                                                                                                                                                                                                                                                                                                                                                                                                                            "role": "user",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        "content": f"根据以下学习记录,生成一份结构化的学习进度报告,包含:已掌握模块、薄弱点、建议下一步学习方向。\n\n{memory_text}"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                }]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        return response.choices[0].message.content
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ```
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ## 模拟真实学习场景
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ```python
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        if __name__ == "__main__":
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            STUDENT_ID = "student_001"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                # 第一天:学递归
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    r1 = tutor_reply(STUDENT_ID, "递归是什么?能举个例子吗?")
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        print(r1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            # 学生答对了
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                mark_mastered(STUDENT_ID, "递归基础概念")
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    # 第二天:做题出错
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        r2 = tutor_reply(STUDENT_ID, "为什么我的递归代码总是栈溢出?")
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            print(r2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                mark_weakness(STUDENT_ID, "递归终止条件", "忘记设置 base case 导致无限递归")
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    # 一周后:AI 记得薄弱点
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        r3 = tutor_reply(STUDENT_ID, "我来练习一道树的遍历题")
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            print(r3)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                # 预期:AI 记得「递归终止条件」是薄弱点,出题时重点考察这个方向
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    # 生成学习报告
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        report = generate_learning_report(STUDENT_ID)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            print("\n=== 学习报告 ===\n", report)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ```
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ## 效果对比
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 场景 | 普通 AI 助手 | TiMem 学习助手 |
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |------|------------|----------------|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 已掌握的概念 | 重复讲解 | 跳过,节省时间 |
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 同类型题连续出错 | 无感知 | 标记薄弱点,重点讲 |
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 跨天学习 | 从零开始 | 接续上次进度 |
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 学习报告 | 无 | 自动生成进度摘要 |
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 讲解风格适配 | 固定模板 | 根据偏好调整 |
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ## 进阶:自适应刷题系统
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            基于记忆层,可以进一步实现自适应出题:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ```python
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            def adaptive_quiz(user_id: str, subject: str) -> str:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                """根据薄弱点历史,智能选题"""
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    memories = timem.search(
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            query=f"{subject} 薄弱点 错误",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    user_id=user_id,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            top_k=5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    weakness_context = ""
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        if memories:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                lines = [f"- {m['content']}" for m in memories]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        weakness_context = "该学生的历史薄弱点:\n" + "\n".join(lines)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            prompt = f"为学生出一道 {subject} 练习题。{weakness_context}\n要求:针对薄弱点出题,难度适中,附上解题思路。"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                response = llm.chat.completions.create(
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        model="gpt-4o",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                messages=[{"role": "user", "content": prompt}]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        return response.choices[0].message.content
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ```
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ## 小结
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        真正有用的 AI 学习助手 = 记住你学过什么 + 知道你哪里薄弱 + 随时间积累的个性化画像。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        TiMem 的五层时序记忆树让这件事从「理论上可行」变成了「下午能跑起来」:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        - **自动归纳**:每次学习后自动生成摘要,无需手动维护
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        - **时序感知**:近期薄弱点权重更高,旧的已掌握内容自动降权
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        - **52% Token 节省**:随着学习历史积累,成本不会线性增长
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        完整代码和文档:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        https://github.com/TiMEM-AI/timem
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        如果你对 AI 记忆技术感兴趣,欢迎访问 TiMem 的 GitHub 仓库:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          em.cloud
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          技术文档:https://docs.timem.cloud
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          https://github.com/TiMEM-AI/timem
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        给我们一个 Star,你的支持是我们持续开源的最大动力!
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        在线体验:https://playground.tim