跳到主要内容

13-个人学习助手实战任务书

核对日期:2026-05-18
官方资料:Long-term memory https://docs.langchain.com/oss/javascript/langchain/long-term-memory;Short-term memory https://docs.langchain.com/oss/javascript/langchain/short-term-memory;Structured output https://docs.langchain.com/oss/javascript/langchain/structured-output

目标

src/projects/learning-assistant.ts 扩展成能长期陪伴学习的助手。它应能记住学习目标、当前阶段、已完成内容、薄弱点、复习节奏,并输出可执行计划。

机制

TypeScript 任务拆解

任务修改位置产物验收方式
学习事件 schemalearning-assistant.tsStudyEvent无效事件测试失败
长期记忆分类memory-store.tsprofile/progress/weakness/review namespaces查询能按 namespace 返回
计划生成LearningAssistant.plannext tasks、review items、time budgeteval 检查任务数量和复习项
遗忘/更新策略新增方法update/delete memory测试旧偏好能被替换
前端可消费输出schemaLearningPlanJSON shape 稳定

推荐数据结构

interface StudyEvent {
userId: string;
type: "finish-topic" | "fail-quiz" | "add-goal" | "review";
topic: string;
note?: string;
occurredAt: string;
}

interface LearnerProfile {
goal: string;
preferredLanguage: "TypeScript" | "Python" | "both";
weeklyMinutes: number;
weakTopics: readonly string[];
}

记忆写入策略

信息是否写长期记忆原因
学习目标跨会话稳定
当前章节用于续学
一次性抱怨视情况需要确认是否是稳定偏好
密钥、账号、隐私不应进入长期记忆
测验错题主题用于复习计划

Python 差异

Python 侧可以用 Pydantic 和 LangGraph store 表达同样结构。TypeScript 侧要保证 schema 可以被前端复用。跨语言时,长期记忆的 namespace 和 key 要一致。

Eval 数据集

用例输入预期
新用户建档goal + current topic写入 profile
完成章节finished topics生成复习项
时间不足每天 15 分钟任务变少、粒度变小
薄弱点fail quiz下次计划优先复习
隐私输入包含 token不写长期记忆

工程边界

  • 记忆写入需要可解释,不要把所有聊天内容自动保存。
  • 长期记忆需要更新和删除,不是 append-only 日志。
  • 学习计划要能被 UI 或 CLI 消费,不能只返回散文。

常见反模式

反模式后果
只存聊天摘要无法精确检索和更新
不区分事实和推断模型误判会长期影响计划
计划没有时间预算用户无法执行
不测隐私写入敏感信息可能进入长期记忆

练习任务

  1. 增加 recordEvent(event: StudyEvent) 方法。
  2. 增加“每天 15 分钟”场景,让 next tasks 更短。
  3. 写测试确认包含 token 的 note 不会进入 store。