RAG は Retrieval-Augmented Generation の略で、大規模言語モデル (LLM) にドキュメントの形式で特定の関連コンテキストを提供することで、そのパフォーマンスを向上させるように設計された強力な技術です。事前にトレーニングされた知識に純粋に基づいて応答を生成する従来の LLM とは異なり、RAG を使用すると、リアルタイム データまたはドメイン固有の情報を取得して利用することで、モデルの出力を望ましい結果にさらに近づけることができます。
RAG と微調整はどちらも LLM のパフォーマンスを向上させることを目的としていますが、多くの場合、RAG の方が効率的でリソースに優しい方法です。微調整には、特殊なデータセットでモデルを再トレーニングすることが含まれますが、これには多大な計算リソース、時間、専門知識が必要です。一方、RAG は関連情報を動的に取得して生成プロセスに組み込むため、大規模な再トレーニングを行わずに、より柔軟かつコスト効率よく新しいタスクに適応できます。
Ollama は、LLaMA をローカルで実行するために必要なバックエンド インフラストラクチャを提供します。まず、Ollama の Web サイトにアクセスし、アプリケーションをダウンロードします。手順に従ってローカル マシンにセットアップします。
LangChain は、さまざまな LLM およびベクター データベースと連携するように設計された Python フレームワークであり、RAG エージェントの構築に最適です。次のコマンドを実行して、LangChain とその依存関係をインストールします:
pip install langchain
まず、ローカルの 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 クラスに統合します。
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"
取得者は、ユーザーのクエリに基づいて関連ドキュメントを取得する責任があります。ベクター ストレージと HuggingFace の事前トレーニング済み埋め込みに FAISS を使用してセットアップする方法は次のとおりです:
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} """ 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)
RAG エージェントを実行する前に、Ollama サーバーが稼働していることを確認してください。次のコマンドでサーバーを起動します:
ollama serve
これで、クエリを送信して 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 エージェントを作成できます。このセットアップはさまざまなドメインやタスクに適応できるため、コンテキストを意識した生成が重要なアプリケーションにとって多用途のソリューションになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3