ホームページ >バックエンド開発 >Python チュートリアル >LlamaIndex を使用した単純な RAG エージェントの構築

LlamaIndex を使用した単純な RAG エージェントの構築

DDD
DDDオリジナル
2024-10-01 06:38:02396ブラウズ

Building a simple RAG agent with LlamaIndex

LlamaIndex は、LLM を使用してコンテキスト拡張された生成 AI アプリケーションを構築するためのフレームワークです。

コンテキスト拡張とは何ですか?

コンテキスト拡張とは、追加の関連情報またはコンテキストを LLM モデルに提供し、特定のクエリに対する理解と応答を向上させる手法を指します。この拡張には通常、ドキュメントや埋め込みなどの外部データ ソースの取得、統合、またはモデルの入力への添付が含まれます。目標は、モデルに必要なコンテキストを提供することで、モデルがより適切で正確かつ微妙な答えを出せるようにすることで、より多くの情報を提供することです。検索拡張生成 (RAG) は、コンテキスト拡張の​​最も一般的な例です。

エージェントとは何ですか?

エージェントは、ツールを使用して調査、データ抽出、Web 検索などのタスクを実行する LLM を利用した自動化された推論および意思決定エンジンです。これらは、データに基づいた質問応答から、タスクを完了するために決定してアクションを実行できるようにするなどの単純なユースケースに使用できます。

この投稿では、LlamaIndex を使用して単純な RAG エージェントを構築します。

RAG エージェントの構築

依存関係のインストール

Python を使用して、LlamaIndex を使用する単純な RAG エージェントを構築します。まず、以下のように必要な依存関係をインストールしましょう:

pip install llama-index python-dotenv

LLM のセットアップとドキュメントのロード

OpenAI の gpt-4o-mini を LLM として使用します。 API キーを環境変数ファイルに置く必要があります。 LLamaIndex を使用したローカル LLM のセットアップの詳細については、こちらをご覧ください。

from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, Settings
from llama_index.llms.openai import OpenAI
from dotenv import load_dotenv

# Load environment variables (e.g., OPENAI_API_KEY)
load_dotenv()

# Configure OpenAI model
Settings.llm = OpenAI(model="gpt-4o-mini")

# Load documents from the local directory
documents = SimpleDirectoryReader("./data").load_data()

# Create an index from documents for querying
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()

  • まず、OpenAI を使用し、gpt-4o-mini モデルを指定して LLM モデルを構成します。ニーズに応じて、他の利用可能なモデル/LLM に切り替えることができます。
  • 次に、SimpleDirectoryReader を使用して、ローカルの ./data ディレクトリからドキュメントを読み込みます。このリーダーはディレクトリをスキャンし、ファイルを読み取り、クエリ用にデータを構造化します。
  • 次に、ロードされたドキュメントからベクター ストア インデックスを作成します。これにより、クエリの実行中に効率的なベクター ベースの検索を実行できるようになります。

エージェント用のカスタム関数の作成

次に、エージェントがタスクを実行するために使用できる基本的な関数をいくつか定義しましょう。

def multiply(a: float, b: float) -> float:
    """Multiply two numbers and returns the product"""
    return a * b

def add(a: float, b: float) -> float:
    """Add two numbers and returns the sum"""
    return a + b

エージェント用のツールを作成する

次に、前に定義した関数とクエリ エンジンから、エージェントがタスクを実行するために使用するツールを作成します。これらのツールは、エージェントがさまざまな種類のクエリを処理するときに利用できるユーティリティとして機能します。

from llama_index.core.tools import FunctionTool, QueryEngineTool

# Wrap functions as tools
add_tool = FunctionTool.from_defaults(fn=add)
multiply_tool = FunctionTool.from_defaults(fn=multiply)

# Create a query engine tool for document retrieval
space_facts_tool = QueryEngineTool.from_defaults(
    query_engine,
    name="space_facts_tool",
    description="A RAG engine with information about fun space facts."
)

  • FunctionTool は加算関数と乗算関数をラップし、ツールとして公開します。エージェントはこれらのツールにアクセスして計算を実行できるようになりました。
  • QueryEngineTool は query_engine をラップして、エージェントがクエリを実行し、ベクトル ストアから情報を取得できるようにします。このツールが宇宙の事実に関する情報を取得できることを示す説明を付けて、space_facts_tool という名前を付けました。あらゆるものを取り込み、取り込んだデータに応じてツールをカスタマイズできます。

エージェントの作成

ReActAgent を使用してエージェントを作成します。エージェントは、ツールをいつ使用するか、クエリにどのように応答するかを決定する責任を負います。

from llama_index.core.agent import ReActAgent

# Create the agent with the tools
agent = ReActAgent.from_tools(
    [multiply_tool, add_tool, space_facts_tool], verbose=True
)

このエージェントは ReAct フレームワークを使用します。これにより、論理的な順序で指定されたツールを利用することで、モデルが推論し、行動することが可能になります。エージェントは作成したツールを使用して初期化され、verbose=True フラグにより​​、エージェントがタスクをどのように判断して実行するかに関する詳細情報が出力されます。

エージェントの実行

最後に、エージェントを対話型ループで実行して、終了するまでユーザーのクエリを処理しましょう。

while True:
    query = input("Query: ")

    if query == "/bye":
        exit()

    response = agent.chat(query)
    print(response)
    print("-" * 10)

RAG エージェントはどのように機能しますか?

  • 取り込んだドキュメントに関連する質問をすると、space_facts_tool、つまりベクター ストア ツールは、query_engine を使用して関連情報を取得します。
  • 計算を要求すると、エージェントは add_tool または multiply_tool を使用してそれらのタスクを実行します。
  • エージェントは、ユーザーのクエリに基づいてどのツールを使用するかをその場で決定し、出力を提供します。

以上がLlamaIndex を使用した単純な RAG エージェントの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。