始める無料で始める

状態を持つ設計:RAG 検索ツールを構築する

前のレッスンでは、家電製品のマニュアルをベクトルベースのナレッジベースとして構築し、埋め込みを使って検索する方法を学びました。

次は、このような検索ロジックをラップするカスタムツールを構築しましょう。エージェントがこのツールを使って、家電製品に関する質問に答えられるようにします。

作成するツールは Tool 基底クラスのサブクラスとして実装し、家電製品の操作に関する質問という1つの入力を受け付けます。

すでに以下のものが利用できます。

  • 事前に構築済みの FAISS インデックスを含む vector_store という変数
  • 家電製品マニュアルの内容を埋め込み済みのドキュメントチャンク(検索可能な状態)

ここでの課題は、このナレッジベースをエージェントから利用できるようにするツールの構造とロジックを実装することです。

この演習はコースの一部です

Hugging Face smolagents で学ぶ AI エージェント

コースを見る

演習の手順

  • __init__() メソッドで vector_store パラメータを受け取るようにします。
  • forward() メソッドにパラメータとして query を追加します。
  • self.k を使って、類似検索から返すドキュメント数を指定します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

class ApplianceSearchTool(Tool):
    name = "appliance_manual_search"
    description = "Search appliance manuals for maintenance and usage information"
    inputs = {"query": {"type": "string", "description": "Question about appliance operation"}}
    output_type = "string"

    # Pass the vector store into the constructor
    def __init__(self, ____, k=3):
        super().__init__()
        self.vector_store = vector_store
        self.k = k

    # Accept the query string as input to the forward method
    def forward(self, ____):
        # Use self.k here to specify how many chunks to return
        docs = self.vector_store.similarity_search(query, k=____)
        return "\n\n".join(doc.page_content for doc in docs) or "No relevant manual sections found."
コードを編集して実行