先看证据,再下结论

DrawOffer 读取简历、目标岗位、模拟面试和真实面试记录,判断每个知识点的水平,指出简历说法是否夸大、经历是否讲得清楚。模型只读记录,推断不调用大模型,每个结论都能指回原话。

DrawOffer 读取你的简历、目标岗位、模拟面试和真实面试记录,判断你在每个知识点上的水平,指出简历说法是否写高、经历是否讲得清楚,并预测下一道题能否答好。这篇文章完整介绍它是怎么做到的:数据从哪里来,模型做什么、不做什么,结论怎样一步步算出来,证据不够时为什么宁可不下结论,以及你怎样查看、更正和删除它。

  • 简历上的说法、面试中的作答和岗位要求是三种性质不同的记录,系统分开记录、分别处理,岗位要求只定目标,不会抬高你的水平。
  • 大模型只负责把记录读成结构化的观察,并逐字摘录原话;之后的推断是确定性计算,不调用大模型,同样的输入永远得到同样的结论。
  • 每个知识点的水平都带着不确定度。证据不够时,系统给出的是“证据不足”,而不是“水平低”,并安排下一次该问什么。
  • 每条结论都能指回原始记录里的原话。删除一份资料,只依赖它的结论会随之消失,测评中逐一删除 85 份来源,残留结论为 0。

1. 为什么求职需要一种不同的记忆

一位求职者在几个月里会留下大量记录:几版简历、十几个收藏或投递的岗位、若干场模拟面试、几次真实面试后的复盘,以及准备过程中的勾选和笔记。一个真正有用的求职助手,应当能从这些记录里回答一些具体的问题:他的 Redis 到底掌握到哪一层?简历上写的“精通 MySQL”站得住吗?上一段实习的项目,他追问到第三层时还讲得清吗?离投递的岗位还差什么?

通用的对话记忆擅长另一类问题:记住你说过喜欢简洁的回复、记住你住在上海、记住你上周提到的某件事。它的基本做法是把对话抽成一条条“事实”,需要时检索出来交给模型。把这套做法直接搬到求职上,会遇到一个根本的困难:求职记录里的三类内容,性质完全不同。

  • 简历上的说法是主张。“熟练掌握 Redis”“主导了订单系统重构”是求职者对自己的描述,它可能准确,也可能写高或写低。
  • 面试中的作答是观察。一道题从哪一层开始问、追问到哪一层、在哪一层没答上来,是在特定条件下观察到的表现,是判断能力最直接的证据。
  • 岗位要求是目标。“要求深入理解分布式事务”说的是这个岗位需要什么,它定义了差距,但不能说明求职者已经具备什么。

如果把这三类内容都当作可以检索的事实,就会出现两种典型的错误。第一种是把没有证据的主张当成能力:简历写了“精通”,检索时它和面试作答一起出现,模型很容易据此认为这个人很强。第二种是把“没有证据”当成“不会”:某个知识点从没被问过,模型却在被追问时给出一个偏低的判断,这对求职者是不公平的。

DrawOffer 的长期记忆围绕一个原则设计:先看证据,再下结论。它分开记录“你说了什么”“你实际答出了什么”“系统据此推断出什么”,每条结论都要能追溯到原始记录,证据不够时就明确说“还不能判断”,并告诉你再答哪一两道题就能下结论。下面依次介绍实现这个原则的每一层。

2. 总体架构

长期记忆总体架构:来源记录经观察器读成观察,再由推断引擎计算能力、经历与问题,经过证据门槛后交给各个功能使用;用户的更正与删除会触发重新推断。
图 1 总体架构。只有观察器一层调用大模型;推断、证据门槛与组装都是确定性计算。用户的更正与删除写回来源层,系统用剩下的记录重新推断。

整套系统可以分成五层,数据自左向右流动。

来源层接收你在产品里留下的每一份记录:简历、岗位、投递进度、模拟面试、真实面试复盘、笔试、面试准备清单和面试后的勾选。每条记录被包成统一格式的“片段”,带有发生时间、来源位置和版本。

