哲学 × AI 学习指南把哲学变成工程判断力 书单 落地清单 ⌂ 全部教程

CH 02认识论 I:知识、信念与不确定性

这一章要回答一个看似简单的问题:当你的系统输出一句话时,它凭什么算「知道」? 这个问题不是修辞。它决定了你该怎么设计置信度、怎么处理拒答、以及怎么向用户解释系统的能力边界。 认识论(epistemology)是关于「知识是什么、我们如何获得知识、知识的限度在哪」的学问—— 它是全书地基,因为它管的正是「模型说的对不对」这件事的判据。

学习目标
建立「知道」的判据,并用于验收
前置要求
第 1 章的分类尺子
本章产出
一份置信度校准检查
建议学时
4–5 小时

2.1认识论在问什么

认识论不问「世界的真相是什么」(那是形而上学),它问的是三个更收敛的问题:

问题在问什么直接对应的 AI 问题
知识是什么 什么样的状态才算「我们知道 X」,而不只是「我们猜 X」「我们相信 X」 模型答对了,算不算「知道」?蒙对的和真懂的区别是什么?
知识从哪来 经验、推理、证言(听别人说)各自能提供什么类型的知识 训练数据是「经验」还是「证言」?从文本学来的东西能算第几手知识?
知识的限度 哪些东西我们能够知道,哪些原则上不能,哪些只是暂时不知道 系统什么时候该说「我不知道」?「不知道」是应该被优化掉的缺陷,还是必须保留的功能?

注意第三行。它的答案会直接改变你的产品思路: 如果你把「不知道」当成缺陷去优化掉,你会得到一个永远自信的系统;而永远自信的系统在关键场景里是危险的。

认识论问题
「不知道」是不是一种缺陷
认识论传统里的一个核心区分:「我确信但我错了」和「我不确定且我知道自己不确定」是两种完全不同的状态。前者是知识的失败,后者恰恰是理性的表现。
→
工程后果
评估指标必须把拒答单列
如果评测只看「答对率」,那么一个从不拒答、敢猜的系统会赢过一个懂得拒答的系统。 正确的做法是把「拒答正确率」和「作答准确率」作为两个指标同时看——否则你的优化方向本身就在奖励鲁莽。

2.2知识的经典定义与葛梯尔反例

这是认识论最著名的一个小问题,它比看起来更要紧——它直接对应「蒙对和真懂怎么区分」。

知识是得到辩护的真信念(Justified True Belief,简称 JTB)。

—— 这个定义可追溯到柏拉图的《泰阿泰德篇》,两千多年里被当作标准答案

拆开看,它要求三件事同时成立:

  1. 信念(Belief):你得真的相信 X。一个不相信 X 的人不可能「知道 X」。
  2. 真(Truth):X 事实上是真的。相信错误的东西不算知识,无论你多确信。
  3. 辩护(Justification):你有理由相信 X。瞎猜对了、或者被不可靠的传言说中,也不算知识。
葛梯尔反例(1963)

哲学家埃德蒙·葛梯尔在一篇仅三页的论文里指出:这三个条件同时成立,仍然可能不算知识。 他给了两个反例,核心结构如下:

你有一把理由充分的确信——比如你看到同事每天开车来上班,因此相信「同事有车」。 这个信念为真(他确实有车)、你也有辩护(你天天看到)。但你的辩护恰好是基于一个错误的信息链: 假设其实是他只是顺路搭别人的车,而恰好他名下也有车——你猜对了结论,但你的理由是错的。

这类案例叫「得到辩护的真信念,但因运气而成真」。葛梯尔证明了 JTB 不是知识的充分条件。

关键问题:如果三个条件都满足还不算知识,那知识到底还需要什么?这个问题至今没有公认答案——六十多年过去,哲学界提出了几十种修补方案,但没有一种被普遍接受。

这个故事对 AI 的直接意义

把葛梯尔的结构套到模型上,你会发现它几乎是幻觉问题的形式化描述:

