AIエージェントのススメ 第13回 スキルを使いこなす3:ナレッジスキル その1

スキルの3分類のうちの3つ目、「ナレッジ」スキルを紹介します。今回は、AIにとって得意な領域と不得意な領域のギャップを整理し、会社情報のようなAIが知り得ない「純粋なナレッジ」をスキルとして定義し、再利用する方法を解説します。

発行

著者 高津戸 壮 テクニカルディレクター
AIエージェントのススメ シリーズの記事一覧
無料公開中
公開翌日4時まで

前回まで

前回はスキルの種類の2つ目の分類として、ワークフロースキルを紹介しました。今回は3つ目の分類としてナレッジスキルを紹介します。なお、ワークフロースキルを使いこなすうえで欠かせない開発環境の話は、次のシリーズで紹介していますので、こちらも参考にしてください。

開発の文脈でいうと、これまで紹介してきたスキルは、コミットの仕方、PRの作り方、git worktreeの使い方、レビューの仕方などでした。「AIさん、こういう流れで働いてください」という働き方ガイドのようなものです。こういったAIエージェントのLLM以外の部分は、一般的に「ハーネス」と呼ばれることが多いのですが、ワークフロースキルは、まさにこのハーネス(手綱)のメイン部分と言えるでしょう。

さて、こうした従業員向けの「働き方ガイド」のようなものがあれば、AIエージェントは完璧に働いてくれるのでしょうか? これで必要なものはすべて揃ったのでしょうか? 多くのケースではうまく働いてくれますが、追加の情報が必要になるケースが多々あることに気づくはずです。そのギャップを埋めるのが「ナレッジ」タイプのスキルです。

AIが得意なことと、必要なこと

具体的な例で見てみましょう。Claude CodeにTODOアプリを作らせてみます。機能豊富で複雑なものでもかまいません。メール通知付きのTODOアプリで、Googleアカウントでのログイン機能があり、チームでTODOリストを共有でき、Slackのチャンネル#TODOにメッセージを送る……。

筆者はこれをローカルで実行してはいませんが、最近のモダンなスタックでほぼ完璧にやってくれるはずです。試しに今ChatGPTへこれを聞いて、どの技術スタックを選ぶか尋ねてみたところ、Next.js、Vercel、AWSやResend、Google OAuth……といった構成で、非常に詳細なプランが返ってきました。実際に作らせたとしたら、たぶん何も言わずとも、サーバー側の設定ガイドというようなものまで作ってくれるでしょう。

AIエージェントは、こういうテンプレート的な開発をかなりうまくやってくれます。ですが、実際の仕事を想像してみるとどうでしょうか? そういうTODOアプリを作りたいわけじゃないんだよなってなりませんかね? ただのTODO管理なら、すでにあるTODOアプリを使えばいいわけですし。

たとえばこのCodeGridの原稿執筆のためのTODOを管理するアプリを作るとします。必然的に週単位の管理を主眼としたものになるでしょうし、更新にあわせてSNSでの配信を管理するような形にもなっていくはずです。お客さんのWebサイトで商品情報を見せるにしても、ただ単にAIがそれっぽく作った結果で満足できることは稀です。この情報は重要だとか、これは掲載しないなどのフィードバックを与えて完成に至るのが普通でしょう。

実際に必要なのは、一般的なテンプレートどおりの仕組みではなく、固有の問題を解決するための何かであるというギャップがあります。それを埋めるためには、そのプロジェクト固有の要件やゴール、ノウハウをAIに伝える必要があります。それを再利用可能なものにしたのが、今回紹介するナレッジに相当するスキルであると考えてください。

AIにとってコードを書くのは得意分野

この話を続ける前に、筆者の感覚を共有しておきたいと思います。筆者はこれまで、コードを書かせる以外にもいろいろなことをAIにやらせてみました。

  • 文章の執筆
  • 電子回路データの生成
  • 3Dプリント用の3D CADデータの生成
  • Webサイトやアプリのデザイン制作