观察层把片段读成结构化的观察。一部分观察由规则直接读出,比如简历的经历条目、技能栏里“熟练”“了解”这样的修饰词、模拟面试每一层是否通过;另一部分需要理解语义,比如这道题对应目录里的哪个知识点、这段回答里求职者说自己负责了哪些部分,这部分由大模型完成。所有引用原话的字段,都要核对能在原文里逐字找到。

推断层把全部观察按时间顺序重放,计算每个知识点的能力估计(连同不确定度)、每段经历的分量与讲述情况,以及简历说法和面试表现之间的差距。这一层是纯数值计算,不调用大模型。

证据门槛决定一个估计能不能变成对外的结论。估计再有把握,如果直接作答的证据不够、只来自同一道题、或者只来自同一场面试,结论都会停在“证据不足”。

使用层是记忆真正发挥作用的地方:助手对话、模拟面试出题、简历段落精修、面试准备清单、答辩提纲和岗位匹配卡。它们读到的都是经过同一套过滤的结论,没过门槛的只会出现“待评估”。

3. 来源:每条记录都有出处和分量

片段是所有来源的统一信封。不管来自简历还是面试,片段都记录同样几项内容:类型、发生时间、来源(是哪一份简历的哪一行、哪一场面试的第几题)、来源的版本、可信度,以及最多 2000 字的正文。片段的编号由来源位置和版本计算得出,同样的内容永远得到同一个编号,所以重复导入不会产生重复记录。

记录被修改时,旧版本不会被直接覆盖,而是标记为“已被取代”。比如你改了简历上的一行,系统会用新的一行重新读取,旧的那一行不再参与推断,但它留下的历史依据仍然清楚。无论修改以什么顺序到达,结果都相同。

表 1 主要来源与它们在记忆中的角色
来源切分方式提供什么可信度
模拟面试每道主问题连同追问逐层是否通过、要点、事实错误、经历讲述已核实
真实面试复盘每道题,以及每条改进点被哪家公司问过、作答深度、你的自评已核实
笔试每道题及对错对应层级上的一次作答结果已核实或识别
简历每段经历、技能栏每一项经历、角色词、数字、熟练度说法自述
岗位与投递每个岗位、每次进度变化目标、要求的知识点与层级外部材料
准备清单与勾选每个已勾选的准备项练习记录,推进问题状态自述

不同来源对能力判断的分量不同,这个分量称为来源可靠度。真实面试最直接,可靠度为 1;模拟面试的题目和评分都来自产品,与真实面试有差别,可靠度为 0.8;简历上的熟练度说法和面试后的自评只是自述,可靠度为 0.3;岗位要求、外部材料和单纯的操作行为,对能力的可靠度为 0,它们只定义目标或推进状态,不会改变对你水平的估计。

四类来源对能力估计的可靠度:真实面试 1.0,模拟面试 0.8,简历与自述 0.3,岗位要求与外部材料 0。
图 2 来源可靠度。可靠度为 0 的来源只定义目标或推进状态,永远不会单独抬高或拉低能力估计。

需要说明的是,这几个数值是根据经验设定的假设,而不是从数据中学到的最优值。我们在研究论文的消融实验里专门检验过:把所有正的可靠度都改成 1,整体通过的检查点数量没有变化,预测指标还略有提高。这说明目前的数值本身没有被证明更好,我们保留它们,是因为“真实面试比自述更可信”这个方向符合常识,并且能防止一句简历描述在缺少面试证据时左右判断。等有了足够的真实面试数据,这些数值会按真实结果重新校准。

4. 观察:让模型只做“读”这一件事

观察器把片段换算成观察。每条观察都说明它作用于什么对象(一个知识点、一段经历、一条简历说法),测到了什么(这一层答过了没有、角色是“参与”还是“主导”),以及依据是什么(原文中的哪一段)。观察器分两类。

规则观察器

