ホームページ > バックエンド開発 > Python チュートリアル > Ollama と LangChain を使用してローカル RAG エージェントを作成する方法

Ollama と LangChain を使用してローカル RAG エージェントを作成する方法

王林
リリース: 2024-08-14 10:31:13
オリジナル
1055 人が閲覧しました

How to Create a Local RAG Agent with Ollama and LangChain

RAGとは何ですか?

RAG は Retrieval-Augmented Generation の略で、大規模言語モデル (LLM) にドキュメントの形式で特定の関連コンテキストを提供することで、そのパフォーマンスを向上させるように設計された強力な技術です。事前トレーニングされた知識に純粋に基づいて応答を生成する従来の LLM とは異なり、RAG を使用すると、リアルタイム データまたはドメイン固有の情報を取得して利用することで、モデルの出力を望ましい結果にさらに近づけることができます。

RAG と微調整

RAG と微調整はどちらも LLM のパフォーマンスを向上させることを目的としていますが、多くの場合、RAG の方が効率的でリソースに優しい方法です。微調整には、特殊なデータセットでモデルを再トレーニングすることが含まれますが、これには多大な計算リソース、時間、専門知識が必要です。一方、RAG は関連情報を動的に取得して生成プロセスに組み込むため、大規模な再トレーニングを行わずに、より柔軟かつコスト効率よく新しいタスクに適応できます。

RAG エージェントの構築

要件のインストール

オラマをインストールする

Ollama は、LLaMA をローカルで実行するために必要なバックエンド インフラストラクチャを提供します。まず、Ollama の Web サイトにアクセスし、アプリケーションをダウンロードします。手順に従ってローカル マシンにセットアップします。

LangChain のインストール要件

LangChain は、さまざまな LLM およびベクター データベースと連携するように設計された Python フレームワークであり、RAG エージェントの構築に最適です。次のコマンドを実行して、LangChain とその依存関係をインストールします:

pip install langchain
ログイン後にコピー

RAG エージェントのコーディング

API関数を作成する

まず、ローカル LLaMA インスタンスと対話する関数が必要です。設定方法は次のとおりです:

from requests import post as rpost

def call_llama(prompt):
    headers = {"Content-Type": "application/json"}
    payload = {
        "model": "llama3.1",
        "prompt": prompt,
        "stream": False,
    }

    response = rpost(
        "http://localhost:11434/api/generate",
        headers=headers,
        json=payload
    )
    return response.json()["response"]
ログイン後にコピー

LangChain LLM を作成する

次に、この関数を LangChain 内のカスタム LLM クラスに統合します。

from langchain_core.language_models.llms import LLM

class LLaMa(LLM):
    def _call(self, prompt, **kwargs):
        return call_llama(prompt)

    @property
    def _llm_type(self):
        return "llama-3.1-8b"
ログイン後にコピー

RAG エージェントの統合

レトリバーのセットアップ

取得者は、ユーザーのクエリに基づいて関連ドキュメントを取得する責任があります。 FAISS を使用してベクター ストレージと HuggingFace の事前トレーニングされた埋め込みを使用してセットアップする方法は次のとおりです:

from langchain.vectorstores import FAISS
from langchain_huggingface import HuggingFaceEmbeddings

documents = [
    {"content": "What is your return policy? ..."},
    {"content": "How long does shipping take? ..."},
    # Add more documents as needed
]

texts = [doc["content"] for doc in documents]

retriever = FAISS.from_texts(
    texts,
    HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
).as_retriever(k=5)
ログイン後にコピー

プロンプトテンプレートを作成する

RAG エージェントが取得したドキュメントに基づいて応答を生成するために使用するプロンプト テンプレートを定義します。

from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder

faq_template = """
You are a chat agent for my E-Commerce Company. As a chat agent, it is your duty to help the human with their inquiry and make them a happy customer.

Help them, using the following context:
<context>
{context}
</context>
"""

faq_prompt = ChatPromptTemplate.from_messages([
    ("system", faq_template),
    MessagesPlaceholder("messages")
])
ログイン後にコピー

ドキュメントおよび取得チェーンの作成

ドキュメントの取得と LLaMA 生成を結合したチェーンに結合します:

from langchain.chains.combine_documents import create_stuff_documents_chain

document_chain = create_stuff_documents_chain(LLaMa(), faq_prompt)

def parse_retriever_input(params):
    return params["messages"][-1].content

retrieval_chain = RunnablePassthrough.assign(
    context=parse_retriever_input | retriever
).assign(answer=document_chain)
ログイン後にコピー

Ollama サーバーを起動する

RAG エージェントを実行する前に、Ollama サーバーが稼働していることを確認してください。次のコマンドでサーバーを起動します:

ollama serve
ログイン後にコピー

RAG エージェントにプロンプ​​トを表示する

これで、クエリを送信して RAG エージェントをテストできます。

from langchain.schema import HumanMessage

response = retrieval_chain.invoke({
    "messages": [
        HumanMessage("I received a damaged item. I want my money back.")
    ]
})

print(response)
ログイン後にコピー

応答:
「破損した商品をお受け取りになったとのこと、大変申し訳ございません。当社のポリシーによれば、破損した商品をお受け取りになった場合は、破損箇所の写真を添えて直ちに当社のカスタマーサービスチームにご連絡ください。交換または返金の手配をさせていただきます。」返金をお手伝いさせていただきたいのですが、注文番号や破損した商品の詳細などの情報が必要となりますので、ご提供いただけますか?」


これらの手順に従うことで、リアルタイム コンテキストで LLM のパフォーマンスを強化できる、完全に機能するローカル RAG エージェントを作成できます。このセットアップはさまざまなドメインやタスクに適応できるため、コンテキストを意識した生成が重要なアプリケーションにとって多用途のソリューションとなります。

以上がOllama と LangChain を使用してローカル RAG エージェントを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート