LangChain + Ollama で RAGチャットボットを作る方法
この記事では、LangChain と Ollama を使って RAG (Retrieval-Augmented Generation) チャットボットを作成する方法をステップバイステップで解説します。さらに、ドキュメントをエージェントに追加する方法 も紹介します!
それでは始めましょう!
より実践的な連携例については、以下のガイド記事もご覧ください:
👉 チャットボットを強化するための業務API連携サービスの紹介
より詳しい比較記事はこちらもぜひご覧ください:
RasaとChatGPT Builderの違いを徹底解説(日本語対応編)
さらに、次世代の自律型AIエージェントによる業務変革にも興味がある方はこちら:
自律型 Agentic AI で業務を変革する方法
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では、ストリーム応答 と チャットメモリ保存 について解説します!🚀
Get in Touch with us
Related Posts
- AIが検索に取って代わる時代:書き手と専門家はどう生き残るのか
- リサイクル事業のための金属価格予測 (日本市場向け・投機不要)
- チーズは誰が動かした?
- 日本向け:業務に最適化されたEコマースシステム設計
- AIの導入がシステムを壊すアンチパターン
- なぜ私たちは「ソフトウェアを作るだけ」ではないのか — システムを実際に動かすために
- Wazuh管理者向け 実践プロンプトパック
- なぜ政府におけるレガシーシステム刷新は失敗するのか(そして、実際に機能する方法とは)
- 日本の自治体が「本当に必要とする」Vertical AI活用ユースケース
- マルチ部門政府におけるデジタルサービス提供の設計(日本向け)
- デジタル行政サービスが本番稼働後に失敗する7つの理由
- 都道府県・市町村向けデジタルシステムのリファレンスアーキテクチャ
- 実践的GovTechアーキテクチャ:ERP・GIS・住民向けサービス・データ基盤
- なぜ緊急対応システムは Offline First で設計されるべきなのか(ATAK からの教訓)
- なぜ地方自治体のソフトウェアプロジェクトは失敗するのか —— コードを書く前に防ぐための考え方
- AIブームの後に来るもの:次に起きること(そして日本企業にとって重要な理由)
- システムインテグレーションなしでは、なぜリサイクル業界のAIは失敗するのか
- ISA-95 vs RAMI 4.0:日本の製造業はどちらを使うべきか(そして、なぜ両方が重要なのか)
- なぜローコードはトレンドから外れつつあるのか(そして何が置き換えたのか)
- 2025年に失敗した製品たち —— その本当の理由













