社内の規程やマニュアルをAIに読ませるとき、文書をどう分けて保管するかで答えの当たり方が変わります。
規程を模した文書で測ったところ、40文字ごとに切ると6問中1問で答えが隣のかたまりに逃げました。段落の区切りで切れば6問とも当たります。
文書を実際に分割して検索しました。40文字ごとで6問中5問、段落の区切りなら6問すべて当たります。
LlamaIndexのような枠組みを使うとき最初に決めるのが、文書の分け方です。どれだけ効くのかを規程を模した340文字の文書で測りました。
分割も検索も本当に実行しています。問い6問と、その答えが書かれている記述はコードに書いてあり、当たったかどうかを機械で判定しました。
// 分割: 指定した文字数ごとに切る(重なりなし)
function chunk(text, size) {
const out = [];
for (let i = 0; i < text.length; i += size) out.push(text.slice(i, i + size));
return out;
}
// 検索: 問いに含まれる語を最も多く含むかたまりを1つ返す
function search(chunks, terms) {
let best = null, bestN = -1;
for (const c of chunks) {
const n = terms.filter((t) => c.includes(t)).length;
if (n > bestN) { bestN = n; best = c; }
}
return best;
}
社内規程を模した本文 340文字(8項目)に対して 6問
分け方 かたまり数 平均文字数 答えに当たった数
40文字ごと 9個 38文字 5 / 6
60文字ごと 6個 57文字 4 / 6
100文字ごと 4個 85文字 5 / 6
200文字ごと 2個 170文字 6 / 6
段落の区切りで 8個 43文字 6 / 6
40文字ごとに切った場合に外した問い(1問)
「日当・日帰り」 求める記述: 1000円
返ったかたまり: "認める。\n【日当】日当は国内出張1日あたり2000円とする。日帰りの場合は100"
外した1問の中身が分かりやすいはずです。「日帰りの場合は100」でかたまりが切れていて、続きの「0円とする」が次に行っています。
これが機械的に切ったときの典型的な外し方です。問いの語は含んでいるのに、答えの数値だけが隣のかたまりに逃げます。
しかも返ってきたかたまりは、問いの語をきちんと含んでいます。ですから検索としては当たっているように見えます。
200文字ごとに切ると6問すべて当たりました。ただしかたまりが2個しかなく、1回に渡すのは平均170文字です。
極端に言えば、文書全体を1つのかたまりにすれば必ず当たります。そのかわり全部を渡すことになり、絞り込んだ意味がなくなります。
段落の区切りで切った場合が最良でした。6問すべて当たり、平均は43文字。200文字ごとと同じ命中で、渡す量は4分の1です。
理由は単純で、1つの決まりが1つのかたまりに収まっているためです。文字数ではなく、意味の切れ目で分けるほうが効きます。
大きく切れば当たる。ただし渡す量も増える。意味で切れば両立する。
The most popular example of context-augmentation is Retrieval-Augmented Generation or RAG , which combines context with LLMs at inference time.原文LlamaIndex Developer Documentation「Welcome to LlamaIndex」 この内容の有効期限2027-02-18
手元のデータの上でAIを動かすための枠組みです。取り込み、分割、保管、検索までを扱います。
LlamaIndexは、手元にあるデータの上でAIを動かすための枠組みです。公式の説明でも、自分のデータの上でエージェントを組むための枠組みだとされています。
この流れ全体は、答えを出す時点で外部の情報を組み合わせる形になります。公式の説明では、この考え方の最もよく知られた例が検索を組み合わせる方式で、推論の時点で文脈とモデルを結びつけるものだとされています。
位置づけを間違えないでください。同じ文書では、検索の流れを、仕事を進めるための多くの道具のうち1つとして使えるエージェントの枠組みを提供するとされています。
つまり検索は手段の1つです。道具を渡して呼ばせる考え方はツール利用の記事で扱っています。
文書を全部渡せば分割は要りません。それでも絞るのは、渡す量がそのまま費用と時間に効くためです。
記録を全部渡す場合と絞る場合の差は長期記憶の記事で数字とともに扱っています。500件で32,114トークンと3,210トークンでした。
測ってみて有効だったのは、外した問いについて、答えがどのかたまりに入っていたかを見ることでした。前の節では「0円とする」が次のかたまりに行っていました。ここまで見れば、切り方をどう直すべきかがすぐ決まります。
LlamaIndex is the leading framework for building LLM-powered agents over your data with LLMs and workflows .原文LlamaIndex Developer Documentation「Welcome to LlamaIndex」 この内容の有効期限2027-02-18
意味の切れ目で分けます。文字数だけで切ると、答えの数値が隣に逃げる形の外し方をします。
LlamaIndexで文書を扱うとき、分け方の失敗はいちばん気づきにくい種類の問題です。検索としては当たっているように見えるためです。
前の節で外した問いを思い出してください。返ってきたかたまりには「日当」も「日帰り」も入っていました。足りなかったのは金額の1桁だけです。
この状態でAIに答えさせると、渡された範囲から読み取れる何かを答えます。金額が切れていることは指摘されません。
3番目を飛ばさないでください。分け方の良し悪しは、実際に聞きたい問いで試すまで分かりません。試験の作り方はシミュレーション評価の記事で扱っています。
外れるなら大きく切ればよい、とはなりません。200文字ごとに切った場合、渡す量は段落区切りの4倍でした。
渡す量が増えると、関係のない記述も一緒に入ります。判断が鈍るうえに費用も増えるので、当たればよいというものではありません。
文字数で切ると、数値の途中で切れても検索は当たったように見える。
LlamaIndex provides a framework for building agents including the ability to use RAG pipelines as one of many tools to complete a task.原文LlamaIndex Developer Documentation「Welcome to LlamaIndex」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る