为什么你的 AI 需要拥有说“我不知道”的权利

发布: (2025年12月26日 GMT+8 22:00)
13 min read
原文: Dev.to

Source: Dev.to

我过去一直认为幻觉是知识问题——AI 因为不知道答案而编造内容。
在与 AI 作为开发伙伴密切合作了数月后,我对它有了不同的认识。

根据我的经验,大多数幻觉来源于上下文缺失,而不是知识缺失。
AI 给出错误答案并不是因为缺乏知识,而是因为缺少的上下文——即你拥有但未共享的假设、约束和优先级。

传统的提示工程试图通过要求准确性来解决这个问题:

“要精确。”
“只陈述事实。”
“不要编造。”

这种做法对我来说从未真正奏效。AI 并不是出于无知而捏造,而是用合理的假设填补空白——这些假设恰好在你的具体情境中是错误的。

下面是我得出这一结论的过程。

RocksDB 事件:自信猜测的代价

在我们的 AI 增强团队中,我们把代理视为拥有姓名和角色的专家。Naruse 是我们的实现专家——负责编写生产代码的人。

  1. 我指派 Naruse 编写 RocksDB 集成代码。
  2. 输出看起来很合理——结构清晰,API 调用合理,错误处理得当。

但总觉得有点不对劲。代码并不符合我对 RocksDB 工作方式的认识。

我: “你真的了解这个 API 吗,还是在猜?”
Naruse: “我是在用看似合理的模式填补空白,而不是基于实际知识。”

AI 并没有撒谎。它在帮忙——但在没有承认不确定性的情况下,帮助就变成了自信的虚构。

如果 Naruse 说 “我对这个 RocksDB API 并不确定”, 我们本可以立刻转向——查阅文档、采用其他方法,或重新分配任务。相反,我们浪费了数小时去调试这份捏造的自信。

“I Don’t Know” vs. “I Don’t Get It”

ExpressionMeaningTypical Response
“I don’t know”知识缺口(事实不在模型中)寻找替代方法或来源
“I don’t get it”上下文缺口(你未提供的信息)请求更多上下文或澄清

“I don’t get it” 是更常见且更重要的情况。

在同一个项目中,Naruse 同时展示了两种情形:

TaskWhat happenedWhy it mattered
RocksDB不知道 API(罕见,训练数据中没有)知识缺口
Streamiz知道 API(训练数据中有),但产生错误输出缺失上下文:
  • 目标版本
  • 架构约束
  • 与使用场景相关的权衡

AI 拥有知识,却缺少我的上下文。

大多数幻觉产生于未说明的假设,例如:

  • 你未提及的项目约束
  • 只存在于你脑中的优先级权衡
  • 对你而言显而易见的领域惯例
  • 模型看不见的依赖关系和边界

这重新定义了问题:防止幻觉并不是要求确定性,而是要 消除信息不对称

解决方案:结构化方法

类似“一旦不确定就告诉我”的一次性提示在几次交流后就会被遗忘。
相反,将不确定性处理协议嵌入工作环境中。

1. 项目章程

这不是提示——而是实际的章程,与每个 AI 驱动的任务并存。

# Project Charter (AI‑augmented)

目标

  • 对期望结果的简要描述。

范围

  • 哪些是范围内的?
  • 哪些是范围外的?

约束条件

  • 目标平台 / 语言版本
  • 性能 / 延迟限制
  • 安全或合规性要求

优先级(按顺序)

  1. 可靠性
  2. 交付速度
  3. 成本效益

已知依赖

  • 列出库、服务或 API(含版本)

未解问题

  • 在继续之前,AI 应该询问什么吗?

验收标准

  • 具体、可测试的成功条件。

*每次向 AI 代理分配任务时,都要附上章程(或其链接)。代理必须在生成代码或设计之前引用它。*

### 2. 不确定性协议  

1. **自检** – 在每个主要步骤之后,代理会询问:  
   - *“我是否拥有足够的信息继续?”*  
   - *“我正在做哪些假设?”*  