规则观察器不调用模型,结果只由输入决定。它们读取有明确结构的内容:简历经历条目里出现的技术名称、技能栏里“熟练掌握”“了解”这类修饰词、岗位的级别(实习、校招还是社招)、模拟面试每一层是否通过、投递从笔试走到了二面。技术名称的识别有不少细节,比如英文名必须是完整的词,java 不会匹配到 javascript;“消息队列”不会被拆出“队列”去匹配数据结构里的“栈与队列”。

模型观察器

需要理解语义的地方交给模型观察器:这道面试题对应目录里的哪个知识点、问到了第几层;简历这一行写的角色和数字是什么;一道经历题的回答里,求职者说自己贡献了多大分量、是参与还是主导、每次追问的方面有没有讲清楚;岗位描述里要求了哪些知识点、要求到什么程度;两份简历里的两段经历是不是同一段。

表 2 观察器读出的主要内容
对象规则观察器模型观察器
面试作答每一层是否通过、要点、事实错误题目对应的知识点与层级
经历经历条目、所在组织、用到的技术分量、角色、各追问方面是否讲清
简历说法技能栏熟练度说法每一行的角色词与数字
岗位级别、技能标签要求清单与要求层级
跨记录数字是否一致、经历是否可能重复两段经历是否同一段、两个数字是否真的矛盾

模型的输出不会被直接采信。每一份结构化输出先过格式校验,字段取值必须在规定范围内:比如经历的分量只能是五档之一或“未知”,角色只能是参与、负责、主导、独立完成或“未知”,填了别的词就当作未知。所有带原话的字段都要核对原文,原话必须能在原始记录里逐字找到。测评中,结论引用的 420 条原话全部能在原文中找到。

每条观察都记录输入的哈希值和观察器的版本。同样的输入、同样版本的观察器只调用一次模型,结果可以复用;观察器升级后,只有受影响的输入会被重新读取。推断参数调整时则完全不需要重新调用模型,只需用已有的观察重新计算。这也是为什么修改推断规则的成本很低:改完可以在全部历史数据上立即重算,并和旧版本逐条对比。

5. 能力推断:每个知识点都带着不确定度

能力推断的对象是知识点。DrawOffer 维护一份平台公共的知识目录,计算机方向目前收录 140 多项技术、1000 多个知识点,每个知识点标明重要程度、最深能问到第几层,部分还附有分层的评分标尺。其他岗位类别有各自的考点库。层级从浅到深依次对应“了解、熟悉、掌握、精通、专家”。

用一个分布表示“有多会”

系统不会给每个知识点记一个分数,而是记一个正态分布:均值表示目前估计的水平,方差表示有多不确定。一个从没被问过的知识点,均值停在一个偏保守的基线上,方差很大;被认真问过几次之后,均值移到证据支持的位置,方差变小。同一项技术下的知识点、目录里标为相关的知识点,在先验里彼此有一定的相关,所以答好 Redis 持久化,会让对 Redis 主从复制的估计也略微上移,但这种联动只是弱的,不能代替直接作答。

一次作答怎样改变估计

面试题在某一层上是否答过,用一个逻辑函数描述:能力越高于这一层的难度,答过的概率越大。设一道题作用于知识点的能力 z,区分度为 a,这一层的难度为 b,那么答过的概率是:

p(y = 1 | z) = σ( a · (z − b) )

σ 是逻辑函数;y = 1 表示这一层答过,y = 0 表示没答过。

来源可靠度 r 以指数的形式作用在似然上,可靠度越低,这次观察对估计的影响越小。系统先在这道题涉及的方向上做一维的拉普拉斯近似,得到新的众数和方差,再把变化按协方差传给整个状态,这是一次秩一更新:

p(z | y) ∝ N(z; m, v) · p(y | z)^r
μ⁺ = μ + (c / v) · (ẑ − m)
Σ⁺ = Σ + (c cᵀ / v²) · (v̂ − v)

