Assistant APIの仕組みとRAGとの違いは?
Assistant APIの仕組みとRAGとの違いは?
このページは、AIアシスタントのChaakoが運営するチャットボットChaakoBotの使用説明です。
RAGとは何か?
まずはRAGの説明をします。RAGに略される「Retrieval-Augmented Generation」は「検索拡張生成」、「取得拡張生成」などと訳されており、早い話ですが、外部の知識を検索/取得してから生成するということです。
RAGの仕組み
RAGの仕組みについて、できるだけ分かりやすく解説しますので、実際には厳密に異なる点もあることをご了承ください。
Source:https://www.deeplearning.ai/short-courses/langchain-for-llm-application-development/
-①文書をChunk分けにする
AIに参考してもらいたいファイルを、まずいくつかの「Chunk」に分けます。
Chunkとは、かたまり、ひとまとまりの断片のことです。
要するに、文章を適切なサイズで“切る”のです。
-②Chunkをベクトル化(Embedding)し保存する
今度はこれらの“文章の欠片”をベクトルデータ化にしてから、ベクトルデータ対応のデータベースへ入れます。
ベクトル化をEmbeddingとも呼びますので、これからはEmbeddingに統一します。
-③クエリをベクトル化する
ユーザのPromptやクエリを同じくEmbeddingするのですが、実務では場合によって、そのままEmbeddingするのではなく、次項④の精度を高めるために、一度内容を修正してからEmbeddingする手法が採用されることがあります。
-④データベースを検索
Embeddingされたクエリと近いデータをデータベースから検索します。
-⑤AIにレスポンスを生成する
④で得られた結果とPromptをAIに投げて、回答を生成してもらいます。
RAGのメリットと導入のハードル&課題
AIに追加学習させる方法として、Fine-Tuning(ファインチューニング、以下、FT)が最も一般的ですが、決められた形式のデータセットを用意する必要がありますし、学習行為そのものが不可逆的であることがデメリットとして挙げられます。
FTとは異なり、RAGはAIモデルに学習させておらず、理論上はいかなる形式のファイルも利用可能であるというメリットから、今では「BOTの知識をカスタマイズ」するのに最も主流な方法になりつつあります。しかし、RAGの仕組み上、いくつかの導入ハードルと課題もあります。
-ベクトルデータベースの用意
ベクトルデータを格納するわけですから、ベクトルデータベースの用意が必要になります。
-検索結果のマッチング
上記の④データベースを検索というステップにおいて、データベースから「類似データ」を見つける方法としては、コサイン類似度やNNS、K-Means、KNN_など、様々な手法があります。これらの中から「どの手法を使うか」という選択も重要な課題の一つです。
-Chunk分け
参照してもらいたい文書をChunkに分割するわけですが、その際には「どのように切るのか」、「どのサイズに切るのか」といった課題が生じます。
例えば、文書を均等なサイズのChunkに分割するのか、それとも文章の意味や構造を考慮して分割するのかといった選択があります。また、Chunkのサイズを大きくすれば検索の精度は上がるかもしれませんが、処理速度が低下する可能性もあります。逆にChunkサイズを小さくしすぎると、文脈が失われて検索の質が下がるかもしれません。
Assistant APIの仕組みとRAGとの違い?
早い話ですが、Assistant APIは①から⑤を全部自動で行ってくれるということです。
OpenAIのAssistantはアップロードしたファイルを自動的にChunk分けにするので、ユーザは「どのように切るのか」、「どのサイズに切るのか」を考えなくて済みます。
Chunk分けされたデータをEmbeddingして、OpenAIが用意するデータベースに格納されますので、ユーザを別途ベクトルデータベースを用意する必要もありません。
またOpenAIのAPIでは、ユーザのプロンプトやクエリも自動的にEmbeddingされ、データベースから最も関連性の高い情報を検索してくれます。この検索アルゴリズムはOpenAIが最適化しているので、ユーザーは検索手法の選択に悩む必要がありません。
検索結果とユーザのプロンプトを組み合わせて、AIモデルが最適な回答を生成する処理も、APIを通して自動で行われるため、ユーザはRAGの実装に必要な技術的な知識を持たなくても、外部の知識を組み込むことができるのです。
つまりAssistant APIは、RAGの仕組みを利用者に意識させることなく提供しているため、ユーザはファイルをアップロードして、APIを通じてクエリを送信するだけで、まるで AIモデルが最初からその知識を持っていたかのように振る舞うことができるわけです。