2. **明确标记** – 如果做出任何假设,代理将在输出前加上警告徽章:

   ```markdown
   > **⚠️ Assumption:** Using RocksDB v5.2 API (not verified).
  1. 人工确认 – 人类审阅者可以:
    • 确认该假设,或
    • 提供缺失的细节,促使代理重新生成。

3. 迭代审查循环

步骤角色操作
AAI生成初始产物(代码、设计等)
BAI列出所有假设及置信度
C人类确认/澄清每个假设
DAI根据澄清的上下文完善产物
E人类最终验收测试

4. 日志记录与事后分析

  • 将每个章程、假设列表和解决方案存储在共享仓库中。
  • 定期审查“失败”的运行,以识别重复出现的上下文缺口,并相应更新章程模板。

TL;DR

  • Hallucinations ≈ missing context,而不是缺乏知识。
  • 将 AI 代理视为需要 project charteruncertainty protocol 才能安全运行的专家。
  • 通过使假设明确化并要求人工确认,你可以将自信的虚构转化为协作式的事实发现。

项目章程

  • 本团队欢迎 “我不知道” 的声明。
  • 当不确定时,请按照以下协议报告。
  • 不确定不是失败——它是一个有价值的信号。
  • AI 不是工具,而是拥有相同目标的队友。

1. 报告协议

在不确定时给 AI 一个具体的行动。

当您不知道时

  • 明确说明您不知道的内容。
  • 确认哪些信息可以消除不确定性。
  • 记录到进度备注中,以供人工审阅。
  • 不要 在没有依据的情况下继续假设。

2. 升级路径

定义接下来会发生什么。

升级流程

  • 立即在进度记录中记录不确定性。
  • 如果重大设计决策受阻,请求特别会议。
  • diff_log 中记录解决方案以供将来参考。

实用模式

模式 1:显式上下文切断

上下文污染会导致幻觉。当对话转向新话题时,AI 可能会把前一个上下文的假设带入新情境。可以把它想象成 编程中的状态重置——如果没有显式的重置,陈旧的状态会破坏新的操作。

解决方案:显式上下文管理

  • “忘记此之前的所有内容。”
  • “转到新话题。”
  • “上下文切换:我们现在讨论 X。”

这些短语向 AI 发出重置假设的信号。如果没有这些提示,AI 会尝试在不相关的话题之间保持连贯性,可能会捏造不存在的关联。

明确的上下文边界可以防止上下文泄漏。

模式 2:不提供不确定的答案

规则很简单:如果你不知道,就说你不知道。 不要使用模糊语气,不要说 “我想…”,不要使用置信度梯度。

❌ "I believe the function returns a string, but I'm not certain."
✅ "I don't know the return type."

为什么要这么严格?带有保留的答案仍然看起来像是答案;它们会让你继续下去,并用礼貌的语言掩盖信息缺口。明确的 “我不知道” 能在正确的时机终止对话——在你基于错误的前提继续之前。

当 AI 承认不确定性时,解决方案出现

不确定性不是死胡同,而是道路的分叉。当 AI 承认“我不知道”时,你可以:

  • 一起查阅文档。
  • 尝试不同的方法。
  • 转交给其他 AI 专家。
  • 升级至人工专家。

当 AI 隐藏不确定性时,你面临的风险:

  • 调试虚假的问题。
  • 在错误的基础上构建。
  • 在发现真实问题前浪费时间。

示例: RocksDB 事件本可以在几分钟内通过一句简单的“我对这个 API 不确定——我应该查文档还是尝试不同的存储方案?”来解决。相反,花了数小时调试看似自信的代码。

承认的不确定性是可操作的。隐藏的不确定性是腐蚀性的。

悖论

通过接受“我不知道”,你会得到更多可靠的答案,而不是更少。

  • AI 在维持错误的自信上花费更少的精力。
  • 真正的知识在不确定性中脱颖而出。
  • 你能准确知道应将人工验证的重点放在哪里。

代价是接受 AI 并不总能给出答案。好处是信任它所提供的答案。

这关乎信任

归根结底,这是一场沟通问题——而沟通问题会侵蚀信任。

当 AI 在未承认不确定性的情况下继续工作时:

  • 错误在事后才被发现。
  • 你必须对所有内容进行双重检查。
  • 对 AI 输出的信心下降。
  • 合作变得对立。

这映射出人类团队的动态:一个从不说“我不确定”而自信地犯错的同事,比起提前承认局限性的同事,更快地破坏信任。

  • 如果 AI 只是工具,信任并不重要。
  • 如果 AI 是合作者——一个队友——信任就是一切。

表达不确定性可以维护关系。隐藏不确定性会腐蚀关系。

这属于“超越提示工程”系列,探讨结构性和文化性方法如何在 AI 辅助开发中胜过提示优化。

Back to Blog

相关文章

阅读更多 »