この記事をシェア
1. はじめに:なぜ Corpus2Skill が必要なのか
従来の RAG(検索拡張生成)は、いわば「図書館でキーワード検索をして、ヒットした数ページのコピーを AI に渡す」手法でした。しかし、これには致命的な欠陥があります。
文脈の欠如
検索された断片だけでは、その情報が全体の中でどういう位置付けなのかが分かりません。
迷子になる AI
似たような用語が並ぶマニュアルでは、全く関係ない部署の規定を拾ってきてしまいます。
Corpus2Skill は、このプロセスを「ナビゲーション(探索)」に置き換えます。事前にコーパスの全容を「スキルツリー」として構造化し、AI エージェントが自らの意思で地図を辿るように正解へリーチします。
2. コンパイルフェーズ:知識の構造化(Compile Time)
まず、バラバラのドキュメントを「AI が歩ける地図」に変換します。
2-1. 依存関係のインストール
以下のコマンドで、環境を構築します。anthropic は最新版、埋め込み用の sentence-transformers も必須です。
git clone https://github.com/dukesun99/Corpus2Skill.git
cd Corpus2Skill
pip install -e .
pip install anthropic>=0.40.0 sentence-transformers>=3.0.0 scikit-learn>=1.3.0 numpy>=1.24.0 python-dotenv>=1.0.0
2-2. コーパスの作成(JSONL 形式)
ドキュメントは、ID と本文がセットになった JSONL 形式で用意します。
import json
documents = [
{"id": "doc_dns_01", "contents": "カスタムドメインを接続するには、ドメイン管理画面で CNAME レコードを設定してください。"},
{"id": "doc_bill_05", "contents": "年額プランへの変更は、ダッシュボードの『プラン管理』からいつでも可能です。"}
]
with open("corpus.jsonl", "w", encoding="utf-8") as f:
for d in documents:
f.write(json.dumps(d, ensure_ascii=False) + "\n")
2-3. スキルツリーのビルド(コンパイル実行)
ここで「地図」が生成されます。--p は一つの階層にいくつの選択肢を作るか、--max-top は最初の入り口をいくつにするかを指定します。
python -m corpus2skill \
--input ./corpus.jsonl \
--output ./c2s_compiled \
--p 10 \
--max-top 8 \
--model claude-3-5-sonnet-20240620 \
--embed-model Qwen/Qwen3-Embedding-0.6B
3. スキルツリーの構造(.claude/ 配下)
コンパイルが終わると、./c2s_compiled/.claude/skills/ 配下に以下のような Markdown ファイル群が生成されます。
| ファイル | 説明 |
|---|---|
SKILL.md |
その階層が何を扱っているかの「要約」と、下位階層への「リンク(目次)」 |
INDEX.md |
最終的なドキュメント ID が記載された「リーフ(葉)」のファイル |
AI エージェントはこの Markdown を読み、「ドメインの話ならこのフォルダへ移動しよう」と判断を繰り返します。
4. サーブフェーズ:クエリ応答(Serve Time)
実際に質問に答えさせるフェーズです。ここではエージェントがツリーを「歩き」ます。
4-1. 実装スクリプト
このコードを実行すると、AI が思考(ナビゲーション)を開始します。
from corpus2skill.serve import answer_query
from corpus2skill.config import ServeConfig
from pathlib import Path
# 出力先とスキルディレクトリを指定
output_dir = Path("./c2s_compiled")
skills_dir = output_dir / ".claude" / "skills"
# 効率化のための設定
config = ServeConfig(
skills_dir=skills_dir,
use_prompt_caching=True # Anthropic のキャッシュ機能を使いコストを半減
)
# 質問の実行
question = "ドメインの設定手順を詳しく教えて"
result = answer_query(
question,
skills_dir=skills_dir,
output_dir=output_dir,
config=config
)
# 結果の出力
print("--- 回答 ---")
print(result["answer"])
print(f"コスト:${result['cost_usd']:.4f}")
print(f"思考回数:{result['turns']}回")
print(f"参照したドキュメント:{result['docs_retrieved']}")
5. 高度な最適化:プロンプトキャッシュ
Corpus2Skill は何度も LLM に問い合わせを行うため、通常ならコストが嵩みます。しかし、2026 年現在の Anthropic API が提供する「Prompt Caching」を有効にすると、構造上のメリットが最大化されます。
仕組み
一度読み込んだツリーの上位構造(SKILL.md の内容など)を API 側でキャッシュします。
効果
2 ターン目以降の入力トークン料金が劇的に安くなり、WixQA ベンチマークでは約 48% のコスト削減に成功しています。
6. パフォーマンス評価とトラブルシューティング
6-1. 評価の実行
自作した QA データセットに対して、どの程度正解できるかを測定します。
python -m corpus2skill.eval \
--output-dir ./c2s_compiled \
--qa ./my_test_qa.jsonl \
--output eval_results.json
6-2. チューニングのコツ
| 問題 | 解決策 |
|---|---|
| 回答が「見つからない」と言われる | コンパイル時の --p(分岐数)を減らして、1 ページあたりの説明を詳しくする |
| 回答が遅い | --compact フラグを有効にして、ツリーの階層を浅く(リーフを親に統合)する |
7. 結論:RAG エンジニアへのメッセージ
Corpus2Skill は、RAG を「検索の精度」という運任せのゲームから、「ナビゲーションの論理」という確実なステップへと変えました。
現在、GitHub スター数はまだ 20 程度(2026 年 4 月時点)ですが、WixQA において RAPTOR や Agentic RAG を全指標で上回るポテンシャルを持っています。日本語のコーパスにおいても、Claude 3.5/4 の要約能力を介することで、驚くほど整理された「業務技能ツリー」が構築可能です。
まずは手元の 100 件のドキュメントから、この「地図」を作ってみてください。
目次
- はじめに:なぜ Corpus2Skill が必要なのか
- コンパイルフェーズ:知識の構造化
- スキルツリーの構造
- サーブフェーズ:クエリ応答
- 高度な最適化:プロンプトキャッシュ
- パフォーマンス評価とトラブルシューティング
- 結論:RAG エンジニアへのメッセージ
参考文献・リソース
- 論文: Sun, Wei, Hsieh (2026) "Don't Retrieve, Navigate"
- GitHub リポジトリ: dukesun99/Corpus2Skill
- Anthropic Skills API Reference (Beta)
関連キーワード
- Corpus2Skill 実装
- RAG 代替
- スキルベース検索
- ドキュメントナビゲーション
- Claude API
- エンタープライズ検索システム
- WixQA ベンチマーク
- Python 環境構築
- プロンプトキャッシュ