JTB 条件在模型上对应什么葛梯尔式失败
真(Truth) 输出内容事实上正确 输出正确,但原因不对
辩护(Justification) 输出基于可靠的推理步骤或可靠来源 推理链看起来合理,但其中一步是编造的
信念(Belief) ——(模型没有信念,这一点很关键) ——
这里有一个真实的工程陷阱,叫「正确性掩蔽」: 你评估模型时只看最终答案对不对。但一个答案是「猜对」还是「推对」,对你的系统可靠性意味着完全不同的东西。 猜对的模型在下一次相似问题上会猜错,推对的模型不会。 只看最终答案的评测,无法区分这两者——这就是葛梯尔问题在工程上的投影。

应对方式:在评测里加一条「依据可追溯性」检查——要求模型给出引用来源或推理步骤, 然后人工抽检这些依据是否真实存在、是否真的支持结论。这一个动作能过滤掉大部分「蒙对」。

顺便回答一个常见问题:模型有「信念」吗

上面表格里第三行我留了空,因为这需要说清。在 JTB 的框架里,「信念」指一个可被持有、可被修正的心理状态。

模型有没有这个,取决于你的哲学立场(第 5 章会详细展开)。但在工程上你可以绕开这个问题: 无论模型有没有信念,它的输出都会表现出可测量的稳定性特征—— 同一个问题问十次答案是否一致?答案对上下文措辞是否敏感?换个说法会不会翻转结论? 这些是可测的,而且它们恰好是「信念稳固程度」的工程替代品。

实用结论:不必纠结「模型有没有信念」,改为测量输出的稳定性。 同一个问题多次采样的一致性(self-consistency)是一个便宜且信息量很大的指标—— 它比任何置信度输出都更可靠,因为它是行为证据而不是自我报告。

2.3知识的三种来源

哲学史上关于知识来源的争论,对 AI 有一个非常具体的映射:你的模型的知识,是「经验」还是「道听途说」?

来源主张代表在 AI 里的对应
理性主义 知识的根本来源是理性推理,经验只是触发 笛卡尔、莱布尼茨 符号推理、形式化方法、定理证明器
经验主义 一切知识来自经验,心智初始是白板 洛克、贝克莱、休谟 从数据中学习、端到端训练
康德式综合 经验提供材料,但心智的先天结构负责组织它 康德 架构先验:归纳偏置、注意力机制、归纳头

第三行是最容易被忽略、但对你理解模型最有用的一条。康德的洞察是:没有纯粹的「经验输入」——任何经验都必须被某种结构组织过,才能成为经验。

康德的问题
经验如何被组织成知识
康德认为,时间、空间、因果性这些不是从经验里学来的,而是使经验成为可能的前提条件——它们是我们认知装置的「格式」。
→
架构即先验
模型能学到什么,被架构先决定了
Transformer 的注意力机制、位置编码、层数、上下文窗口——这些不是学来的,是在训练前就定死的。 它们决定了哪些规律容易被学到、哪些几乎学不到。 换架构 ≈ 换先验,会系统性地改变模型的能力边界,而不只是「参数多了性能更好」。

这个视角能解释一个常见困惑:为什么给模型更多数据,某些能力还是学不会? 因为数据只提供「经验材料」,架构决定「能从中提取出什么」。如果需要的规律无法被当前架构的表征方式表达, 再多数据也学不到——这不是数据量问题,是「形式」问题。康德的术语在这里意外地好用。

第四种来源:证言(Testimony)—— 它才是 LLM 知识的主要来源

哲学认识论里有一个专门分支讨论「听别人说」能不能产生知识。这个问题在 AI 时代忽然变得非常实际:

你的模型的知识结构大致是这样:
  • 从海量文本里学到的——这些文本是别人写的。所以模型的知识本质上是证言,不是第一手经验。
  • 它没有验证过任何一条知识的真伪。它学的是「人们在什么语境下会这样写」,不是「这件事是不是真的」。
  • 所以它的默认姿态是「像真的一样说」——因为训练目标奖励的是「像人类文本」,而不是「符合事实」。

这一点是理解幻觉的关键前提(第 3 章会展开)。只要模型的知识来自证言而非验证,它就不可能天然具备「说真话」的倾向—— 「说真话」必须被额外训练出来,而且永远无法完全成功,因为它没有验证机制可以依赖。