m、v 是这道题方向上的先验均值与方差,ẑ、v̂ 是近似后的众数与方差,c = Σu。

一个知识点的能力分布在一次完整作答前后的变化:先验较宽、均值偏低;作答后分布变窄并右移,达到“掌握”这一层的把握从 0.34 升到 0.57。
图 3 一次完整主问题前后的能力分布(示意,数值取自引擎规格中的例题)。作答后分布右移并变窄,达到这一层的把握从 0.34 升到 0.57,方差降到原来的 40%。

一道题通常有多层:从某一层开题,答过了就继续追问更深一层,直到答不上来或到达这个知识点的最深层级。系统把一道题的多层结果合并成一次观测处理,并考虑评分器自身的误差:如果评分模型已知会把真实的第二层偶尔判成第三层,推断时就按这个误差矩阵读取报告的层级,而不是完全相信它。

答对一道题时,系统还会给它的前置知识点记一条较弱的观察:能讲清 B+ 树的分裂,通常也说明理解了基本的树结构。这条派生观察的权重很低,只延伸一层,而且不算“被问过”,不能单独让前置知识点下结论。

结果可以逐字节复现

推断全部使用双精度浮点、固定的迭代次数和完全确定的输入顺序,观测按发生时间、片段编号和观察排序。测评中,25 份剧本在同一进程内重复推断 5 次、换两个新进程和不同的哈希种子再推断,60 个时点的结论都逐字节相同。端到端的一致率之所以只有 86.8%,是因为观察器每次调用模型都会重新采样;推断这一步本身是 100% 可复现的。

6. 时间:久未练习,把握会回落

三个月前答好的一道题,和昨天答好的一道题,对“现在会不会”的说明力度不一样。系统在两次观测之间让估计随时间回落:均值逐渐回到基线,方差逐渐回升。设两次观测之间隔了 Δ 天,知识点的稳定度为 s:

f = exp(−Δ / s),g = √(1 − f²)
μ′ = μ₀ + F (μ − μ₀)
Σ′ = F Σ F + G Σ₀ G

μ₀、Σ₀ 是基线均值与参考协方差,F、G 是由各知识点的 f、g 组成的对角阵。

稳定度会随作答更新:开题这一层答过了,稳定度按间隔增长;没答过,稳定度减半。稳定度的范围在 30 到 720 天之间,所以反复答好的知识点忘得慢,刚学会的知识点忘得快。经历的技术深度与业务深度变化更慢,稳定度固定为 180 天。

一个知识点在两次作答之间的估计变化:作答后均值上升、区间收窄;随后两个月里均值缓慢回落、区间变宽;第二次作答再次拉高并收窄。
图 4 时间对估计的影响(示意)。实线是均值,阴影是不确定区间。没有新证据时,估计向基线回落、区间变宽;再次答好时重新收窄。

这个机制的作用是让旧证据对“现在”的说明力逐渐减弱,它并不是一个经过验证的、适用于每个人的遗忘规律。我们在公开教育数据上做过检验:同一个引擎打开遗忘与关闭遗忘相比,对“隔了一天以上才再次练习”的作答,预测下一题的 AUC 在 EdNet 上平均高 0.006,在 Junyi 上高 0.003,两个数据集共 10 折全部为正。幅度不大,但方向一致。

遗忘也决定了复测的时间。一个你曾经掌握的知识点,当答题带来的提升被遗忘掉大约 65% 时,系统会把它列为“复测到期”,在下一场模拟面试里安排再问一次。只有真正掌握过的点才会进入复测,从没被直接问过、只是被相邻知识点带高的点不会出现在复测提醒里;刚答完 7 天内也不会到期。

7. 证据门槛:证据不够,就不下结论

这是整套设计里最重要的一层。一个后验分布即使很有把握,也不一定足以对外说出一个判断。比如一场面试里,求职者状态不好,连续几道题都答得不理想;如果每道题各自独立地读,这些答错会把好几个其实会的知识点都推到“缺口”一侧。又比如一道题被拆到两个知识点上,两个点各自只有半道题的证据。

