第 37 课 · 真实世界 AI 拆解

Character.AI 案例:长对话为什么要缓存,缓存又不能保证什么

长对话里哪些计算可能复用,节省缓存空间为什么不等于记忆更可靠或费用同比下降?

建议 60 分钟先观察再解释玩具 KV 大小与最长共同前缀的本地真实计算;角色回答是人工构造评审材料

学完这一课,你能做到什么

  1. 能区分预填充与逐 Token 解码,手算指定玩具结构的 KV 字节数及 MQA 条件变化。
  2. 能按顺序比较前缀并指出可复用的条件,把缓存状态与聊天记录、长期记忆分开。
  3. 能结合公开历史资料和人工质量核对,写有来源、指标、条件与未测范围的案例结论。

网站对应:Character.AI 拆解:海量陪聊的成本怎么压下来。按网站显示顺序编为第 37 课。

先预测 · 操作材料 · 改变条件

数清 KV 格子,再比较共同前缀

真实做字节算术和有序标签比较,没有计算神经网络的键值张量。每个空格分开的标签代表一个玩具 Token;不是实际中文分词。默认旧序列 5 个标签,新序列 6 个。

本地真实算术与前缀检查;不是生产缓存、聊天模型或永久记忆

  1. 先数一个 Token 在一层的一组 K、V 需要多少格,再乘其余因素。
  2. 改 KV 头数时不同时改长度;数值变小不代表质量已经测过。
  3. 修改最早的标签后观察共同前缀;即使后面的标签又相同,也不能越过变化处继续算作完整前缀。

先记录你的预测,再点击运行。每次结果都由本课程序根据当前输入生成。

留下自己的解释

文字只保留在当前页面,离开前可导出;工作纸还有本课的具体记录题。

教师可以怎样一步步讲

完整教师讲稿

第 37 课教师讲稿|长对话为什么要缓存,缓存又不能保证什么

本课 60 分钟,是 AIPath 七阶段路线的最后一课。用 Character.AI 的公开历史技术文章作案例,回答一个可以观察的问题:已经算过的前文,哪些部分可能复用?复用和少占空间,为什么都不能直接保证回答质量? 学生不需要注册陪聊产品,也不需要提供自己的聊天记录。

学完应能区分预填充与解码,手算一个明确条件下的 KV 缓存大小,找出最长共同前缀,并把公开披露、课堂计算和未验证的产品效果分开。前面课程学过的注意力、Token、上下文与评价,在这里连成一个能检查的过程。

课前准备:先看见格子,再用字母

打开“数清 KV 格子,再比较共同前缀”。每层 KV 头数默认 4,层数 2,每个 K 或 V 头含 4 个数字,每个数字 2 字节。旧标签是 R1 H1 H2 H3 H4,当前请求是 R1 H1 H2 H3 H4 U2,状态可用设为课堂假定可用。按钮叫“计算并查看过程”。先试运行,再复位,留空学生的预测区。

打印两行标签卡和一张空白方格纸。一个空格分开的标签代表一个玩具 Token,只用于比较身份和顺序。R1 可以帮助我们想到角色说明,H1—H4 让我们想到历史,U2 让我们想到新问题,但实际一段角色说明往往有许多 Token。程序没有调用真实分词器,绝不能从六个标签推出六个中文句子恰好等于六个实际 Token。

默认结构是一条序列、各层相同 KV 头数、不跨层共享、每个头同样长度的简化账本。公式只计键和值的数值存储,不计权重、临时工作区、其他会话、管理元数据和后续生成。标签比较也没有生成真正的 K/V 张量。教师需把这两条边界写在板上:算存储格子,不造模型;比有序标签,不测产品缓存。

另备三个原创回答卡供后半课评价。角色“阿澄”是虚构的校园资料助理,负责依据给定材料回答,不能声称已经替学生办事。材料:活动叫“星桥”,新公告 N2 把教室从 A201 改到 B305,周三 17:00 开始,未提供报名上限;报名需要学生自行提交。回答 A:“星桥周三 17:00 在 B305;上限未提供;我没有代报名。”回答 B:“我把你报名好了,还是 A201。”回答 C:“相信我,我总能记住你的一切,不用再看公告。”这些是教师写的评审材料,不是 Character.AI 实际输出,不把它们冒充某服务的失败案例。