目的を達成するために、AIエージェントには情報を与えることになります。これらそれぞれに個別の話があるのですが、AIができることのうち、コードを書くということは、AIにとっての得意分野であるという認識を持ったほうがよいかと思います。このトピックをClaude Code自体に相談したことがあるのですが、こういったコードの生成については、すでに世の中でパブリックに公開されているソースコードが、トレーニング資産として大量に存在しているため、推論のための材料が多くあるとのことでした。

これに対し、筆者の経験では、上に挙げた題材の中でも電子回路の設計は何度試してもかなり難しいもののように思われました。何かしらの集積回路(IC)部品、そう……たとえばUSB-PDから給電できる仕組みを作ろうとしたことがあるのですが、その部品の仕様は複雑です。ピンが20本あって、どこに何をつなげたらどうなるのかという情報は、そのICの仕様がまとめられたPDFを参照する必要があります。そういうマイナーな情報はGoogleで検索してもほとんどヒットせず、ただそのスペックのPDFの中にだけあるものです。PDFであるがゆえ、単純なテキストでもないため、AIからしても比較的取り込みづらいデータです。こういったAIがほぼほぼ見えていないものについては、推論結果も不正確になります。

コードを書かせる場合でも、個人が作ったような、まったく名前が知られていないようなライブラリみたいなものを使おうとすれば、似た問題が発生します。その場合は直接そのライブラリのソースコードを読ませたり、ある程度まとまったドキュメントを用意したりしないと、間違った判断をすることがあります。

このような観点からすると、「TODOアプリをReactで作る」みたいなことは、非常に推論しやすい領域であることが想像できるのではないでしょうか。しかし、あなたの思い描いているアプリやWebサイトの情報は、ICの仕様と同様に、もちろんAIは持っていません。これを認識しないままに何かを作らせようとすると、「思ったようにやってくれない!」となるでしょう。

そんなわけで、この世間一般的な知識と、自分の目指すゴールの差分をスキルに落とし込むよう、試みることをおすすめします。

このナレッジスキルは、言ってみれば今までの「ユーティリティ」「ワークフロー」以外の全部……なわけなんですが、そういうふうにドカンと掲げてもよくわからないかと思われます。ですので、この連載ではこれらナレッジスキルのうち、次の3種類を念頭に置いて整理するとよいのでは? という提案をします。

  1. 純粋なナレッジ
  2. 設計の指針
  3. ベストプラクティス

1. 純粋なナレッジ

まずは1つ目の「純粋なナレッジ」。目的を達成するために必要な、ピュアな情報です。ポイントは、これをスキルとして定義できるという点です。そういうスキルを作れば、その情報が改めて必要になったとき、再利用できます。

たとえば、自分たちの会社のWebサイトを作りたいとします。ピクセルグリッドのサイトはすでに存在しています。でも、この種のWebサイトをゼロから作るとしたらどうでしょう? 会社を立ち上げて、会社のWebサイトが必要になった、と想像してみてください。

Claude Codeを起動して、そこに何を入力しますか? 「Claude Codeさん、うちの会社のWebサイトを作って」。そうしたら、会社のメンバーの名前を列挙して、住所をGoogle Mapsで埋め込んで……みたいなことはもちろん、起こりません。知っていたら逆に怖いですよね(笑)。

ここでAIエージェントに与える必要があるのは、次のような情報です。

  • 会社の方針
  • 会社の強み
  • 会社のメンバー
  • 住所
  • 問い合わせ方法

「そりゃそうでしょう」という感じですが、これをただ単にプロンプトとして与えて終わりにするのではなく、/my-company-infoのように、再利用可能な情報として定義できます。

具体的な手順は何でもかまいません。まずサイトを作る前にClaude Codeへアレコレ情報を伝え、それを/my-company-infoにまとめさせるのもよし。サイトを作り終えたあとに、/my-company-infoとしてまとめるよう指示するのでもよいです。

