状態を持つ設計: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."