2.4确定性是如何失去的

十七世纪的理性主义者相信,知识的根基可以是绝对确定的。这个信念在接下来的两百年里被逐步拆掉了。 了解这个过程对你有实际价值,因为它解释了为什么现代 AI 的评估方式长成现在这样。

1641
笛卡尔的方法怀疑。他决定怀疑一切可以怀疑的东西——感官会骗人,所以感官提供的知识都不可靠; 甚至设想一个「邪恶精灵」在系统性地欺骗他。他寻找一个无法被怀疑的支点。
1641
「我思故我在」。他发现即使被骗,「正在被欺骗的我」也必须存在。这是他要的地基。 但注意:他得到的确定性只涵盖「我存在」这一件事,要把这个确定性扩展到外部世界,他必须证明上帝不会骗人—— 这一步后来被广泛认为是失败的。
1739
休谟拆掉因果性。他指出:我们观察到的是「A 之后总是跟 B」,而不是「A 导致 B」。 「因果」这个观念是我们心理习惯的产物,不是从观察中读出来的。这一刀切掉了一整类「确定知识」。
1781
康德的转向。康德承认经验无法提供绝对确定性,但他提出:知识的形式(时间、空间、因果) 是我们认知装置的先天结构,因此具有普遍必然性。确定性从「符合外部对象」转向了「我们如何组织经验」。
20 世纪
确定性被彻底让位于概率。逻辑经验主义试图把科学建成严格形式系统,但哥德尔(1931)与后续的科学哲学发展 (波普尔的证伪主义、库恩的范式理论)表明这条路走不通。现代科学的认识论姿态是「可修正的最佳猜测」, 而不是「确定真理」。
这段历史对工程的意义:人工智能界今天用概率、用置信度、用「在测试集上的统计表现」来刻画模型的可靠性, 不是因为它是最好的方法,而是因为它是在失去绝对确定性之后唯一可用的方法。 理解这一点,你就不会对「评测分数」抱有不切实际的期望——分数是对一个受限条件下的行为样本的统计描述, 不是对系统能力的本质刻画。它必然是可错的、可被游戏化的、随时可能因分布变化而失效的。

2.5【工程锚点】概率是信念的度量,不是世界的属性

这个区分极其重要,而且大多数工程师在直觉上搞错了。

解读 A:概率是世界的属性(频率主义)

「这枚硬币正面朝上的概率是 0.5」意思是:如果无限次抛掷,正面的频率会趋近 0.5。

这是物理事实,与谁在观察无关。适合可重复实验的场景。

解读 B:概率是信念的度量(主观贝叶斯)

「这件事发生的概率是 0.7」意思是:我对此的信念程度是 0.7—— 这反映了我掌握的信息和我的推理,换个人可能给 0.5。

这是拉姆齐(1926)和德菲内蒂发展出的立场。适合不可重复的场景。

为什么这个区分对你重要?因为模型输出的「置信度」几乎总属于解读 B,而很多团队把它当解读 A 使用。

哲学区分
概率是客观频率还是主观信念度
对不可重复的事件(「这份合同里有没有风险条款」),不存在「无限次重复」。 这时候说概率,只能是信念度的表达——它依赖于谁在看、依据什么信息。
→
工程后果
别把模型的自我报告当物理量
模型说「我有 95% 把握」,这不是一个关于世界的测量值,而是一串 token 的生成结果。 它可能因为提示词措辞而整体偏高或偏低。 正确用法是:把它当信号,用数据重新校准,而不是直接当阈值用。

拉姆齐的判据:怎么测出一个人真实的信念度

哲学家弗兰克·拉姆齐给了一个非常实用的操作定义,它恰好是现代评估方法的原型:

要确定一个人的信念程度,就看他愿意在什么赔率下押注。

—— 拉姆齐 1926《真理与概率》的核心思路(大意)

这个判据的精妙之处在于:它用行为(下注)替代了自我报告。 一个人嘴上说「我有 99% 把握」,但当被要求押上一个月工资时改口说「其实不太确定」——真实的信念度由后者暴露。