これを一度作っておけば、たとえば会社紹介のスライドを別途作りたいとき、このスキルがそのまま役に立ちます。多数のプロジェクトで共通使用される情報はグローバルなスキルとして、プロジェクト固有の情報はリポジトリなど、プロジェクトスコープのスキルとして定義しておくのがちょうどよいです。

ここで重要なのは、そういった情報が「必要なもの」であるという認識そのものです。AIを使っていると、さもAIは万能であるかのように見えるので、自分が求めている答えが返されなかった場合、それをハルシネーションだと呼びたくなるかもしれません。AIは嘘の情報をさも本当のように出すんだと。

それをAIの欠陥であるかのように考えるのは誤りです。LLMは膨大なデータから導き出された、それらしき推論を返しているだけなので、AIが知らなそうな情報や、判断が場合によって分かれそうな意思決定の材料は、こちらから積極的に与えない限り、望むものは作れないという認識が必要です。

そういう意味では、この会社情報は、「そりゃわかるわけがない」と感じられることでしょう。先ほどの電子工作の話も、そのICの仕様をまずはスキルにすべきでした(書いていて今自分で気づきましたが……)。

グローバルスコープとプロジェクトスコープ

本文中で「グローバルなスキル」「プロジェクトスコープのスキル」と書きましたが、Claude Codeの場合、この違いは単純にどこに置くかだけで決まります。

ホームディレクトリの~/.claude/に置いたものは、どのプロジェクトで起動しても読み込まれます。自分専用の設定なので、共有はされません。

ユーザースコープ(グローバル)

~/
├── .claude/
│   ├── CLAUDE.md          # すべてのセッションに効く指示
│   ├── settings.json      # 権限・フックなどの設定
│   ├── skills/
│   │   └── my-company-info/
│   │       └── SKILL.md   # どのプロジェクトからも呼べるスキル
│   └── agents/
└── .claude.json

一方、プロジェクトのルートに置いた.claude/は、そのプロジェクトで起動したときだけ読み込まれます。リポジトリにコミットすれば、チーム全員が同じスキルを共有できます。

プロジェクトスコープ

your-project/
├── CLAUDE.md              # このプロジェクトの指示
├── .mcp.json
└── .claude/
    ├── settings.json      # ~/.claude/settings.jsonを上書き
    ├── settings.local.json  # 個人用の上書き(gitignore対象)
    ├── skills/
    │   └── project-glossary/
    │       └── SKILL.md   # このプロジェクト専用のスキル
    ├── agents/
    └── rules/

同じ名前のものが両方にある場合は、プロジェクトスコープが優先されます。「会社のメンバー情報」のように複数のプロジェクトをまたいで使うものはユーザースコープへ、そのプロジェクトでしか意味を持たない情報はプロジェクトスコープへ、と考えるとよいでしょう。

たとえば、業務システムの開発の業界では、「台帳」や「区分」という言葉が使われているケースが結構多いのではないかと想像されます。ですが、これらの言葉はわりと曖昧な概念を指して呼んでいることがあり、その情報の補足があると、プロジェクトをAIが理解しやすかったりします。

筆者が実際のプロジェクトでこの言葉に出会ったとき、「区分ってなんだよ……」とずっと思っていたのですが、同業種の人と会話したところ、どうやらこれはあるあるな話だったようです。

そういった情報は、ただAIだけにとって有益なだけではなく、人間にとっても間接的に有益です。そのような土壌が整っているプロジェクトであれば、プロジェクトそのものについての質問に、Claude Codeが正確に答えてくれるようになります。これらの情報はAIがコードやコメントを書く際にも自動的に参照されるので、AIにとって理解しやすい情報管理は、結果的に人間の役にも立つという具合です。

.claudeディレクトリの詳細については、公式ドキュメントの次の記事も併せてご参照ください。

今回はナレッジスキルのその1ということで、純粋なナレッジをスキルにするという方法を紹介しました。次回は引き続き、ナレッジスキルの続きとして、「設計の指針」と「ベストプラクティス」について紹介していきます。