所以,判断“某个知识点低于岗位要求”或“简历上的熟练度写高了”时,系统除了看后验概率,还要求直接作答的证据满足以下条件:

  1. 概率达到 0.7。能力落在门槛某一侧的概率不低于 0.7。
  2. 单个知识点至少有一道完整的主问题。180 天内至少有一道完整主问题落在它上面;一道题被拆到两个知识点时,各算半道。
  3. 宽泛的结论要有多个知识点支撑。判断“整项技术偏弱”时,至少要有 2 个知识点、来自不同的回答,且各自最近一次作答本身就落在这一侧,不看它们后来被其他知识点拉到了哪里。
  4. “缺口”要跨越两天。判定“低于门槛”时,直接作答要跨越至少一天,一场发挥失常的面试只会让估计下降,不会单独定为缺口,下一场再问到时才判定。判定“达到门槛”不受这条限制。
证据门槛的判断流程:后验概率是否达到 0.7、直接作答是否足够、宽泛结论是否有多个知识点支撑、缺口是否跨越两天;任一条件不满足时结论为证据不足,并给出下一步该问的知识点。
图 5 证据门槛的判断顺序。任一条件不满足,结论就停在“证据不足”,同时给出再答哪两个知识点就能定论。

在参数化的模拟学习者上,“缺口要两天”这一条让状态失常那场之后被误判为缺口的比例从 27.7% 降到 12.5%,单一短板的检出率没有下降;代价是确实偏弱的学习者,缺口要晚一场才判出来。我们认为这个取舍是值得的:误判一个缺口,会让求职者把时间花在本来会的东西上,还会削弱对整个系统的信任。

我们在研究论文中用消融实验检验了这一层:把门槛换成“只看后验概率”,去掉作答次数、覆盖的知识点和时间跨度的要求,其他规则不变。结果是通过的检查点减少,问题的准确率明显下降,多出来的主要是本不该报的问题。具体数字见研究论文。

8. 问题:发现、跟踪,直到解决

能力估计本身不直接给用户看,用户看到的是“问题”:值得关注、可以行动的具体事项。每个问题的编号由类型、涉及的对象和目标计算,重新推断后编号不变,所以一个知识缺口答好后解决、过一段时间又答错时,会以同一个编号“复发”,而不是变成一条新记录。

表 3 问题的类型与判定方式
问题什么时候出现什么时候解除
知识缺口目标要求的知识点按证据门槛判定低于要求层级连续两个评估时刻,低于要求的概率都不到 0.7
简历写高 / 写低去掉简历自述后的估计,按门槛判定低于或高于声称的等级与知识缺口相同
经历讲不清某个追问方面的讲清程度低于 0.4连续两个评估时刻不低于 0.55
角色写高 / 写低实际角色低于或高于简历角色词的概率不低于 0.7概率低于 0.5
表述不一致同一经历同一指标的两个数字相差超过 30%,且确实矛盾能解释或你选定其中一个数字
准确性风险同一考察点两处事实错误,或经历题中方案不自洽之后两次自洽的回答
复测到期曾经掌握的点,把握因遗忘跌破复测线再次作答

判断简历是否写高时,系统使用的是“去掉全部简历自述之后”的估计。这样可以避免循环论证:不能因为简历写了“精通”,就让“精通”的说法给自己作证。

问题的生命周期:出现、已告知、练习中、已解决,已解决后可能复发;目标结束时进入沉睡;用户可以忽略任何一条问题。
图 6 问题的生命周期。状态变化都有时间和依据;目标结束后相关问题进入沉睡,不再打扰。

问题有完整的生命周期。刚判定时是“出现”;在页面、对话或准备清单里展示给你之后,变成“已告知”;你勾选了针对它的准备项,变成“练习中”;后来的作答不再支持它,变成“已解决”;再次答错则“复发”。目标结束(比如这个投递已经有了结果)时,相关问题进入“沉睡”。你也可以随时忽略某一条问题,它就不会再出现在助手和各个页面里。

