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
- クリーンアーキテクチャで大規模なPythonシステムを構築する(実践サンプル・図解付き)
- なぜTest-Driven Development(TDD)はビジネスに有利なのか
- Django × DigitalOcean × GitHub Actions × Docker で構築する継続的デリバリー(CD)環境
- LangChainとOllama、オープンソース埋め込みで作るローカル商品レコメンドシステム
- 2025年版:主要モバイルアプリフレームワーク徹底比較(Flutter、React Native、Expo、Ionic ほか)
- NumPy の `np.meshgrid()` を徹底解説:なぜ必要なのか?順序を入れ替えるとどうなるのか?
- PyMeasure を使って実験装置を自動制御する方法
- チャットボットを強化しよう:業務システムと連携するAPI開発サービス
- 今注目の「日本語対応Rasaチャットボットガイド」が話題の理由と、その活用方法
- 数学なしで「方程式」を推測する方法:猫と鳥の個体数の関係を探る
- AIに負けないプロジェクトの作り方:人とのつながりで価値を生むアイデア
- GNS3 + Wazuh + Dockerでサイバーセキュリティ演習ラボを構築しよう
- GNS3を使ってネットワーク機器の構成をシミュレーション&トレーニングする方法
- LMSとは?そしてなぜFrappe LMSに注目すべきか
- 工場における Agentic AI:スマートで自律的な次世代製造
- EVバイクをもっとスマートに、安全に管理する:ジオフェンシングとリアルタイム追跡システム
- FastAPI で Google OAuth を使った Single Sign-On (SSO) を実装する方法
- Simplicoで始めるタクシー配車アプリ開発:スケーラブル、安全、即スタート可能!
- 拡張性のあるEV充電ステーション管理システムのバックエンド設計 — Simplicoによる開発
- Odooで受注生産商品の複雑な価格設定をどう扱う?