RAG Q&Aシステムをエンドツーエンドで構築する
RetrievalQAチェーン、カスタムプロンプト、出典の付与、RAGASによるRAG評価について学習します。
「RAG Q&Aシステムをエンドツーエンドで構築する」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
RAGとは
Retrieval-Augmented Generationは、LLMに独自のデータを根拠として与える仕組みです。クエリの実行時にベクトルストアから関連するチャンクを取得してプロンプトに組み込むため、モデルは推測ではなく事実に基づいて回答できます。
RAGの流れ
RAGのクエリは、必ず次の4段階で処理されます。(1) 質問を埋め込みに変換する、(2) 類似するチャンクを取得する、(3) チャンクをコンテキストとしてプロンプトに組み込む、(4) LLMがそのコンテキストに基づいて回答を生成する、という流れです。
ストアをリトリーバーに変換
as_retrieverを使って、ベクトルストアをリトリーバーに変換します。search_kwargs辞書で検索方法を制御します。特に重要なのが、質問ごとに取得するチャンク数を指定するkです。
retriever = db.as_retriever(
search_kwargs={"k": 4}
)search_kwargsの調整
search_kwargsでは、スコアのしきい値やMMRのオプションも設定できます。まずはk=4から始め、回答でコンテキストが不足する場合は値を増やし、トークンコストやノイズを減らしたい場合は値を下げます。
retriever = db.as_retriever(
search_type="similarity_score_threshold",
search_kwargs={"k": 6, "score_threshold": 0.5}
)RetrievalQAチェーン
RetrievalQAチェーンは、検索と生成を連携させます。from_chain_typeを使い、llmとretrieverを渡して構築します。これで、1回の呼び出しでドキュメントに基づく質問に回答できるようになります。
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o"),
retriever=retriever
)chain_type:コンテキストの結合方法
chain_typeは、取得したチャンクをプロンプトに組み込む方法を制御します。"stuff"(デフォルト)はすべてのチャンクを1つのプロンプトに入れる方式で、単純であり、コンテキストウィンドウに収まる場合に最適です。"map_reduce"などの他の方式は、多数の大きなチャンクを扱います。
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever
)質問する
invokeでチェーンを実行し、queryキーに質問を指定して渡します。チェーンが検索を行い、プロンプトを構築して、根拠のある回答を返します。
response = qa.invoke({"query": "What is the refund window?"})
print(response["result"])出典ドキュメントの返却
return_source_documents=Trueを設定すると、回答に使用したチャンクを取得できます。これにより引用を提示でき、各事実の出典をユーザーが確認できるようになります。これは信頼性を確保するうえで重要です。
qa = RetrievalQA.from_chain_type(
llm=llm,
retriever=retriever,
return_source_documents=True
)
resp = qa.invoke({"query": "Refund window?"})
for d in resp["source_documents"]:
print(d.metadata)RAGを評価する理由
RAGは主に2つの原因で失敗します。検索で誤ったチャンクを取得する場合と、適切なチャンクがあるにもかかわらず生成でハルシネーションが起きる場合です。どの部分を修正すべきか把握するには、指標が必要です。回答を目視で確認する方法は、大規模には対応できません。
RAGASの指標
RAGASは、RAGの品質を評価するライブラリです。主な指標には、faithfulness(回答がコンテキストに裏付けられているか)、answer_relevancy(回答が質問に答えているか)、context_precision(取得したチャンクが関連しているか)があります。
pip install ragas
from ragas.metrics import faithfulness, answer_relevancy, context_precision評価の実行
質問、生成された回答、取得したコンテキスト、正解となる回答からなるデータセットを作成し、evaluateを呼び出します。スコアによって、チャンク分割、検索時のk、プロンプトのどれを改善すべきか判断できます。
from ragas import evaluate
result = evaluate(
dataset,
metrics=[faithfulness, answer_relevancy, context_precision]
)
print(result)理解度チェック
RAGの理解度を確認しましょう。
振り返り:エンドツーエンドRAG
search_kwargsを指定したdb.as_retriever、llmとリトリーバーを組み合わせたRetrievalQA.from_chain_typeチェーン、そして引用のためのreturn_source_documents=Trueからなる、完全なRAGパイプラインを構築しました。また、faithfulnessやcontext precisionなどのRAGAS指標で品質を測定する方法も学びました。
よくある質問
「RAG Q&Aシステムをエンドツーエンドで構築する」レッスンは無料ですか?
はい。「RAG Q&Aシステムをエンドツーエンドで構築する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「RAG Q&Aシステムをエンドツーエンドで構築する」で何を学びますか?
RetrievalQAチェーン、カスタムプロンプト、出典の付与、RAGASによるRAG評価について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「RAG Q&Aシステムをエンドツーエンドで構築する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- LangChainのアーキテクチャとLCEL
- ドキュメントの読み込み、分割、埋め込み
- ベクトルストア:ChromaとFAISS
- RAG Q&Aシステムをエンドツーエンドで構築する