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
- TAKシステムが洪水災害対応を変革する
- 写真から商品をおすすめ:AIで実現するスマートショッピング
- 高度なシミュレーションプログラムでアンテナ結合の課題に取り組む
- 未来の働き方:オープンソースが切り拓く労働省力化オートメーション
- 次なるフロンティア:富裕層のためのデジタル・プライベートクラブ
- コードで「よりよく考える」:数学的ショートカットで大規模ソフトウェアを理解する
- 今日のMacrohardをつくる:企業向けAIエージェント・プラットフォーム
- Aider × IDE連携で Vue.js 開発を一気にスマートに!
- ねぇ開発者さん!Codex CLI や Aider で AIにコーディング手伝ってもらおうぜ
- 正しい方法でAIと共にコーディングする
- 最適なLLMモデルの選び方: Instruct・MLX・8-bit・Embedding
- ローカル LLM モデルを日常業務で活用する方法
- EmbeddingモデルとLLMを組み合わせて、より賢いAIアプリを作る方法
- 連続素材欠陥検出用スマートビジョンシステム
- ラインスキャン + AI で作るリアルタイム欠陥検出システム(汎用設計ガイド)
- ソースコードを読む方法:Frappe Framework を例に
- Interface-Oriented Design:クリーンアーキテクチャの基礎
- アンチドローンシステムのすべて ─ アーキテクチャ・ハードウェア・ソフトウェア徹底解説
- ドローンにおけるRTOS vs Linux:最新設計・セキュリティ・Rust活用法
- なぜSpringはアノテーションだらけ? JavaとPython Web開発の本質的な違い