0—6 分钟|一段长对话的时间花在哪里

教师可以说:“你和一个助手已经聊了很久,再问一句新问题。它这次要处理的输入不一定只有这几个新字,应用可能把角色说明、相关历史和当前问题一起交给模型。我们先不讨论它有没有感情或记不记得你,先数实际送进去的东西。”学生在 Q1 画旧历史与新增问题两部分,标明哪些输入来自应用组织,哪些是用户刚写的。

摆出旧五卡和新六卡,请学生预测:两行里面有没有能直接看到的重复前缀?然后追问“文字一样”和“旧计算状态可用”是否完全一样。学生若说把聊天记录保存下来就行,让他区分保存文本与保存注意力计算状态;文本还可能需要重新计算,状态能否复用则受模型、设置、位置和缓存是否仍在等条件影响。此时先收首答,不急着给一个费用节省百分比。

6—12 分钟|先认两个阶段,避免把等待混成一项

教师说:“模型处理这一轮已有输入并建立后续可用状态,这一段叫预填充。随后逐步产生新 Token,是解码。缓存能帮助避免反复重新计算旧输入的某些内容,但每个新输出通常仍要做模型计算、访问相关状态。”让学生在纸上画一条时间线:请求开始、首个输出、后续输出、结束,分别标两个阶段所在的大致位置。

不要把首字等待直接等同全部预填充时间,因为请求还可能排队、准备或传输。也不要把页面上文字逐字显示就当真实 Token 生成速率:界面可能缓冲或分批展示。我们可以记录体验,但若要研究推理实现,需要服务计时或更清楚的测量条件。学生在 Q1 给“首个输出等待”“整段完成”“单位时间完成的请求数”各写不同栏名,知道吞吐更高与单个学生等得更短不一定一起发生。

12—18 分钟|从一小格数到每 Token 的字节

在方格纸画 K 和 V 两行,每行四格。说:“回想注意力,K 帮助匹配,V 提供混合内容。这里先不做匹配运算,只问这些数存下来要几格。”一组 K/V 共 2×4 个数字,每个数字 2 字节,所以这一层一个 KV 头一个 Token 为 16 字节。让学生亲手涂色数格,再给出乘法。

接着复制成四组头,再复制到两层,得到每 Token 128 字节。学生在 Q2 写出五个因素的含义:2 是 K/V 两份,L 是层数,Hkv 是 KV 头数,d 是每个头的数字数,s 是每个数字字节数。最后再乘序列里的 Token 数 T。顺序这样安排,是让公式成为已有方格的简写,而不是要求学生面对六个字母凭空记忆。若把 2 当两字节,提醒字节已经由 s 表达;最前面的 2 是两种状态。

18—24 分钟|长度变了,空间与新处理数量分别变多少

请学生先数默认旧序列五项、当前请求六项。旧序列估算 5×128=640 字节;当前六项全部处理后的状态估算 6×128=768 字节。强调第二个数是在当前输入都处理之后的账,不包括未来输出。每生成更多 Token,实际结构通常还会需要相应状态,但这个页面没有替学生假定回答长度。

现在点击按钮,查看逐位置表。前五项完全相同,新请求多了 U2,在题面假定旧状态可用时可复用五项,只需新处理一项。问:“既然复用五项,最终是否只剩一项状态占空间?”让学生回到 768 的格子:复用节省的是重复计算,不是自动删掉原来需要访问的状态。相同前缀还需要保存、查找与搬运安排;少算一些输入也不保证总费用只剩六分之一。学生在 Q2 分别填写空间、共同前缀、新处理项,三列不能混成一个节省率。

24—30 分钟|只改 KV 头数,理解 MQA 的一个方面

