RAGチェーンをエンドツーエンドで構築する
loader -> splitter -> embeddings -> vector store -> retriever -> prompt -> modelの流れをつなぎ合わせます。
「RAGチェーンをエンドツーエンドで構築する」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
プロジェクトの目標
ローダー、スプリッター、ベクトルストア、LCELを組み合わせて、本番環境を想定した完全なRAGチェーンを構築します。
Step 1: Load and Chunk
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = PyPDFLoader('handbook.pdf')
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.split_documents(docs)
print(f'{len(chunks)} chunks loaded')Step 2: Embed and Store
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
embeddings = OpenAIEmbeddings(model='text-embedding-3-small')
store = Chroma.from_documents(
chunks,
embeddings,
persist_directory='./handbook_db'
)Step 3: Set Up Retriever
retriever = store.as_retriever(
search_type='similarity',
search_kwargs={'k': 4}
)Step 4: Define the Prompt
from langchain.prompts import ChatPromptTemplate
rag_prompt = ChatPromptTemplate.from_template('''
You are a helpful assistant. Use the context below to answer.
If the answer is not in the context, say you do not know.
Cite sources like [1], [2].
Context:
{context}
Question: {question}
Answer:
''')Step 5: Format Documents Helper
def format_docs(docs):
return '\n\n'.join(
f'[{i+1}] (source: {d.metadata.get("source", "?")}, page {d.metadata.get("page", "?")})\n{d.page_content}'
for i, d in enumerate(docs)
)
from types import SimpleNamespace
docs = [
SimpleNamespace(metadata={'source': 'handbook.pdf', 'page': 3}, page_content='Vacation policy details.'),
SimpleNamespace(metadata={'source': 'handbook.pdf', 'page': 5}, page_content='Sick leave details.'),
]
print(format_docs(docs))
Step 6: Assemble the LCEL Chain
from langchain_core.runnables import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model='gpt-4o-mini', temperature=0)
rag_chain = (
{'context': retriever | format_docs, 'question': RunnablePassthrough()}
| rag_prompt
| model
| StrOutputParser()
)Step 7: Invoke
answer = rag_chain.invoke('What is our refund policy?')
print(answer)Step 8: Stream the Answer
for chunk in rag_chain.stream('What is our refund policy?'):
print(chunk, end='', flush=True)ステップ9: ソースを個別に返す
出力に回答と取得したドキュメントの両方を含めたい場合があります:
from langchain_core.runnables import RunnableParallel
rag_with_sources = RunnableParallel(
context=retriever,
answer=rag_chain
)
result = rag_with_sources.invoke('What is our refund policy?')
print(result['answer'])
for doc in result['context']:
print(doc.metadata)ステップ10: 会話型RAG
会話履歴を考慮した検索を追加します。検索前に追加質問を単独で成立する形式に書き換えます:
from langchain.chains import create_history_aware_retriever
# 'And what about XL sizes?' -> 'What is the refund policy for XL sizes?'ステップ11: チェーンの評価
LangSmithとの統合により、すべてのチェーン呼び出しが記録されます。実際の利用状況からデータセットを作成し、評価を実行できます。
本番環境での考慮事項
- モデルのバージョンを固定する
- max_tokensを設定する
- トークン使用量の追跡を追加する
- フォールバックモデル付きのリトライを実装する
- 埋め込みをキャッシュする(OpenAIではすでに決定的です)
- トレース用にLangfuse/LangSmithを追加する
format_docsの目的
リトリーバーとプロンプトの間でformat_docsヘルパーを使うのはなぜですか?
まとめ
LCELを使って完全なRAGチェーンを構築しました。上記の機能を追加すれば、この骨格を本番環境向けに拡張できます。
よくある質問
「RAGチェーンをエンドツーエンドで構築する」レッスンは無料ですか?
はい。「RAGチェーンをエンドツーエンドで構築する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「RAGチェーンをエンドツーエンドで構築する」で何を学びますか?
loader -> splitter -> embeddings -> vector store -> retriever -> prompt -> modelの流れをつなぎ合わせます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「RAGチェーンをエンドツーエンドで構築する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- LangChainのアーキテクチャ:モデル、プロンプト、チェーン
- ローダー、スプリッター、ベクトルストア
- LCEL(LangChain Expression Language)
- RAGチェーンをエンドツーエンドで構築する