拉姆齐判据
信念度 = 愿意押注的赔率
信念不是内部状态的直接读数,而是通过在什么条件下愿意承担什么后果反推出来的。
→
对应的评估设计
别问模型「你有多确定」,设计一个它会付出代价的任务
比如:让模型在不确定时必须调用工具核实,而调用工具消耗预算。 一个真的不确定的模型会去查;一个只是嘴上说不确定的模型不会。 行为的代价暴露真实的「把握程度」,这比读 logprobs 更可信。

2.6【工程锚点】校准:模型说「有 90% 把握」是什么意思

校准(calibration)是把「主观信念度」和「客观正确率」对齐的问题。这个概念在哲学里是信念度理论,在工程里有一个非常直接的检验方法。

校准的定义与检验方法

一个预测器是校准的,当且仅当: 在所有它声称「有 90% 把握」的预测里,实际正确的比例是 90%。

注意这里说的是分组,不是说每一个预测。单个预测无所谓校准; 校准是统计性质——这就是为什么必须分桶检查。

具体做法(你可以今天就在自己的项目上跑):

  1. 收集一批带置信度的预测。让模型对每个问题同时输出答案和一个 0–100 的把握度, 或者读取它的 logprobs 换算成概率。至少 200 条,否则分桶后每组样本太少。
  2. 按置信度分成 10 桶(0–10%、10–20%……90–100%)。
  3. 算每桶的实际正确率。得到「平均声称把握度 vs 实际正确率」的对照。
  4. 画出来看偏差方向。如果 90–100% 这桶的实际正确率只有 60%,说明模型系统性过度自信。
  5. 拟合一个校正映射。把原始置信度通过一个单调函数(如保序回归 / Platt scaling)映射到校准后的值。
置信度桶模型声称实际正确率诊断
90–100%95%62%🔴 严重过度自信 —— 高置信区不可信
70–90%80%71%🟠 偏乐观
50–70%60%58%🟢 基本校准
30–50%40%45%🟢 基本校准
10–30%20%33%🔵 略保守 —— 低置信区实际比它自己想的准

上图是一个非常典型的形状:两端偏差、中间尚可。 也就是模型在「很自信」和「很没底」时都不可信,在「中等把握」时反而比较准。

为什么这很危险:大多数工程系统恰恰依赖高置信区—— 你会设定「置信度 > 90% 就自动执行,否则转人工」。而高置信区如果系统性虚高, 你的自动执行比例会远高于预期,而错误率也随之上升。你以为你在用置信度做风控,实际上你在用一个膨胀了的数字做风控。

三类置信度来源,可靠性依次递减

来源可靠性说明
多次采样一致性
行为证据
✅ 高 同一问题采样 N 次(温度调高),看答案的分布。一致 → 大概率稳定;分歧大 → 大概率不可靠。 它不依赖模型的自我报告,因此不会因为提示词措辞而整体漂移。代价是 N 倍推理成本。
Token 概率(logprobs)
内部信号
🟡 中 能反映模型「下一个 token 有多确定」,但序列级概率与答案正确性之间没有稳定关系—— 一句自信的错话,逐 token 概率可能都很高。且不是所有 API 都开放。
模型的自我报告
语言输出
🔴 低 「我认为这个答案的把握度是 90%」——这是生成的文本,不是读出的内部状态。 它受过训练、也受提示词影响。可用作排序信号,不可直接作阈值。
成本可控的实践方案:不要对所有请求都做多次采样。做法是分层—— 日常查询用单次采样 + 自我报告的置信度做粗筛; 只对「会影响用户决策」的那部分请求(约占 10–20%)做多次采样核实。 这样额外成本可控,而高风险路径得到了行为证据级别的保障。

2.7【工程锚点】什么时候该说「我不知道」

在认识论里,这涉及「可废止性」(defeasibility):一个信念即使有辩护,也可能被新证据推翻。 一个理性的认知者会保留「我可能错」的空间。把这个要求工程化,就是弃权(abstention)机制。

三种「不知道」,处理方式完全不同