练习本身不会让问题解决。勾选了准备项、看了报告讲解,只说明你练过,不说明你会了;问题状态只能由作答改变。这条规则防止“只练不考”让记忆看起来越来越好。

9. 经历与简历说法

求职面试有相当一部分时间在问经历。DrawOffer 对每段经历单独建模:它在几份简历里分别出现在哪里、你在其中的分量和角色、技术深度和业务深度、被追问时各个方面有没有讲清楚。

同一段经历只算一段

同一段实习可能在三份简历里以不同的标题出现。系统先用规则挑出候选对:组织相同、时间重叠、标题相似,三者满足其二才进入候选;再结合模型对“是不是同一段”的判断,计算合并的概率,达到 0.8 才合并。每一次合并都记下依据,你也可以手动合并或拆开,你的更正永远优先于系统的判断。

分量、角色与讲述

经历的分量和角色只看面试中的判断,不看简历自己怎么写。角色从四档均匀分布出发,每次面试判断进来就按判断的准确率更新;只有当“实际角色低于简历角色词”的概率达到 0.7,才会提示角色写高。每个被追问的方面从 0.5 起步,讲清加 1、部分讲清加 0.5,再按可靠度加权,并以 180 天为半衰期逐渐淡化。

简历上的数字也会被核对。同一段经历、同一类指标,简历写的和面试中说的相差超过 30% 时,交给模型判断是不是同一个指标、是否真的矛盾;口径不同不算矛盾。面试中说出、简历上还没写的规模和成果数字,会作为“可补充的事实”建议写进简历。

10. 记忆在哪里被用到

记忆是为使用而存在的。所有使用方都通过同一个读取入口取得记忆,读取时统一过滤:只用你自己的记录和更正;被忽略、已沉睡的问题不出现;没过证据门槛的结论只出现“待评估”,不出现等级或问题。

助手对话
会话开始时,系统把与当前目标最相关的结论编译成一段上下文,每条带编号。助手回复中引用的编号会被逐一核对,只有本会话真正下发过的才算有效。会话中途你更正或删除了记忆,下一轮就按新的记忆重新编译。你也可以在创建会话时选择通用模式,不附带任何记忆。
模拟面试出题
出题计划按“问这一题能带来多少信息”和“复测的收益”给候选考察点排序,先补问还不能定论的点,再安排复测和诊断题。记忆推荐的题不超过本场题量的 60%,30 天内问过的原题只能作为复测出现。评分时看不到任何记忆内容,有没有弱项记录,评分看到的都一样。
简历段落精修
标出面试中考察过且没过关的行,附上追问链和练习入口;面试中说过的事实可以写进改写。
面试准备清单
列出未解决的问题、复测到期的知识点和这家公司真实问过的题,每一项都标明来自记忆。
答辩提纲
列出简历上最可能被追问、且现在守不住的 8 个点,每个点附上可能的追问、现在守到哪一层和练习入口。
岗位匹配卡
逐条要求展示面试证据:已达标、未达标还是证据不足。

面试前速览、匹配卡、复盘对比这些页面由代码直接渲染,不调用模型,也不扣积分。展示过的问题会登记为“已告知”,同一问题在同一位置每天最多登记一次。

11. 你说了算:查看、更正与删除

记忆是你的。它记了什么、依据是什么,都能看到:记忆页列出每段经历、每项技术、每条简历说法和每个问题,每条证据都指回来源(哪场模拟面试、哪次复盘、哪份简历)。

  • 更正。你可以合并或拆开经历、驳回某条提及、固定某个取值、选定矛盾数字中正确的那个、忽略某个问题。更正作用在来源位置上,所以简历改字、观察器升级后,更正仍然有效。
  • 这条不对。觉得某条结论不对时可以直接标记。在没有新证据之前,这条结论不再交给助手和各个页面使用;来了新证据或判断变了,再照常使用。
  • 删除单条结论。删除后,这条结论不再出现,它依赖的那部分证据也不再计入。
  • 删除原始资料。删掉一份简历或一场面试,相应的片段和观察一并删除,系统用剩下的记录重新推断。
  • 清空记忆与注销。清空后,此前的全部观察、更正、问题记录、预测和提醒都会删除,之后的新数据照常记录;注销账号会删除全部记忆数据。
