Skip to content

知る経路と、する経路 ​

このページの位置づけ

本ページは、拘束力の理論ではない。何が拘束し、何が拘束しないかの座標系は 提案と拘束 にある。 ここで決めるのは、一つの要求を、知る経路で済ませるか、する経路へ進めるか、という運用上の規則である。

IV.1 パターン の「1.2 RAG と MCP」は、外の知識の取り方を書いた。本ページは、その先にある境界を書く。知るための経路と、状態を変える経路を混ぜない、という話である。

このページが扱うこと ​

  • RAG が担うことと、担わないこと
  • MCP が担うことと、担わないこと
  • 参照の結果を、実行の許可と取り違えない理由
  • 要求の種類で、先に使う経路を分けること
  • 五層のどこに置くか

このページが扱わないこと ​

1. 二つの対比は別物である ​

IV.1 の中心は、次の対比だった。

  • RAG: 文書を切って、似た文を探す
  • MCP: 場所を指して、原文や API から取る

この対比は、知識の取り方としては今も正しい。ただし現場では、別の対比が同時に起きる。

  • 知る: 文書や原文や現在値を読んで答える
  • する: 設定を変える、チケットを作る、プロセスを再起動する

RAG 対 MCP は、この第二の対比の別名ではない。 MCP は知るためにも使う。RAG の出力は、実行の許可ではない。

見る軸RAGMCP
何か検索して生成に渡す型ホストとサーバーが能力と文脈をやり取りするプロトコル
知識の取り方切れ端の類似検索節・条・API など、場所を指して取る
実行持たないtools/call で持てる。resources/read は読み取りである
鮮度索引の更新に依存する呼び出した時点の値を取れる
権限文書を読めたことと、変更してよいことは別である接続できることと、変更してよいことは別である

二者択一ではない。一つの仕事に重ねてよい。

2. それぞれが担うこと ​

RAG が担うこと ​

外部の文書から、今の質問に関係する箇所を探し、生成のそばに置く。社内 Wiki の説明、手順の草稿、過去事例の文章に向く。

RAG が担わないこと ​

  • 稼働システムの「いまの値」を保証すること
  • 設定変更、チケット作成、再起動
  • 索引に無い改正を、自動で知っていることにすること
  • 拾った手順文を、実行許可に変えること
  • 元の文書に付いていたアクセス制御を保つこと

最後の一つは見落としやすい。人事部だけが読める文書を索引に入れると、検索の側には権限の区別が残らない。誰が何を読めるかは、索引を作る時点で設計する(SHOULD / するのがよい)。

MCP が担うこと ​

Model Context Protocol は、ホストとサーバーの間の決まりである。サーバーが出せるものは、主に次の三つである。

提供呼び出しの名前意味
Tooltools/list / tools/call実行できる操作。読み取りだけの操作も含む
Resourceresources/list / resources/read / resources/subscribe読めるデータ。ファイル、レコード、仕様の一節
Promptprompts/list / prompts/get使い方の型

法令、RFC、いまのレプリカ数、いまの訳のように、場所を指して取る仕事に向く。書き込みの Tool を出せば、状態を変えることもできる。

MCP が担わないこと ​

  • 「この操作をしてよいか」の最終判断。判断はホストと Doctrine と承認が持つ
  • 検索品質そのもの。切れ端検索を Tool の中に入れても、切れ端検索のままである
  • サーバーが止まったあとの代替。止まり方は設計に含める

判断が要らない処理まで MCP にしてはならない(MUST NOT / してはならない)。普通のプログラムでよい。判断の量で置き場を決める考え方は II.2 配置基準 にある。

3. よくある取り違え ​

「RAG か MCP か」と聞くと、次の取り違えが起きやすい。

  1. MCP を実行専用だと思う。 resources/read と、読み取り専用の tools/call を忘れている。
  2. RAG を知識そのものだと思う。 RAG は置き場ではなく、探して渡す型である。
  3. RAG を MCP サーバーの中に入れたので、MCP に置き換わったと思う。 中身は検索のままである。
  4. tools/list に載ったことを、実行許可だと思う。 許可はホスト側の制約が与える。

四つ目には、仕様の側にも補助がある。MCP のツール注釈(readOnlyHint / destructiveHint / idempotentHint / openWorldHint)は、サーバーが自分のツールの性質を申告するものである。ただし仕様は、これらがヒットであって動作の保証ではないこと、信頼できないサーバーから受け取った注釈をもとにツール使用を判断してはならないことを明記している。注釈が付いていないツールは、破壊的なものとして扱うのが既定である。