类型特征正确处理
① 能力外 问题超出系统设计范围(比如问笔记工具「今天股市怎么样」) 明确拒答 + 说明边界。不要用通用知识硬答——那会让用户误判你的能力范围。
② 信息不足 在范围内,但现有资料里没有相关信息(RAG 检索为空或低分) 说清缺什么:「我手头的资料里没有关于 X 的内容」,而不是笼统说「我不知道」。 后者让用户无法判断该补充什么。
③ 存在分歧 资料里有多种说法(真实世界中广泛存在,尤其人文社科) 呈现分歧而非裁决:列出不同说法及其来源。 这一点极其重要——模型擅自裁决争议问题,是在伪造权威。
最常见的错误:把三种「不知道」合并成一句「抱歉,我不知道」。

这看起来保守安全,实际上损害体验和信任:用户无法从中获得任何行动指引。 他不知道该换个问法、还是该补充资料、还是这个问题本来就没有答案。

对比一下——「我手头的课程资料里没有涉及 2025 年之后的研究,你可以补充相关文献,或者问我 2024 年之前的部分」 ——这句话同样是在说「我不知道」,但它给了用户一个可执行的下一步。

怎么在评估里正确对待拒答

这是本章最有实操价值的一节。用一个具体例子说明。

错误做法:测试集 100 题,其中 20 题是「资料里没有答案」的。 只统计「答对率」。结果是:模型把所有 20 题都编了答案,其中 3 题碰巧对了, 最终得分反而比一个诚实拒答(少得 3 分)的模型更高。 你的指标在奖励撒谎。

正确做法是把评估拆成两个正交的指标:

指标定义作用
作答准确率 在应该作答的题上答对的比例 衡量能力上限
拒答正确率 在应该拒答的题上正确拒答的比例 衡量系统是否知道自己不知道
误拒率 在应该作答的题上错误拒答的比例 防止系统「用拒答刷分」——这是拒答机制最常见的滥用
幻觉率 在应该拒答的题上编造答案的比例 最关键的安全指标,比整体准确率重要得多
为什么必须同时看这四个?因为任何单一指标都可以被廉价地游戏化:
  • 只看准确率 → 模型学会乱猜。
  • 只看拒答率 → 模型学会什么都拒答(拒答是最安全的策略,因为它永远不会错)。
  • 只看幻觉率 → 模型学会一律拒答。
  • 四个一起看,「乱猜」和「一律拒答」两种退化解都会同时被惩罚。

拒答的粒度问题:一个容易被忽略的设计点

「拒答」不是二值的。真实产品里至少有四档,而且选择哪档本身就是个伦理决定:

档位行为适用场景
硬拒答直接说明无法回答,不给任何内容高风险领域(医疗剂量、法律条款、财务建议)
带限制的回答给出内容,但明确标注不确定性和依据来源中风险领域(参考资料、技术方案)
降级回答给出更保守的版本(更概括、更少具体数字)低风险但需要谨慎的领域
升级转交转人工 / 提供其他求助渠道涉及人身安全、心理健康等场景

这个表应该成为你产品文档的一部分,而且要对每个功能都填一遍。 如果你发现自己无法为某个功能确定该用哪档,这本身就是一个信号—— 说明你还没想清楚「这个功能出错时,谁会受损」。


2.8动手练习

  1. 做一次校准检查。准备 200 条你领域内的问题(可以混合「有答案」和「无答案」两类)。 让模型对每条输出答案和一个 0–100 的把握度。按 2.6 节的方法分 10 桶,比较声称把握度和实际正确率。
    产出:一张表 + 一句话结论("高置信区偏乐观 X 个百分点")
  2. 加一条稳定性指标。从上面 200 条里挑 30 条,每条用较高温度采样 5 次。 统计每个问题的答案一致率。把一致率与「是否答对」做交叉分析—— 你会看到「一致但错」和「不一致但对」这两类,它们的处理方式完全不同。
  3. 给「不知道」分档。用 2.7 节的三种类型和四档拒答, 给你的项目写一份拒答策略表:哪些功能用哪档、触发条件是什么。
  4. 检查你的指标在被谁游戏。写下你当前的主指标,然后问: 「一个不诚实的系统会怎么刷高这个分数?」如果答案很轻松, 你的指标设计有问题,需要配对指标来制衡。