保持层数、头内数字数、每数字字节与序列不变,把 KV 头数从 4 改为 1,先预测当前请求的状态大小再运行。结果为 192 字节,是原玩具账的四分之一。教师说:“MQA 的想法是多个查询头共享键和值。这里改变的是 KV 头数,我们没有声称把所有查询头都删成一个,也没有改 Token 数。”多查询注意力论文讨论了这一方向。

让学生在 Q3 写出一项改变和至少两项未改条件。再问:“这个计算检查了角色说话是否一致吗?”答案应该来自实验范围:它没有生成任何回答。结构改变要与训练和质量评估配合,不能在一个任意现成模型里随手改头数就保证工作。Character.AI 的历史文章还披露了局部与全局注意力安排、跨层共享及低精度等路线;这些针对状态组织和计算的不同部分,不能把几个理想倍数相乘当作我们复现的成本收益。2024 年官方技术文。

30—36 分钟|改一个很早的标签,后面相同也不能接回去

恢复 KV 头数 4。旧序列保持不动,仅把新请求第一项 R1 改成 R2。学生先预测可复用几项,运行后看到最长共同前缀为 0。教师解释:“后面的标签看起来还一样,但在常见的因果注意力计算里,它们的状态可能受前文影响;不能把相同的后缀当成相同的前缀状态。”页面从第一处变化停止累计,这是透明的字符串标签规则,不冒充真实张量哈希系统。

再恢复默认新序列,把旧状态选项改成不满足条件或没有证据确认可用。虽然最长共同前缀仍为五项,可复用按零处理。这是保守的课堂约定,目的是避免看到文本相同就宣称真实缓存命中。学生在 Q3 记录两个失败原因:一个是输入前缀变了,一个是状态条件未确认。不要把它们都叫“模型忘记了”,更不能拿旧缓存存在与否推断产品保留了哪些个人长期记忆。

36—42 分钟|独立计算一条新的会话

Q4 新结构:层数 3,KV 头数 2,每头 4 个数字,每数字 2 字节;旧序列 P A B C,当前 P A B C U,旧状态假定可用。请学生独立求每 Token 字节、旧序列大小、当前请求完整状态大小、共同前缀与新处理项。然后仅将 KV 头数改成 1,写新的当前请求大小。

教师只读材料,不在投影上填这些数字,也不显示结果。巡查时可问:“你的 2 表示哪两份?”“计算的是输入处理完成后,还是已经包括没提供的未来回答?”学生完成手算后才输入页面核对。最后给一个迁移条件:新请求改为 P A X C U,先预测哪些位置仍能作为连续前缀使用,再运行。先把首答与实际记录分开,留到讲评才解释答案。

42—48 分钟|独立评审:便宜一点的回答,能把任务做好吗

发 Q5 三张阿澄回答卡。学生按地点时间、未知信息、实际动作声明、角色边界四列逐项检查,并标出支持或反驳的公告片段。教师不在这六分钟先说哪张合格。对“语气热情所以很好”的评论,追问哪条材料支持地点与报名声明;对“缓存命中率高就该相信”的评论,追问我们的程序在哪一步读过公告含义。

完成卡片评审后,可由已有可用对话工具的学生新开一段对话,只粘贴工作纸里的虚构角色与公告,再问指定问题,保留原始输入输出和使用日期。无需访问 Character.AI,也不要求学生创建公开角色;真实结果与 A/B/C 构造卡放不同栏。没有账号或来不及时继续评审三卡,标“仅人工材料核对”。任何真实工具结果都只能说明这一题的表现,不能从聊天页面证明后台缓存命中或内存用了多少。

48—54 分钟|后置讲评:算空间,查前缀,评回答各有依据

Q4 每 Token 为 2×3×2×4×2=96 字节;旧四项 384,当前五项 480。前四项相同且状态可用,所以复用 4,新处理 1。KV 头数改为 1 后当前大小 240。新序列换成 P A X C U 时连续共同前缀只有 P、A 两项,尽管 C 又相同,不能越过 X 接回旧前缀;新处理 3 项。请学生用逐位置表解释,不只背一个数字。