注釈は、読み取りと書き込みを分けて並べるための材料になる。許可の根拠にはならない。詳しくは MCP セキュリティ を見る。

使える組み合わせの例である。

  • 説明文は RAG、条文は resources/read または参照系 Tool
  • 文書検索そのものを search_docs のような Tool にする
  • 現在値の確認は読み取り専用の Tool、変更は別サーバーの書き込み Tool

4. 境界を無視したときの壊れ方 ​

知る経路と、する経路を同じ入口にすると、次が起きる。

寄せ方起きること
RAG で拾った古い手順のまま変更する文書は古い。エージェントは実行する。影響は実システムに出る
「ポリシーは何か」を書き込み Tool に回す遅くなる。副作用が生じる。実行権限が要らない問いに権限が付く
現在値を、索引済みの設計書だけで答える設計書と稼働がずれていても、気づかない
参照用と変更用の Tool を一つの一覧に載せるモデルが、近い名前の書き込みを選ぶ余地が残る
知る経路が返した本文を、そのまま指示として読む文書に書かれた命令文が、書き込みの引き金になる

最後の行は、鮮度とは無関係に成立する。索引が最新でも、本文に「以下を実行してください」と書いてあれば同じことが起きる。これは OWASP MCP Top 10 の MCP06(Prompt Injection via Contextual Payloads)に当たる。

境界は実装の好みではない。変更操作がある仕事では、信頼性の制御である。

参照の結果を、実行の許可にしてはならない(MUST NOT / してはならない)。この命題には兄弟がある。参照の結果を、指示として読んではならない(MUST NOT / してはならない)。

5. 本番で持つ形 ​

三つの担当に分ける。製品名ではない。担当である。

担当受け持つもの置いてはならないもの
知る文書の断片、原文の一節、いまの値変更操作
判断足りるか、古いか、実行してよいか検索索引そのもの、接続の設定
する許可された tools/call手順書の全文、方針文

判断は五層では Agent と Doctrine である。する経路の入口は MCP 層である。知る経路は、RAG(多くの場合 Agent の取り方)、Memory、MCP の Resource と読み取り Tool に分かれる。

6. 要求の種類で経路を選ぶ ​

質問の例先に使うもの先に使わないもの
このサービスの障害時手順は何かRAG または resources/read再起動の Tool
今のレプリカ数はいくつか読み取り専用の tools/call古い設計書だけ
レプリカを 3 に増やしてよいか判断と承認と、書き込みの tools/callRAG が返した一文

変更の前に、文書と現在値を分けて確認する方がよい(SHOULD / するのがよい)。書き込み Tool の名前、引数、結果は残す方がよい(SHOULD / するのがよい)。

一連の流れを、実装の名前に直すと次のようになる。

7. 五層との関係 ​

パターンは層の別名ではない。IV.1 の 1.4 と同じ立場である。

五層この境界での役割
Doctrine実行してよい条件、禁止、承認が要る線
Agent知るだけで足りるか、読み取りが要るか、変更が要るかを分ける
Skills手順と観点。接続そのものではない
Memory自分たちの仕事の関係と履歴。法令や RFC の原文は置かない
MCP外への接続。読み取りと書き込みを、サーバーまたは Tool の単位で分ける

Skills に「再起動してよい」と書いてあっても、再起動を呼び出す Tool が無ければ実行できない。逆に、再起動の Tool が tools/list に載っていても、Doctrine が禁じていれば実行してはならない。この非対称は Permission と Authority で扱っている。

クラウドの Projects に載る RAG も、Messages API の Citations も、知る側の実装である。GraphRAG は、関係をたどって知る型である。する側にはならない。

8. 要約 ​

RAG と MCP は競争しない。層が違う。

  • 説明文を探すなら RAG
  • 条や節やいまの値を指して取るなら MCP の Resource または読み取り Tool
  • 状態を変えるなら、承認の先にある書き込み Tool
  • 関係の残りなら Memory
  • してよいかは Doctrine
  • どれを選ぶかは Agent

型の選び方に唯一の正解は無い。実際に起きた失敗を見て、知る経路と、する経路を分ける。

関連ドキュメント ​

Released under the MIT License.