緊急特集RAG × Jev ― ベクトル検索の次を、いま設計する(全5章)

URGENT FEATURECHAPTER 02 / 05

Corpus2Skillの仕組みと
「遅くて高い」ジレンマ

「検索するな、探索せよ」。断片化を根本から断つCorpus2Skillは、精度と引き換えに速度とコストという新しい課題を抱えていました。

公開 2026年11月3日読了目安 10分キーワード RAG/Jev/Corpus2Skill
  1. 概要
  2. 第1章
  3. 第2章
  4. 第3章
  5. 第4章
  6. 第5章
樹形に整理された書庫の引き出しと手前の砂時計
この章の要点
  • Corpus2SkillはベクトルDBを使わず、文書群を「スキルツリー」というフォルダ階層へ事前にコンパイルします。
  • 回答時はLLMエージェントが目次を読んで枝を選び、最後に原文全文を取得して答えるため、ただし書きや例外規定を落としにくい設計です。
  • 弱点は、枝を1つ選ぶたびに文章生成型のLLMを呼ぶ直列の探索です。待ち時間とAPIコストが探索の深さに比例して増えます。
  • ただし探索工程の中身は「有限の選択肢から1つを選ぶ」判断です。ここに、判断特化AI「Jev」を差し込む余地があります。

第1章では、従来のRAGが文書を数百文字のチャンクに切り分け、ベクトル検索で近い断片だけを拾うことで「文脈の断片化」を起こす問題を見ました。RAGを速くしたい、安くしたいという要望は切実ですが、断片化を抱えたまま検索だけを高速化しても、誤答の速度が上がるだけです。

この章で取り上げるCorpus2Skill(コーパス・トゥ・スキル)は、断片化そのものを設計から取り除く試みです。仕組みを順に分解し、そのうえで実運用を阻んでいた「遅くて高い」というジレンマの正体を確かめます。このジレンマの構造を理解すると、「RAG Jev」で検索してたどり着いた読者が本当に探している答え、つまりJevをどこに組み込むべきかが見えてきます。

Corpus2Skillとは何か

Corpus2Skillは、論文「Corpus2Skill: Distilling Enterprise Knowledge into Navigable Agent Skills for QA and RAG」(Yiqun Sun、Pengfei Wei、Lawrence B. Hsieh)で提案された検索アーキテクチャです。2026年4月にarXivで初版が公開され、8月の第4版を経てEMNLP 2026 Findingsに採択されています。実装はMITライセンスのOSSとしてGitHubで公開されています。

最大の特徴は、ベクトルデータベースもBM25の索引も使わない点です。代わりに、文書の集まり(コーパス)を人間が目次をたどるように探せる階層フォルダ、すなわち「スキルツリー」へ事前に変換します。論文の副題にある「Navigable(探索可能な)」という語が示すとおり、検索エンジンに断片を探させるのではなく、AIエージェント自身に地図をたどらせる発想です。

0個
回答時に使うベクトルDB・BM25索引の数
5勝3分3敗
11データセットでのフラット検索との比較
48%減
プロンプトキャッシュによるWixQAの1クエリ費用
直列
探索ステップの実行順。ここが速度の壁になる

オフラインで知識を「コンパイル」する

Corpus2Skillの処理は、事前準備のオフライン・コンパイルと、質問のたびに動くオンライン・サーブの2段に分かれます。まずコンパイル側から見ていきます。

6段階のパイプライン

コンパイラは、テキスト・Markdown・JSON・JSONL形式の文書を読み込み、次の6段階でスキルツリーを組み立てます。詳細は当サイトの「コンパイルパイプライン」で解説していますが、要点は「似た文書を束ね、束ごとに要約と見出しを付け、フォルダとして書き出す」ことです。

Load 文書の読込 Embed 意味ベクトル化 Cluster 似た文書を束ねる Summarize 束ごとに要約 Label 見出しを付ける Build フォルダ出力 埋め込みは構築時だけ使用 LLMが要約・見出しを生成(構築時) スキルツリー SKILL.md / INDEX.md 原文ストア documents.json(無切断)
図1:Corpus2Skillのコンパイルパイプライン。埋め込みは束ねる工程にだけ使い、回答時の検索には使いません。

ここで見落としやすいのは、Embed段階で埋め込みモデル(既定はQwen/Qwen3-Embedding-0.6B)を使っている点です。ベクトルを捨てたわけではなく、ベクトルは地図を作る測量にだけ使い、道案内には使わないという役割分担になっています。要約と見出しの生成には既定でclaude-sonnet-4-6が呼ばれます。

