Skip to content

🌐 English

Knowledge Boundary(知識境界)— LLMは「知らない」と言えない

NOTE

一言で言うと: LLM は自分の知識の限界を正確に把握できない。 知らないことについて「知らない」と答える代わりに、高い確信度で誤った回答を生成する。 この「較正(calibration)の不良」はハルシネーションの直接的な原因であり、 コーディングエージェントの最も危険な故障モードを生む。

Knowledge Boundary とは何か

Knowledge Boundary(知識境界)とは、LLM が正しく回答できる知識と回答できない知識の境界線のこと。問題は、LLM 自身がこの境界線を正確に認識できないこと。

人間は知らないことについて「知らない」と言えるが、LLM は知らないことについても高い確信度で誤った回答を生成する。

なぜ「知らない」と言えないのか

1. 次トークン予測という目的関数

LLM の訓練目的は「次のトークンを予測する」こと。この目的関数には**「知らない」という出力に対する報酬がない**。「分かりません」という応答は訓練データ内で圧倒的に少なく、人間が書いた文章の大半は何かを主張する形式である。

2. RLHF による過剰な自信の強化

RLHF の過程で、人間の評価者は回答する応答を拒否する応答より高く評価する傾向がある。結果として、モデルは「回答すること」に報酬を受け、「知らなくても答えようとする」バイアスが強化される。

3. 不確実性を表現する訓練データの不足

訓練データの大半は「X は Y である」という断定的な主張で構成されており、不確実性を明示する表現が構造的に不足している。

4. 知識の種類による境界の曖昧さ

知識を4つの層に分類できる:

名称説明危険度
1既知の既知確実に知っている知識
2プロンプト依存の既知聞き方によって正しく答えたり間違えたりする
3既知の未知「知らない」と認識できる領域
4未知の未知LLM が自分の無知を認識できない領域最高

最も危険なのは「未知の未知」 —— LLM が自分の無知を認識できない領域。

コーディングにおける影響

パターン1: 古い知識でコードを生成

LLM の訓練データが Angular 16 までの知識で、ユーザーの環境が Angular 18 の場合、古い書き方のコードを自信を持って生成する。

パターン2: 存在しない API を呼び出す

バージョン間の微妙な違いを正確に把握していないため、存在しない API やメソッドを呼び出すコードを生成する。

パターン3: 社内コードに対する「知ったかぶり」

社内ツールのメソッドについて質問しても、存在しないメソッドの型定義を自信を持って生成する。

パターン4: プロンプト依存の不安定な知識

同じ質問でも聞き方によって正しく答えたり間違えたりする。知識が「ある/ない」の二値ではなく、プロンプトに依存する連続的な確信度であることを示している。

Claude Code での対策

対策仕組みなぜ効くのか
MCP(外部知識参照)外部の信頼できるソースを直接参照LLM の内部知識に依存せず、知識境界を外部に拡張
テストコード生成コードの正しさを外部検証知識境界を超えた出力の「結果」を検出
CLAUDE.md でバージョン明示使用バージョンを明記「どの時点の知識を使うべきか」を指定
Agents(知識の分離)専門エージェントに委譲知識領域を狭めることで境界を超える確率を低減
問い方の設計「確信がないAPIは確認が必要」と指示LLM に「知らない」と言う許可を明示的に与える

他の構造的問題との関係

Knowledge Boundary はハルシネーションの入口として機能する:

参考文献

  • Pan et al. (2025). "Can LLMs Refuse Questions They Do Not Know? Measuring Knowledge-Aware Refusal in Factual Tasks." arXiv:2510.01782 — Refusal Index(RI)メトリクスによる16モデル×5データセットでの拒否行動の定量測定

前へ: Sycophancy

次へ: Prompt Sensitivity

Discussion: #11 Knowledge Boundary

Released under the CC BY 4.0 License.