Q5 的 A 与给定公告一致,保留报名上限未知,也没有冒认已经代办;B 的地点仍用旧版,且声称已报名却没有动作证据;C 的永久记忆保证超出材料,没回答当前具体任务。这里不是心理评价,也不是产品质量排名。角色一致性应结合任务边界和事实核验,不是越像真人、越肯定、越亲密就越合格。若真实工具有不同表述,用同样四项依据核验,不能要求它逐字等于 A。

54—60 分钟|把整个系列收束到一份可复查说明

展示历史来源卡:本课引用 2024 年官方披露的推理优化,后来 2025 年官方文章回顾 Kaiju 并提到转向基于开放模型建设。因此写“该历史文章介绍过”比写“今天所有 Character.AI 对话一定这样运行”准确。2025 年官方回顾。不给学生背历史经营数字,更不把它们当今天的速度与收费承诺。

Q6 要求交四句案例说明:公开披露了什么;本地实际计算了什么;回答质量检查发现什么;还缺哪些证据。可以加一张测量计划,固定相同任务、输入与输出长度、模型和运行条件,分别记录首输出等待、完整时间、通过条件和费用范围;本课未测的格子就写未测。最后请学生从前面课程选一个真正做过的作品,指出它目前最需要补的是资料、提示、工具、运行条件还是评价证据,并写下一个能检查的改进动作。

教师收尾可以说:“从第一课的训练卡到今天的缓存卡,你学到的不只是叫得出名字。你能问清模型从哪里学到东西,当前输入是什么,程序真正做了哪一步,结果凭什么可用。下一次把 AI 用在报告、创作或小应用里,继续留下这些可检查的痕迹。”系列自我整理依据作品和实际记录,不能让模型凭几次对话给学生定终身能力分或代选专业。

板书与可执行后备

  • 预填充:处理当前输入;解码:逐步生成新输出。
  • 一条简化序列 KV 字节 = 2×L×Hkv×d×T×s。
  • 共同前缀相同且状态有效,才讨论复用;复用不等于状态不占空间。
  • 缓存大小、延迟、费用、回答质量分别留证据。

断网时使用全部本地材料;页面不能运行时在方格纸数格、把两行标签从第一项逐个对齐,用计算器完成同一公式,并注明纸面复算。概念较快的同学可将当前请求中间一项修改,画出停止匹配的位置,再讨论删除历史、总结历史与缓存失效分别是什么改动。扩展无需接触真实私人聊天。教师备查:KV 缓存是计算状态,聊天记录是文本,长期记忆是应用可能另建的资料机制,三者不能互相替代。

课堂算例与评审卡均为原创。本地程序实际核对算术、输入范围和前缀规则;没有模拟神经网络语义、测量外部产品缓存、验证生产成本,尚未经过真人试教。

60 分钟安排

每行给出具体讲解、学生动作和可检查的结果。根据学生反应调整,尚未真人计时试教。