実行コマンドと主なパラメータ

コンパイルはCLIの1コマンドで実行します。ツリーの形を決める主要パラメータは分岐率と最上位スキル数です。

shell ― コンパイルと評価
# 文書ディレクトリをスキルツリーへコンパイル(分岐率10)
python -m corpus2skill --input ./docs --output ./compiled_output --p 10

# 自社QAセット(JSONL)で品質とコストを評価
python -m corpus2skill.eval --output-dir ./compiled_output \
    --qa ./qa.jsonl --output eval_results.json
表1:ツリーの形を左右するコンパイル時のオプション
オプション既定値役割探索への影響
--p101ノードあたりの子の数(分岐率)大きいほど浅く広い木になり、1回の選択肢が増える
--max-top8最上位スキルの上限数最初の分岐の粒度を決める
--modelclaude-sonnet-4-6要約・見出し生成に使うLLMSKILL.mdの質が道案内の精度を左右する
--embed-modelQwen3-Embedding-0.6Bクラスタリング用の埋め込み束ね方の質に影響(回答時は不使用)
--compact無効末端のINDEX.mdを親へ統合ファイル数と探索段数を減らせる

出力されるフォルダ構造

コンパイル結果は .claude/skills/ 配下に、人間がエディタで開けるMarkdownとJSONとして出力されます。社内規程を例にすると、次のような構造になります。

compiled_output/.claude/skills/ (例)
.claude/skills/
├── SKILL.md                 # 鳥瞰ビュー:全体の地図
├── hr-labor/                # 人事・労務スキル
│   ├── SKILL.md             # 何に答えられる枝かの要約
│   ├── INDEX.md             # 子ノードの一覧
│   ├── leave/               # 休暇
│   │   └── INDEX.md         # 文書IDとタイトルの一覧
│   └── travel-expense/      # 出張・旅費
│       └── INDEX.md
├── it-systems/              # IT・システムスキル
│   └── ...
└── documents.json           # 原文全文(チャンク分割なし)
表2:スキルツリーを構成する3種類のファイル
ファイル置き場所中身探索での使われ方
SKILL.md各階層その枝が扱う話題の要約と、答えられる質問の範囲「この枝に降りるべきか」を判断する材料
INDEX.md各階層・末端子ノードの見出し一覧。末端では文書IDとタイトル次に開く枝、または取得する文書を選ぶ候補リスト
documents.jsonツリーの外文書IDと原文全文の対応表最後に原文を丸ごと取り出す

SKILL.mdは、たとえば次のような短い文書です。探索するAIにとっては、本の章扉に書かれた「この章で扱うこと」に相当します。

hr-labor/travel-expense/SKILL.md (例)
---
name: travel-expense
description: 国内・海外出張の旅費、宿泊費、日当、精算手続きに関する規程
---
## この枝で答えられる質問
- 役職別の宿泊費上限、日当の金額
- 出張申請と事後精算の手順、必要書類
- 例外規定(役員の実費精算、災害時の特例など)

## 含まれる文書
INDEX.md を参照(旅費規程 本則・細則、精算マニュアル ほか)

文書そのものは一切チャンクに切られず、documents.json に手付かずのまま保存されます。ツリーは要約と見出しだけで組まれた「目次」であり、本文の置き場所とは分けられています。この分離が、次に見るサーブ時の高い事実性を支えます。なお、この構造は .claude/skills の規約に沿っているため、AnthropicのSkills APIへそのまま載せることもできます。

オンラインで目次をたどる

質問が届くと、LLMエージェントはスキルツリーの上から順に目次を読み進めます。動きは、人が分厚い規程集で答えを探すときとほぼ同じです。

  1. 俯瞰する:最上位のSKILL.mdで全体の地図を読み、「出張の宿泊費」なら人事・労務の枝が有望だと判断します。
  2. ドリルダウンする:その枝のINDEX.mdを読み、さらに「出張・旅費」へ降ります。
  3. バックトラックする:降りた先の要約が質問と噛み合わなければ、親へ戻って別の枝を選び直します。
  4. 原文を取得する:末端のINDEX.mdで文書IDを特定し、get_documentで原文全文を読み込んでから回答を書きます。