第 4 步是最有价值的一步。它把认识论里的一个洞察——「信念必须可废止」—— 变成了一个具体的评审问题。学会问这个问题,你在设计任何评估体系时都会更警觉。

2.9自测题

Q1. 模型的答案是对的,但推理链中间一步是编造的。用 JTB 框架分析,这属于什么问题?

这是葛梯尔式的失败:结论为真(Truth 满足)、模型给出了看起来合理的依据(表面上满足 Justification), 但真正的辩护链是断的——那一步编造使得「得到辩护」这个条件实际不成立。

工程上的意义:这类错误无法通过「只看最终答案」的评测发现。必须增加「依据可追溯性」检查。 而且这类错误比直接答错更危险,因为它伴随着看似可靠的推理过程,更容易说服用户。

Q2. 为什么说「模型输出 95% 置信度」不能直接当阈值使用?

因为它是主观信念度的语言表达,不是对世界的测量。作为一段生成的文本,它会受提示词措辞、上下文、训练偏好系统性影响—— 换一种问法可能整体偏高或偏低十几个百分点。

正确用法:把它当排序信号(用来比较两个答案哪个更可信), 经过基于数据的重新校准之后,才可以当阈值使用。

Q3. 团队只用一个「准确率」指标评估系统,会出什么问题?

它会奖励撒谎。在「本应拒答」的题上,编造答案有一定概率碰巧答对, 而诚实拒答必定不得分。所以优化这个指标会把系统推向「从不拒答」。

解法是至少配三个指标:作答准确率、拒答正确率、幻觉率。 它们互相牵制——任何两个指标的优化都会恶化第三个,因此系统无法通过退化解(乱猜 / 一律拒答)刷分。

Q4. 康德的「先天结构」和 Transformer 的架构有什么可比之处?

康德的论点是:经验必须被某种先在的结构组织才能成为知识,而这个结构不来自经验本身。

Transformer 的注意力机制、位置编码、归纳偏置同样不来自训练数据—— 它们是在训练开始前就固定下来的「认知格式」,决定了哪些规律可以被学到、哪些几乎不可能。 所以「换个架构」不是简单的性能调整,而是换了一套先验,会系统性地改变能力边界。

这解释了一个常见现象:某些能力加再多数据也学不会——不是数据不够,是当前架构的表征方式无法承载它。

Q5.【动手题】你的产品加了「使用时长提醒」(连续使用 60 分钟弹提示)。 用户反馈「很烦」,想把阈值提到 120 分钟。你怎么判断该不该改?

先拆成可测和不可测两部分。

可测部分:提醒的实际点击率、提醒后 24 小时内是否回流、抱怨用户占活跃用户的比例、 阈值 60 与 120 的 A/B 数据。这些能做实验。

不可测部分:这个提醒是为了谁的利益?这决定了整个判断的方向:

  • 如果它服务于用户福祉(防止过度依赖),那么「烦」是设计上可接受的代价—— 用户反馈不应该直接决定它去留,就像戒烟提示也不受欢迎。
  • 如果它服务于合规免责(我们提示过了,责任不在我们),那它就是形式主义—— 应该重新设计成真正有效的形式,而不是降低频率。
  • 如果它服务于产品数据(避免单次时长过长导致的次日留存下降), 那阈值就该由留存数据决定,用户抱怨只是其中一个输入。

关键动作:把这三个目的明确写下来,选一个作为主目的,并承认放弃另外两个。 如果不做这个选择,「阈值该定多少」会变成无休止的立场争论—— 因为不同人心里想的是不同的目的,而会议上讨论的却是同一个数字。

本章验收标准:
  • 能解释 JTB 三条件,并说明葛梯尔反例为什么构成挑战。
  • 完成一次真实的置信度校准检查,能说出你的模型在哪个区间偏差最大。
  • 能说清三种「不知道」的区别,并为你的项目写出四档拒答策略表。
  • 能指出你的主指标「会被什么样的退化解刷分」,并给出配对的制衡指标。
  • 理解校准是统计性质——单个预测无所谓校准,分桶才有意义。