删除一份来源后的重建:被删除的简历所支撑的结论随之消失,同时被其他来源支撑的结论保留,只依赖它的结论残留为 0。
图 7 删除即重建。结论不是独立保存的“事实”,而是从剩余来源重新算出来的,所以只依赖被删来源的结论不会残留。

删除之所以能做得干净,是因为结论从来不是单独保存的“事实”,而是每次从剩余的来源重新推断出来的。测评中我们逐一删除了 25 份剧本里的每一份来源,共 85 次:只依赖被删来源的 176 条结论全部消失,残留的结论为 0,仍然引用被删来源的结论为 0,残留的观察也为 0。

需要说明这项保证的范围:它针对的是推断上的依赖关系,即被删除的来源不会再支撑任何结论。它不代表模型服务商的日志、缓存或所有存储副本中都不再有这份内容;那些由隐私政策和各自的数据保留规则约束。

12. 工程实现

每次读取记忆时,系统都从头组装当前状态,不缓存可变的中间结果。为了让长历史也足够快,推断引擎为每位用户的几条推断流保存检查点:新增一场面试时,从最近的检查点续算,而不是从第一条记录开始。检查点和全量重放的结果逐位一致;只要中间有迟到的记录、删除或更正,检查点就会失效并回退到更早的一个。

表 4 推断耗时(Apple M3 笔记本,每档 5 位模拟学习者、每人计时 3 次)
历史长度观察条数全量推断 P50全量推断 P95新增一场 P50
60 次作答(10 场)1200.005 秒0.006 秒0.010 秒
600 次作答(100 场)12000.044 秒0.053 秒0.012 秒
3000 次作答(500 场)60000.277 秒0.798 秒0.038 秒

推断参数带版本号,每次修改都登记为一个新版本,不修改已发布的版本。新版本上线前,可以用影子对比在同一批数据上生成两个版本的结论并逐项比较;切换参数只需重新推断,不需要重新调用模型。观察器的模型调用按每位用户每天的上限执行,整理记忆的费用由平台承担。

13. 已知局限与下一步

我们希望如实说明这套设计目前做不到什么。

经历讲得清不清楚,判断得还不够好。在测评里,这是引擎落后于“把全部记录交给大模型”最多的一类检查点(经历评估 8/14,大模型 13/14)。部分原因在于真实面试复盘入库时,每道题只有一组问答,追问被并进了回答里,判断讲清程度的观察器看不到追问的结构。改进复盘的记录方式在计划中。

测评数据是虚构的。目前全部测评都使用开发团队编写的虚构求职者剧本,还没有经过独立标注人核对,也不是真实用户数据。产品已经实现了面试前预测存档、面试后勾选与校准报表,真实数据积累起来后,我们会按真实结果校准来源可靠度、遗忘速度和证据门槛。

不从其他用户身上学题目难度。在公开教育数据上,引擎与经典模型 BKT、PFA 相当,但低于会从大量学生身上学习每道题难度的 IRT 和 DKT。这是有意的选择:求职场景里的题目大多不重复,个人记录也不应被用来校准别人的结论。

固定的参数可能不适合每一个人。来源可靠度和遗忘速度目前对所有人相同。一些更细的机制已经实现并在模拟中测试过,比如区分“当场状态不好”与“确实不会”、识别“会但讲不出取舍”、估计个人的学习速度,但在模拟中它们的收益还不足以抵消代价,因此默认关闭,等真实数据来评估。

完整的测评方法、数据和局限,见测评报告;更严格的实验设计、消融与讨论,见研究论文。