ルート(鳥瞰) 人事・労務 IT・システム 休暇(外れ) 出張・旅費 get_document → 原文全文 第1項 宿泊費は一律1万円 第5項 ただし役員は実費精算 戻る ①俯瞰 → ②降下 → ③外れて戻る → ④選び直し → ⑤原文取得(各矢印が1回のLLM判断)
図2:ドリルダウンとバックトラックの例。外れた枝から引き返せることが、一発勝負のベクトル検索との違いです。

なぜ「ただし書き」を落とさないのか

第1章の例を思い出してください。「国内出張の宿泊費は一律1万円」という第1項と、数ページ離れた「ただし役員は実費精算」という第5項です。ベクトル検索は質問と似たチャンクを拾うため、第1項だけが選ばれ、第5項が捨てられる危険がありました。

Corpus2Skillでは、探索中のAIが読むのは要約と見出しだけで、最後に取り出すのは旅費規程という文書の全文です。第1項と第5項は同じ文書の中にあるので、両方が必ずAIの目に入ります。断片の「近さ」ではなく、文書という意味のまとまりで根拠を渡すことが、事実性の高さの源泉です。論文でも、企業のカスタマーサポート型ベンチマークで、密ベクトル・ハイブリッド・階層型・エージェント型の各RAGを回答品質と根拠性(グラウンディング)の両方で上回ったと報告されています。

得意なコーパス、不得意なコーパス

ただし万能ではありません。論文の11データセットを使った比較では、フラット検索に対して5勝3分3敗でした。著者自身が「コーパスの探索は検索の普遍的な代替ではない」と明記しています。

表3:Corpus2Skillが向くコーパス、向かないコーパス(論文の汎化研究より)
コーパスの性質例有利な方式
単一ドメインで話題の構造がある製品ヘルプセンター、社内規程、業務マニュアルCorpus2Skill
オープンドメインの事実断片雑多なトリビア的知識の寄せ集めフラット検索
均質な表形式同じ形のレコードが並ぶだけのデータフラット検索

社内ナレッジベースやサポート用FAQの多くは、最初の行に当てはまります。つまり、社内AI検索やナレッジベースのチャット回答を作りたい読者にとって、Corpus2Skillは有力な選択肢です。適用判断の詳細は「エンタープライズ活用と適用判断」も参照してください。

致命的な弱点「遅くて高い」

精度の面では理想に近いCorpus2Skillにも、実運用を阻む壁がありました。探索にかかる時間と費用です。

探索の1歩ごとに文章生成AIが動く

図2の矢印の1本1本は、LLMへの1回の問い合わせです。エージェントは目次を読み、「次は出張・旅費の枝を開く」というツール呼び出しの文を生成します。文章生成型のLLMは、トークンを1つずつ順に予測して出力する自己回帰生成で動くため、短い命令文でも、入力の読み込みと生成に一定の時間がかかります。

しかも探索は直列です。次にどの枝を開くかは、いま開いた目次を読まないと決まりません。3階層を降り、1回引き返し、文書を取得して回答を書けば、LLMの往復は少なくとも5〜6回になります。1回ごとの待ち時間がそのまま積み上がります。

表4:探索ステップ数と待ち時間の試算(当編集部による仮定値)
探索のパターンLLM呼び出し回数1回1.5秒と仮定1回3秒と仮定
浅い木・一発で到達3回(降下2+回答1)約4.5秒約9秒
3階層・寄り道なし5回(降下3+取得1+回答1)約7.5秒約15秒
3階層・1回引き返す7回約10.5秒約21秒
複数の枝にまたがる質問10回前後約15秒約30秒

1回あたりの応答時間は、モデル、入力の長さ、混雑状況で大きく変わるため、上の表はあくまで構造を示すための試算です。それでも、待ち時間がステップ数に比例して伸びること、複雑な質問では利用者が数十秒待たされうることは読み取れます。チャット画面で十数秒の無反応が続けば、利用者は離脱するか、同じ質問を送り直してしまいます。

LLMが探索を担う場合(直列) 俯瞰 降下1 降下2 引き返し 降下2' 原文取得と回答生成 質問送信 回答開始 探索だけで待たされる区間(=ここを短くしたい) 青とオレンジの各ブロックは「有限の選択肢から1つ選ぶ」判断にすぎません。
図3:直列探索のタイムライン。回答を書く前の区間が長く、その大半は選択の判断です。

費用も探索の深さに比例する

