LangChain + Ollama で RAGチャットボットを作る方法
この記事では、LangChain と Ollama を使って RAG (Retrieval-Augmented Generation) チャットボットを作成する方法をステップバイステップで解説します。さらに、ドキュメントをエージェントに追加する方法 も紹介します!
それでは始めましょう!
RAGチャットボットとは?
RAG とは Retrieval-Augmented Generation の略です。チャットボットが単に内部知識から回答するのではなく、外部データから情報を検索し、その情報を使ってより正確でインテリジェントな回答を生成する仕組みです。
このアプローチの利点は:
- より正確な回答が可能
- 常に最新情報に対応できる
- 特定ドメインに特化した質問にも強い
使用するツール
- LangChain:LLM、リトリーバル、ツール、エージェントを組み合わせるためのフレームワーク
- Ollama:ローカル環境でLLM(例:
Mistral
,Llama3
)を実行 - FAISS:高速なローカルベクトル検索エンジン
ステップ1:セットアップ
まず必要なライブラリをインストールします:
pip install langchain ollama faiss-cpu
また、Ollama をインストールして実行しておきましょう:
- https://ollama.com/
- 例:
mistral
,llama3
,phi3
などのモデルをダウンロード
ステップ2:基本のRAGチャットボットコード
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.llms import Ollama
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.text_splitter import CharacterTextSplitter
from langchain.docstore.document import Document
# 1. ドキュメントを準備
my_docs = [
Document(page_content="PythonはGuido van Rossumによって作成されたプログラミング言語です。"),
Document(page_content="LangChainは言語モデルを活用したアプリケーション開発を支援します。"),
Document(page_content="タイの首都はバンコクです。"),
]
# 2. ドキュメント分割
splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
split_docs = splitter.split_documents(my_docs)
# 3. 埋め込み作成
embedder = OllamaEmbeddings(model="nomic-embed-text")
# 4. ベクトルストア(FAISS)作成
vectorstore = FAISS.from_documents(split_docs, embedder)
# 5. リトリーバル設定
retriever = vectorstore.as_retriever()
# 6. LLM(Ollama)ロード
llm = Ollama(model="mistral")
# 7. RetrievalQAチェーン作成
rag_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
# 8. 質問してみる
query = "Pythonを作ったのは誰?"
result = rag_chain({"query": query})
print("回答:", result["result"])
print("参照ドキュメント:", result["source_documents"])
ステップ3:新しいドキュメントをエージェントに追加する
新しいドキュメントもリアルタイムで追加できます!
Mermaid.jsでのワークフローイメージ:
graph TD
A[ユーザーが新しいドキュメントをアップロード] --> B[チャンクに分割]
B --> C[埋め込み作成]
C --> D[ベクトルストアに追加]
D --> E[リトリーバル自動更新]
E --> F[チャットボットが新しい知識を使用可能に]
Pythonで新しいドキュメントを追加する例:
# 新しいドキュメント例
new_doc = Document(page_content="Djangoは人気のPythonウェブフレームワークです。")
# 1. 分割
new_splits = splitter.split_documents([new_doc])
# 2. 埋め込み作成
new_vectors = embedder.embed_documents([doc.page_content for doc in new_splits])
# 3. FAISSに追加
vectorstore.add_documents(new_splits)
# 新しい情報でリトリーバルが即時アップデート!
まとめ
LangChain + Ollama を使ったRAGチャットボットは非常に強力で柔軟です:
- ローカルモデル制御(外部API不要)
- 簡単に新しい知識を追加可能
- 特定用途向けチャットボット開発に最適
さらに、プロダクション環境では:
- PDFローダー
- ウェブスクレイパー
- データベースリトリーバル
などに接続してスケールすることができます。
未来のAIは オープンソース・プライベート・カスタマイズ可能!
次回のPart 2では、ストリーム応答 と チャットメモリ保存 について解説します!🚀
Related Posts
- Flask[async]・WebSocket・MongoDB を使って OCPP 1.6 中央システムを構築する
- AIはOdooの会計・在庫管理システムをどう強化するのか(開発視点付き)
- JavaScriptでフルスタックのEコマースシステムを開発しよう
- Python・Langchain・OllamaでエージェンティックAIを構築する方法(eコマース & 工場自動化向け)
- PythonとOBD-IIライブデータでP0420の根本原因を診断する
- スタートアップのアイデアを正しく検証するための『The Mom Test』の活用法
- RasaとLangchain、どちらを選ぶべきか?チャットボット開発の選択基準
- OCR Document Managerのご紹介:書類を簡単にテキスト化できるWebアプリ
- まだバズっていない「売れ筋商品」をAIで発見するツールを作っています ― 興味ありますか?
- あなたのウェブサイトがリードを失っている理由 — それは「沈黙」です
- スマート農業を革新するAgentic AIとは?あなたの農場が今すぐ導入すべき理由
- SCPI を使った EXFO 機器の自動化:実践ガイド
- レガシーコードを扱いやすくするためのデザインパターン
- 🧠 レガシーコードに安全に新機能を追加する方法
- レガシーソフトウェアを安全に近代化 — 全面リライト不要!
- OpenSearchの仕組みとは?リアルタイム検索エンジンの内部構造を解説
- DjangoでBasicとPremium機能を分けるベストな戦略とは?
- オーダーメイド家具ビジネスをデジタル化しよう — あなたのブランド専用ECプラットフォーム
- simpliPOSのご紹介:ERPNextを基盤にしたスマートPOSシステム
- スマート農業をもっと簡単に:農業資材を効率的に管理・計画するアプリ
Our Products
Related Posts
- Flask[async]・WebSocket・MongoDB を使って OCPP 1.6 中央システムを構築する
- AIはOdooの会計・在庫管理システムをどう強化するのか(開発視点付き)
- JavaScriptでフルスタックのEコマースシステムを開発しよう
- Python・Langchain・OllamaでエージェンティックAIを構築する方法(eコマース & 工場自動化向け)
- PythonとOBD-IIライブデータでP0420の根本原因を診断する
- スタートアップのアイデアを正しく検証するための『The Mom Test』の活用法
- RasaとLangchain、どちらを選ぶべきか?チャットボット開発の選択基準
- OCR Document Managerのご紹介:書類を簡単にテキスト化できるWebアプリ
- まだバズっていない「売れ筋商品」をAIで発見するツールを作っています ― 興味ありますか?
- あなたのウェブサイトがリードを失っている理由 — それは「沈黙」です
- スマート農業を革新するAgentic AIとは?あなたの農場が今すぐ導入すべき理由
- SCPI を使った EXFO 機器の自動化:実践ガイド
- レガシーコードを扱いやすくするためのデザインパターン
- 🧠 レガシーコードに安全に新機能を追加する方法
- レガシーソフトウェアを安全に近代化 — 全面リライト不要!
- OpenSearchの仕組みとは?リアルタイム検索エンジンの内部構造を解説
- DjangoでBasicとPremium機能を分けるベストな戦略とは?
- オーダーメイド家具ビジネスをデジタル化しよう — あなたのブランド専用ECプラットフォーム
- simpliPOSのご紹介:ERPNextを基盤にしたスマートPOSシステム
- スマート農業をもっと簡単に:農業資材を効率的に管理・計画するアプリ