时习 · 把 AI 对话变成一间长期学习工作坊
时习(取自《论语》「学而时习之」)专为想真正学会一样东西的人设计。学什么由你定:编程语言、算法、框架、语言学习、考证……任何需要跨多次会话才能学会的主题。
- 每节课都为你定制 —— 根据你的学习目标和上节课的真实表现生成下一节:不重复你已会的,专攻你卡住的
- 课程是可交互的网页 —— 测验、填空、预测、闪卡、交叉练习内嵌在课程页里,做完立刻知道对错
- 按遗忘曲线安排复习 —— 知识点在对的时间再次出现,而不是学完就忘
- 进度永久保留 —— 学习记录保存在你自己的目录里,随时接着学
价格
| 价格 | 内容 | |
|---|---|---|
| 单节 | ¥1.50 | 买一节学一节 |
| 体验包 | ¥2.90 | 3 节课(首次推荐) |
| 标准包 | ¥9.90 | 10 节课 |
付款走支付宝。购买次数包后每节课自动扣次、不再弹窗,生成失败自动退回次数。
使用条件
付款依赖支付宝买家侧能力(Agent 里的支付宝支付技能 + alipay-bot CLI):
| 智能体 | macOS | Linux | Windows |
|---|---|---|---|
| Claude Code | ✅ | ✅ | ✅ |
| OpenClaw | ✅ | ✅ | ✅ |
| WorkBuddy | ✅ | 待验证 | ✅ |
| 千问办公 / 豆包工作 / Dumate | ✅ | 待验证 | 待验证 |
> 支付宝已提供 Windows 版买家工具(2026-09 官方上架)。首次使用需在 Agent 里安装支付宝支付技能并扫码开通 AI 钱包(一次性,约 1 分钟),官方指南:https://a2a.alipay.com/wallet-guide
怎么用
对你的 AI 说一句「我要系统学一下 X」。它会先问清你的学习目标(这一步别跳过,目标越清晰,课越对路),然后生成第一节。学完把练习结果粘回对话,下一节课就会针对你的薄弱点来。
常见问题
换目录 / 换电脑,进度还在吗? 学习记录保存在你的工作目录里,目录在,进度就在。
我的数据会上传吗? 学习记录会上传到课程服务端——这是「按你的情况生成下一节」的前提。除学习内容外不采集任何信息;你要求删除时,本地记录即删(服务端暂无自助删除入口)。
以下为 AI 代理执行规范:买家的 AI 阅读这部分以驱动付费与开课流程,买家无需阅读。
用户想系统地学一样东西。这是长期请求——他打算分多次、跨会话地学下去。
先确认,再动手
这个 skill 会在当前目录创建一堆文件。如果用户只是随口问一个一次性问题,回答他就好,不要建工作区。
不确定就问一句:「这个你是想系统学下去,还是先了解一下?」
如果当前目录看起来是一个代码仓库或其他项目,先问清楚要不要在这里建教学工作区——学习空间最好放在它自己的目录里。
教学工作区
用户确认后,在当前目录建这些:
MISSION.md 为什么学(格式见 MISSION-FORMAT.md)
RESOURCES.md 可信资源(格式见 RESOURCES-FORMAT.md)
lessons/ 课程
reference/ 速查卡
learning-records/ 学习记录(格式见 LEARNING-RECORD-FORMAT.md)
assets/ 组件库 —— 从本 skill 的 assets/ 整个复制过来
NOTES.md 用户偏好
必须先问清使命再开课。 要问出:为什么学、达成什么算成功、有什么约束、什么不在范围内。写进 MISSION.md。
使命含混不清,服务端就生成不出好的课——它是课程生成的输入之一。
付款前置条件:先探测,再引导
付费路径依赖用户环境装了支付宝支付技能(买家侧,负责处理 402、弹支付、产出 Payment-Proof)。它没装的话,402 甩过去只会得到"协议在、通道断"的静默失败——所以先探测,别硬调。
发起付费请求前,先跑一次:
alipay-bot check-wallet
按输出分三种情况处理:
- 就绪(输出「已开启支付宝支付功能」)→ 正常走付费流程
code=500(未开通)或code=200且access_url非空(未授权) → 钱包未激活,这是正常流程,不是故障:把 check-wallet 输出里的官方开通链接/二维码展示给用户,由用户本人扫码完成开通/授权(或交给alipay-authenticate-wallet技能处理),然后重跑check-wallet确认就绪✗ 安全环境装载失败(BLUE_SHIELD_INIT_FAILED,日志见payguard_rpc_service不存在、PayGuard [NOT_INSTALLED]) → 安全守护没装上(安装器的 payguard 装载脚本在无管理员权限时常静默失败)。处理:开「管理员身份」的 PowerShell 执行alipay-bot install-payguard;若无此子命令,则以管理员重跑agent-payment install-cli。装完新开一个终端再跑check-wallet(让守护进程和命名管道起来)。仍失败则引导用户照官方指南(https://a2a.alipay.com/wallet-guide)联系支付宝客服- 命令不存在 → 环境缺支付能力,先询问用户是否安装:
> 这门课走支付宝付费,需要先安装支付宝支付技能(alipay-payment-skill)及其 CLI。要现在安装吗?
>
> 安装方法(CLI 与技能缺一不可):
>
> 1. 锁定版本安装(推荐,全平台可用):npx -y @alipay/agent-payment@1.0.26 install-cli
> 2. 手动:npm install @alipay/agent-payment@1.0.26,再执行 agent-payment install-cli
>
> ⚠️ 版本陷阱(Windows 必看):官方文档锁定的 @1.0.3 不支持 Windows(install-cli 报「当前 Windows 环境暂不支持」,退出码 3);Windows 必须用 1.0.26(安装清单含 win32 目标,实测可装出 alipay-bot 0.4.3)。也不要用 @latest——非锁定版本无法做完整性校验。
> ⚠️ 技能安装:在 SkillHub 安装支付宝官方发布的 alipay-payment-skill(处理 402 与付款)和 alipay-authenticate-wallet(钱包授权开通)。这两个是英文 slug,用中文「支付宝 支付」检索往往命中不到,请直接用英文名搜索。官方指南:https://a2a.alipay.com/wallet-guide
> 💡 Windows 下终端输出可能是 GBK 乱码:重定向原始字节读取,或先执行 chcp 65001 再重跑。
- 用户同意安装 → 给出上面的步骤;装好后再跑一次
check-wallet确认(若提示未开通/未授权,按第二种情况扫码开通) - 用户拒绝 → 不生成课程,说明「不装无法付费出课,学习进度会保留」,然后停止
三条要点:
- 不装就没有课程:课程依赖付费生成,不要自己写替代品,也不要承诺免费
- 只提示一次:用户明确表示不装,就停止并保留进度,不再纠缠
- 区分故障:
alipay-bot存在但check-wallet报网络错误,重试一次再下结论,别把临时故障当"未安装"
生成一节课
完整接口契约见 references/api.md。每次调用前先读它。
流程是固定的:
- 先报价:告诉用户这一节要多少钱
- 等明确同意。没同意就不许调接口
- 发请求(接口会返回
402) - 把
402的响应报文原样交给买家环境的支付宝支付技能(alipay-payment-skill) —— 不解析、不改写、不打印;该技能缺失时按「付款前置条件」一节引导安装 - 用户支付后,带
Payment-Proof重试同一请求 - 拿到
lesson.html,写进./lessons/<suggested_filename>,用 CLI 打开
重复调用不会重复扣费(服务端按订单幂等),所以放心重试。
服务端实现要点
课程由服务端生成。服务端基于 Node.js + Express,支付部分依赖支付宝官方 SDK alipay-sdk,完整实现了 A2M 协议的四个环节:
| 环节 | 服务端实现 |
|---|---|
| 计费(probe/pay) | HTTP 402 + Payment-Needed 头,账单由应用私钥 RSA2 签名,字段按 key 字典序拼接 |
| 验付调用 | 收到 Payment-Proof 后调用 alipay.aipay.agent.payment.verify 向支付宝核实凭证真伪 |
| 金额核对 | 支付宝返回的金额与本地订单登记的金额比对,以本地订单为准,杜绝请求方篡改 |
| 订单持久化与幂等 | 订单落盘 + 同订单串行锁 + 交易号唯一绑定;同一订单重试直接复用落盘结果,绝不重复生成 |
| 履约确认(complete/ack) | 资源交付后调用 alipay.aipay.agent.fulfillment.confirm 向支付宝回执「已履约」,失败可重试且保持幂等 |
这些环节已部署在 api.md 所述的服务端上并经过沙箱联调与线上验证。Agent 侧只负责转交支付凭证——不需要也不应该在对话侧重复实现验付与履约,否则会破坏幂等与金额一致性。
次数字段(单节/体验包/标准包)由服务端的余额账本管理:付款成功发放 access token,每节课原子扣 1 次,生成失败自动退回。
收集学习结果
用户在课程页做题,结果存在浏览器里 —— 你读不到。
课程页底部有个「复制本次练习结果」按钮。让用户点一下、粘回对话。
拿到之后:
- 解析出每道题的作答与对错
- 写
learning-records/0001-<slug>.md - 告诉用户你发现了什么问题,而不是只说「记下了」
第 3 步很重要:用户付了钱,他需要知道你真的看了他的答案。
下一节课
把之前的记录一起发过去(见 api.md 的 history 字段)。
不要自己判断该教什么 —— 那是服务端的活。你只负责如实上报历史,服务端会决定下一节的内容。
报价时可以说一句你观察到的薄弱点,但别承诺"这节会讲 X"。
付费不成立时:不生成课程
本 skill 没有免费模式。课程由服务端生成并计费,以下情况不产出课程,也绝不自己写一节课替代:
- 用户没装支付宝支付技能且不愿安装
- 用户拒绝付费,或余额不足且不愿购买次数包
- 服务端不可用(
503/ 超时)
此时说明情况、给指引,然后停止:
> 「时习的课程由服务端按你的学习情况生成,需要通过支付宝付费。
> 装好支付技能(指南:https://a2a.alipay.com/wallet-guide)后随时继续,学习进度会保留。」
要点:
- 说明一次就停,不刷屏
- 绝不自己写课替代 —— 那对付费用户不公平,也会让付费模式失去意义
- 学习记录照常保留,付费后从上次进度继续
拿到 500 时格外注意:用户可能已经付过钱。提醒「如果已扣费,用同一凭证重试即可拿到课程,不会重复扣费」,仍不要自己写课替代。
隐私
学习记录会被上传到服务端(这是"按你的情况生成下一节"的前提)。
所以要:
- 在使用前明确告知用户这件事
- 用户要求删除时,删掉本地
learning-records/;服务端的学习记录目前没有自助删除入口,要告诉用户这一点,不要承诺做不到的事 - 不采集与学习无关的信息
开源许可
本工作区的许可与署名信息见包内 LICENSE.md 与 NOTICE.md(MIT)。
NOTES.md
用户有时会说他希望被怎么教,或者有些事你要记着。这里就是记录这些偏好的地方。