費用面も同じ構造です。探索の各ステップでは「これまで読んだ目次+新しい目次」を毎回入力として送るため、入力トークンが累積的に増えます。論文がWixQAベンチマークで報告した1クエリあたりの費用は、プロンプトキャッシュなしで0.172ドル、キャッシュありで0.089ドルでした。1ドル150円で換算すると、それぞれ約26円と約13円です。

表5:WixQAでの1クエリ費用と月間換算(1ドル150円、月6,000クエリで試算)
条件1クエリ(ドル)1クエリ(円換算)月6,000クエリ(円換算)
キャッシュなし0.172約26円約15.5万円
キャッシュあり0.089約13円約8.0万円

キャッシュ有効時は入力の約70%が通常の1/10の料金で読まれ、費用はほぼ半減します(詳しくは「コスト構造とプロンプトキャッシュ」)。それでも論文自身が「中程度のコスト増」と認めているとおり、検索1回と生成1回で済む単純なRAGに比べれば、探索のぶんだけ割高になります。問い合わせが日に数千件規模になると、この差は無視できません。

ジレンマの正体

精度を上げるには探索を深くしたい。しかし深くするほど、文章生成AIの呼び出しが直列に増え、待ち時間と費用がかさむ。「精度は最高だが、遅くて高い」という状態が、Corpus2Skillの実運用を難しくしていました。

探索は「選ぶだけ」の作業

ここで、探索の各ステップでAIが実際に何をしているかを見直してみます。目次に並ぶ8個や10個の枝から1つを選ぶ。候補の文書リストから、回答に必要なものに印をつける。引き返すかどうかを決める。どれもあらかじめ決まった有限の選択肢から選ぶ判断であり、自由な文章を書く必要はありません。

にもかかわらず、従来の実装では、文章を書くために作られた重厚なLLMに、ツール呼び出しの文を生成させて選択させていました。本来は一瞬で済むはずの「選ぶ」作業に、「書く」ための機構を使っていたことになります。これが遅さと高さの根本原因です。

表6:Corpus2Skillのサーブ工程を作業の性質で分ける
工程作業の性質文章生成は必要か
最上位の枝を選ぶ数個〜数百個の選択肢からの分類不要
下位の枝を選ぶ・引き返す選択肢からの分類、続行か否かの判定不要
候補文書を絞る各文書が必要かどうかのYes/No判定不要
原文を読んで回答を書く自由記述の文章生成必要

表のとおり、文章生成が本当に必要なのは最後の1工程だけです。そこで浮かぶ問いが、「選ぶ工程だけを、選ぶことに特化したAIに任せられないか」です。

この問いに正面から答えるのが、TypeSafe AIが2026年9月に早期アクセスを始めた判断特化型モデル「Jev」です。Jevは文章を生成せず、選択(choice)・採点(score)・Yes/No判定(noul)の答えだけを確率付きで返します。ベンダー公表のレイテンシは70〜500ミリ秒で、出力トークンは課金されません。

「RAG Jev」で探している方へ

RAGを速くしたくてJevを検討しているなら、ベクトル検索の前後にJevを足す前に、この章の表6を見直してください。ベクトル検索のRAGでは、Jevが担える「選ぶ工程」はリランキング程度しかなく、断片化という本質的な弱点も残ります。一方、Corpus2Skillでは探索工程のほぼすべてが「選ぶ工程」です。Jevの力を最も引き出せるのは、スキルツリーの道案内役に据えたときです。

次の第3章では、Jevとはどのようなモデルなのか、なぜ速く安いのか、そして弱点はどこにあるのかを、公開情報と当編集部の利用経験から詳しく見ていきます。

参考資料・情報ソース

  1. Yiqun Sun, Pengfei Wei, Lawrence B. Hsieh「Corpus2Skill: Distilling Enterprise Knowledge into Navigable Agent Skills for QA and RAG」arXiv:2604.14572(EMNLP 2026 Findings採択、v4 2026年8月26日)
  2. dukesun99/Corpus2Skill(GitHub、MITライセンス。CLIオプション、出力構造、評価モジュール)
  3. System One モデル Jev の解説(DataCamp。Jevの質問型とTypeSafe社の自己評価)
  4. TypeSafe launches Jev, a chatless AI model(Jevの公開時期とベンダー公表レイテンシ)
  5. 当サイト「コンパイルパイプライン」「スキルツリー構造」「コスト構造とプロンプトキャッシュ」

※表4の待ち時間と表5の円換算・月間費用は、明記した仮定に基づく当編集部の試算です。