LangChain + Ollama で RAGチャットボットを作る方法

この記事では、LangChainOllama を使って RAG (Retrieval-Augmented Generation) チャットボットを作成する方法をステップバイステップで解説します。さらに、ドキュメントをエージェントに追加する方法 も紹介します!

それでは始めましょう!


RAGチャットボットとは?

RAG とは Retrieval-Augmented Generation の略です。チャットボットが単に内部知識から回答するのではなく、外部データから情報を検索し、その情報を使ってより正確でインテリジェントな回答を生成する仕組みです。

このアプローチの利点は:

  • より正確な回答が可能
  • 常に最新情報に対応できる
  • 特定ドメインに特化した質問にも強い

使用するツール

  • LangChain:LLM、リトリーバル、ツール、エージェントを組み合わせるためのフレームワーク
  • Ollama:ローカル環境でLLM(例:Mistral, Llama3)を実行
  • FAISS:高速なローカルベクトル検索エンジン

ステップ1:セットアップ

まず必要なライブラリをインストールします:

pip install langchain ollama faiss-cpu

また、Ollama をインストールして実行しておきましょう:


ステップ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

Articles

Our Products


Related Posts

Articles

Our Products


Get in Touch with us

Speak to Us or Whatsapp(+66) 83001 0222

Chat with Us on LINEiiitum1984

Our HeadquartersChanthaburi, Thailand