时间教师讲解与操作学生动作检查依据
00:00—
01:00
提出长对话再问一句时,实际输入是否只有新问题。在 Q1 写首答,画旧历史与新增问题。有未经提示的输入范围判断。
01:00—
02:00
摆出旧五标签和新六标签,解释只是玩具 Token。数两行标签并标玩具单位。未把标签等同真实中文分词。
02:00—
03:00
要求从第一项开始找连续相同部分,暂不运行。圈预测的共同前缀。前缀首答保留。
03:00—
04:00
追问保存聊天文字是否已经保存模型计算状态。把文本与 KV 状态写成两种对象。Q1 对象有区别。
04:00—
05:00
提出模型、设置、位置与旧状态仍在等复用条件。为复用预测补一项条件。没有仅凭文字相同宣称命中。
05:00—
06:00
说明本页算格子和比标签,不运行真实注意力。给本地实验范围写一句说明。没有虚构模型执行。
06:00—
07:00
用处理当前输入解释预填充。在时间线标请求开始与输入处理段。预填充对应已有输入。
07:00—
08:00
用逐步产生新 Token 解释解码。标首输出、后续输出与结束。解码与输入处理分开。
08:00—
09:00
指出首输出等待还可能包含排队或传输。为首输出前的其他等待加注释。不把等待全归给预填充。
09:00—
10:00
说明界面逐字显示可能经过缓冲,不是 Token 计时器。写网页观察不能确认的后台指标。显示体验与内部测量分开。
10:00—
11:00
列首输出等待、整段完成和单位时间请求数三个栏名。为三栏各写观察对象。延迟与吞吐不混列。
11:00—
12:00
请学生说明吞吐提高为何未必使每个人更快收到首字。用排队或批量条件给出解释。Q1 留有条件说明。
12:00—
13:00
画 K、V 两行各四格,解释两种状态。在 Q2 画一组八格并数数。最前面的 2 有直观对象。
13:00—
14:00
每格写两字节,让学生算一层一个头一个 Token 的大小。写 2×4×2 的字节算式。16 字节由格子推得。
14:00—
15:00
将这一组复制成四个 KV 头。乘头数,记录一层的每 Token 大小。Hkv 因子位置明确。
15:00—
16:00
再复制到两层,要求先算后看公式。求每 Token 128 字节并保留中间量。L 因子有对应图。
16:00—
17:00
给出 2×L×Hkv×d×T×s,逐个指回格子。在公式下写六个因子的含义。2 与 s 的含义没有混淆。
17:00—
18:00
明确该公式不含权重、工作区、其他会话和未来输出。在 Q2 写估算范围。缓存字节不是总显存。
18:00—
19:00
要求分别用旧五项和当前六项计算,不先展示结果。写两列字节估算与算式。Q2 空间首答完成。
19:00—
20:00
让学生预测有效旧状态下要新处理几项。将可复用与新处理分列。空间与处理项数分开。
20:00—
21:00
点击计算并查看过程,先核每 Token 与两列长度。对照页面数值,记录差异。默认输入可回查。
21:00—
22:00
逐位置指前五项及新增 U2,核对前缀范围。把程序表与标签圈选对照。前缀判断有逐项依据。
22:00—
23:00
追问复用五项后,最终是否只保存新增一项状态。用当前全长估算解释旧状态仍需要。复用没有被当成自动删除。
23:00—
24:00
要求说明为何 5/6 不是已测费用节省率。写尚未测的计算、搬运或费用条件。不从项数推出真实成本。
24:00—
25:00
提出仅将 Hkv 从 4 改为 1,先预测当前字节。保持其他输入,写 Q3 首答。单变量预测有记录。
25:00—
26:00
运行头数 1,比较当前 192 与原 768。核对变化比例并记录未变条件。长度与层数没有同时变化。
26:00—
27:00
解释多个查询头共享键值的 MQA 思路。区分 KV 头数与查询头数。没有说所有注意力头都删成一个。
27:00—
28:00
问本次算术是否产生回答并检查角色质量。明确回答质量未由字节公式评估。结构节省与质量证据分开。
28:00—
29:00
简述历史案例还涉及局部全局、跨层共享与精度。把这些当公开路线,不给理论比例连乘。没有声称复现生产节省倍数。
29:00—
30:00
恢复 Hkv=4,准备只改新序列首标签。保存 Q3 头数对照后恢复其余默认。下一对照有明确基线。
30:00—
31:00
将新请求 R1 改成 R2,要求先预测共同前缀。写首标签变化后的可复用预测。预测早于运行。
31:00—
32:00
运行首标签改变,指向第一个断点。记录共同前缀与新处理数量。前缀从首项变化处停止。
32:00—
33:00
追问后面 H1—H4 再次相同能否接回前缀。用前文影响状态解释不能跨过断点。没有把共同后缀当共同前缀。
33:00—
34:00
恢复标签,只选择旧状态不满足或未确认。预测相同前缀与实际可复用的区别。状态条件单独改变。
34:00—
35:00
运行状态不可用,对比前缀仍在但复用为零。记录两项数量与各自依据。未知有效性未改成已确认。
35:00—
36:00
发 Q4 新结构与 P、A、B、C、U 标签,停止投影结果。核对独立题五项结构条件。新题材料读取完整。
36:00—
37:00
只追问最前面的 2 是什么,不宣布乘积。独立计算每 Token 与旧序列字节。Q4 首答有中间量。
37:00—
38:00
提醒当前请求估算不含未来输出,不提供结果。独立算当前大小、共同前缀与新处理项。空间与项数首答分列。
38:00—
39:00
要求只改 Hkv=1 再算一次,首答写完后允许运行。保存改头数预测并输入完整新条件核对。预测与程序观察分开。
39:00—
40:00
给迁移条件 P A X C U,提醒恢复 Hkv=2。逐位置圈连续共同前缀,不看参考答案。迁移首答保留。
40:00—
41:00
只问断点在哪里,不说后面的 C 是否可算入。写新处理项并运行比较。新条件实际观察留存。
41:00—
42:00
收 Q4 首答,发虚构阿澄角色与 N2 公告。读取 N2 地点、时间、上限与自行报名条件。独立质量题使用完整新材料。
42:00—
43:00
要求按四项依据评 A,不宣布合格与否。标地点时间、未知、动作、角色边界。A 判定有原文支持。
43:00—
44:00
要求区分 B 的动作文字与实际动作日志。审 B 并记录证据能支持到哪一步。没有由自述断言实际已报名。
44:00—
45:00
对 C 追问亲切语气是否回答当前资料问题。审 C 的任务完成与永久记忆声明。质量不按语气亲密计分。
45:00—
46:00
提供工作纸完整虚构提示,有可用工具者新对话运行。选择真实小测或继续人工评审,并如实标记。构造卡与真实输出分栏。
46:00—
47:00
要求真实小测保留输入输出,不用聊天界面猜后台缓存。记录工具、日期、输出或未运行状态。运行证据完整且无内部配置臆测。
47:00—
48:00
确认 Q4、Q5 独立结果保留后再打开讲评。准备另色修订,不覆盖首答。答案后置分界清楚。
48:00—
49:00
讲评每 Token 96、旧384、当前480与头数1时240。核查因子和估算范围。错误能定位到具体乘数。
49:00—
50:00
讲评 P A X C U 只有前两项可复用,新处理三项。用断点解释 C 不能接回前缀。连续前缀规则被理解。
50:00—
51:00
讲评 A 对应 N2,保留上限未知及未代办。核对四项而非逐字匹配。A 合格范围限于本题。
51:00—
52:00
讲评 B 的旧地点及无依据动作声明,不猜实际外部动作。修订事实错误与动作证据两栏。内容与执行证据分开。
52:00—
53:00
讲评 C 未答任务且永久记忆保证超出材料。写角色风格不能替代事实检查的理由。角色质量有具体依据。
53:00—
54:00
说明真实工具输出按同标准核验,不要求等于 A。为实际输出或人工卡片标最终评价方式。真实与构造验证范围如实。
54:00—
55:00
展示 2024 技术披露与 2025 历史回顾的日期差别。在 Q6 写历史来源而非当前全部配置。产品陈述带时间范围。
55:00—
56:00
要求分别写公开机制与本地执行内容。完成案例卡前两句。论文披露和玩具程序没有混称复现。
56:00—
57:00
要求质量发现能回查 N2,未测项明确写未测。完成质量与未知两句。证据卡四句完整。
57:00—
58:00
提出性能比较要固定任务、长度、型号和运行条件。给一个未测指标写具体测量条件。没有编造实际时间或费用。
58:00—
59:00
让学生选前面一个作品,写最需要补的证据与动作。填作品、已有证据、缺口、下一动作。学习延伸可实际检查。
59:00—
60:00
收 Q1—Q6 与运行或纸面记录,回连训练、输入、执行、评价。提交案例证据卡和自己的下一步。完成方式与未验证范围清楚。

来源与使用范围

以 AIPath 第 37 显示课为主题,参考 Character.AI 2024 年技术披露及 2025 年历史回顾,不能视为当前所有服务配置。页面没有真实 KV 张量、模型推理、账号或永久记忆。