社内の文書を検索して、その内容でAIに答えさせる構成があります。分ける、探す、答えるという段を通ります。
実際に走らせたところ、分け方を変えただけで最後まで届いた問いが5件から2件に落ちました。段が重なると、各段の取りこぼしが掛け算になります。
3つの段を通して実際に走らせました。分け方を変えただけで、最後まで届く問いが5件から2件に落ちます。
RAGの構成で、どの段が結果を左右するのかを実際に走らせて測りました。用意したのは条文8件と、問い5件です。
分割も検索も判定も本当に実行しています。数えたのは段ごとの通過で、どこで落ちたかを切り分けられるようにしました。
// 段1: 分ける
const splitBy = (mode2) => {
if (mode2 === 'sentence') return SENTS;
const full = SENTS.join('');
const o = []; for (let i = 0; i < full.length; i += 30) o.push(full.slice(i, i + 30));
return o;
};
// 段2: 探す(語の重なりで上位1件)
const find = (chunks, q) => { /* 問いの語を最も多く含む塊を返す */ };
// 段3: 答えられるか(渡した塊に答えが入っているか)
const canAnswer = (chunk, want) => chunk.includes(want);
分け方 段1で答えが同じ塊 段2で正しい塊を選ぶ 段3で答えられる 条ごと 5 / 5 5 / 5 5 / 5 30文字ごと 5 / 5 2 / 5 2 / 5 段ごとの通過率をかけ合わせたときの、最後まで届く割合 段1 段2 段3 最後まで届く 100% 100% 100% 100.0% 90% 90% 90% 72.9% 80% 80% 80% 51.2% 60% 80% 90% 43.2%
上の表の段1を見てください。どちらの分け方でも5/5です。答えの数値は、どこかの塊には必ず入っています。
差がついたのは段2です。30文字ごとに切ると、正しい塊を選べたのは2件でした。
原因は塊の中身です。機械的に切ると1つの塊に複数の条文が混ざり、問いと関係のない語も一緒に入ります。その塊が選ばれてしまいます。
段3の列は、段2と同じ数字になりました。探す段で外した問いは、答える段でも当然答えられません。
段は順に通るので、前の段で落ちたものは後ろの段で拾えません。答える側の性能を上げても、この2件は戻りません。
下の表が、段が重なることの意味です。各段が9割でも、3段を通ると72.9%にしかなりません。
8割ずつなら51.2%です。段を1つ足すたびに、全体の水準は下がります。段を増やす設計は、この掛け算を前提に考えることになります。
分ける段は同じ。落ちたのは探す段で、後ろでは取り返せない。
The retrieval pipeline becomes a foundation for a broader system that combines search with generation.原文Docs by LangChain「Retrieval」 この内容の有効期限2027-02-18
手元の文書を検索し、見つけた内容をAIに渡して答えさせます。学習させ直さずに、自社の情報を扱えるようにする構成です。
RAGは、手元の文書を検索して、その内容をAIに渡して答えさせる構成です。日本語では検索を組み合わせた生成と呼ばれます。
AIは学習した時点の内容しか持っていません。自社の規程も、昨日の議事録も知りません。
LangChainも、この形が検索を組み合わせた生成の基礎であり、その場に固有の情報でモデルの答えを補強するものだとしています。学習させ直さずに、自社の情報を扱えるようにする手立てです。
4番目は省かれがちですが、渡した範囲を超えた答えが出ることがあります。確かめ方はグラウンディングの記事で扱っています。
同じ文書では、検索の流れが、検索と生成を組み合わせたより広い仕組みの土台になるとされています。
つまり答えの質は、検索の段までで大部分が決まっています。前の節で落ちた3件も、探す段で決まりました。
測ってみて分かったのは、段ごとの通過を記録しておかないと直す場所が決まらないということでした。最後の2/5という数字だけでは、分け方が悪いのか探し方が悪いのか判断できません。段1が5/5だと分かって初めて、探す段に絞れます。
This is the foundation of Retrieval-Augmented Generation (RAG) , enhancing an LLM’s answers with context-specific information.原文Docs by LangChain「Retrieval」 この内容の有効期限2027-02-18
最後の数字だけを見ることです。どの段で落ちたかが分からなければ、直す場所も決まりません。
RAGでいちばん多い失敗は、答えの良し悪しだけを見て、モデルや指示を触り続けることです。
答えがおかしいと、まず答える段を疑います。ところが前の節では、落ちた3件はすべて探す段で決まっていました。
この3件については、指示をどう書き直しても答えられません。渡された塊に、答えが入っていないからです。
次に出るのが「全部渡せばよい」という案です。ところがLangChainも、モデルの限界として文脈が有限であり、資料の全体を一度に取り込めないことを挙げています。
渡せる量には上限があります。だから探す段が要るという順序になります。
4番目を避けてください。段が3つあると、同時に触ったときの原因の切り分けができません。
答えがおかしい原因は、たいてい答える段より前にある。
Finite context : they can’t ingest entire corpora at once.原文Docs by LangChain「Retrieval」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る