前のレッスンでは、リソースを「アプリが選ぶ、読み取り専用のデータ」とひとまとめに扱いました。ここからは、その中身をもう一段掘り下げます。
リソースはHTTPのGETに近い
ツールは「実行」を担い、呼ぶたびに何かが変わることがあります。値を書き込む、メールを送る、計算する。副作用があるということです。
リソースはそれと対照的です。読み取り専用で、同じURIを何度読んでも壊れるものは何もありません。ウェブでいうGETリクエストに近い性質を持っています。
ツールとリソースの違い
実行を担う。呼ぶことで何かが変わりうる(副作用がありうる)。
選ぶのはモデル。Claudeが会話の中で自分で判断して呼び出す。
参照だけを担う。何度読んでも状態は変わらない読み取り専用。
選ぶのはアプリ。一覧・検索・自動選択など、取り込み方はアプリの設計次第。
この違いを覚えておくと、「これはツールにすべきか、リソースにすべきか」を設計するときの判断が速くなります。
直接リソースと、パラメータ付きのテンプレート化リソース
リソースには2つの指定のしかたがあります。
一つは、URIが固定された直接リソースです。「議事録の一覧」のように、いつ呼んでも同じ場所を指します。もう一つは、URIの一部が変数になったテンプレート化リソースです。「この議事録IDの中身」のように、呼ぶたびに対象が変わります。
URIが固定。例えるなら「議事録一覧」のような、いつでも同じ場所を指すURI
URIの一部がパラメータ。例えるなら「議事録ID◯◯の中身」のような、呼ぶたびに対象が変わるURI
テンプレート化リソースのパラメータは、入力の途中で候補を補ってもらえる仕組み(補完API)と組み合わせられます。「@」に続けて名前の一部を打つと候補が絞り込まれていく、というような体験は、この仕組みの上に成り立っています。
購読すると、変更のたびに知らせてくれる
リソースには、もう一つ覚えておく価値のある機能があります。購読です。
対応しているサーバーであれば、特定のリソースを購読しておくと、そのリソースの中身が変わるたびに通知が届きます。ポーリングで「変わっていないか」を毎回尋ねに行く必要がありません。
購読する
特定のリソースについて、変更があったら知らせてほしいと伝える
サーバー側で変更が起きる
元のデータ(ファイル・DBのレコードなど)が更新される
通知が届く
サーバーが更新の事実だけをクライアントに知らせる
読み直す
クライアントは通知を受けて、必要なら改めて中身を取得する
ただし購読は、すべてのサーバーが対応しているとは限らない任意の機能です。サーバー側がこの機能を持つと宣言していなければ、購読自体ができません。つないだサーバーが対応しているかどうかは、確かめてから前提にする必要があります。
アプリがどう組み込むかは、決まった正解がない
前のレッスンでも触れたとおり、リソースを最終的にどう会話へ組み込むかは、つないでいるアプリ側の設計です。公式仕様はやり方を一つに決めていません。
補足
組み込み方の例
一覧や検索で見せて人に選ばせる方式、条件に応じてアプリが自動で差し込む方式、この2つは両立できます。どちらか一方に決め打ちする必要はありません。
同じリソースの仕組みでも、つなぐ先のアプリによって体験が変わる理由はここにあります。プロトコルが決めているのは「読み取り専用のデータを、URIで指し示して渡せる」というところまでです。
やってみよう
演習1:どちらのリソースにするか考える
自分が欲しい「読み取り専用のデータ」を1つ思い浮かべてください。それは固定のURIで指せる直接リソースが向いているか、パラメータで対象を絞るテンプレート化リソースが向いているか、理由とあわせて考えてみてください。
演習2:購読する価値があるか考える
演習1で挙げたリソースは、頻繁に中身が変わるものでしょうか。変わるたびに知りたいものであれば、購読する価値があります。逆にめったに変わらないものなら、購読より毎回読みに行く方がシンプルかもしれません。どちらが自分の用途に合うか考えてみてください。
今日のまとめ
3行で振り返ります。
- リソースは読み取り専用で、ツールと違って何度読んでも状態を変えない
- URIが固定の直接リソースと、パラメータで対象が変わるテンプレート化リソースの2種類がある
- 購読に対応したリソースは、変更のたびに通知を受け取れる(ただし任意機能で、対応の有無はサーバー次第)
次のレッスンでは、もう一つの「ユーザーが選ぶ」土台、プロンプトを深掘りします。あなたが毎回書くプロンプトと、サーバー作者が用意するプロンプトの違いから始めます。
セルフチェック
1. リソースとツールの違いとして正しい説明はどれですか。
2. テンプレート化リソースの説明として正しいものはどれですか。
3. リソースの購読機能について正しい説明はどれですか。