ここでは、高度なツールの使い方を見ていこう。
エージェントを構築するのが初めての方は、まず、以下のページをお読みください。 エージェント紹介 そして smolagentガイドツアー.
ツールとは何か? #
ツールとは、LLMがエージェント・システムで使用できる機能のことである。
しかし、それを使うためには、LLMにAPIを与える必要がある:名前、ツールの説明、入力タイプと説明、出力タイプ。
だから機能だけではありえない。クラスであるべきだ。
つまり、このツールの核心は、LLMがその使い方を理解するのに役立つメタデータで関数をラップするクラスなのだ。
こんな感じだ:
コピー
from smolagents import Tool class HFModelDownloadsTool(Tool): name = "model_download_counter" 説明 = "" これはHugging Face Hub上で与えられたタスクの最もダウンロードされたモデルを返すツールです。 チェックポイントの名前を返します。""" inputs = { "task":{ "type":"string": "文字列"、 "description":「タスクのカテゴリ(テキスト分類、深さ推定など)、 } } output_type = "string" def forward(self, task: str): from huggingface_hub import list_models model = next(iter(list_models(filter=task, sort="downloads", direction=-1))) return model.id model_downloads_tool = HFModelDownloadsTool()
カスタムツールのサブクラス 工具 を定義し、有用なメソッドを継承します。子クラスも定義する:
- 属性
名称
これはツール自体の名前に対応する。名前は通常、そのツールが何をするのかを説明する。このコードでは、タスクのダウンロード数が最も多いモデルを返すので、それをモデルダウンロードカウンター
. - 属性
記述
は、エージェントのシステムプロンプトに入力するために使用されます。 - アン
インプット
属性を持つ辞書である。「タイプ
そして"説明"
.これは、Pythonインタプリタが入力に対して適切な選択をするための情報を含んでいます。 - アン
出力タイプ
属性で出力タイプを指定する。出力タイプはインプット
そして出力タイプ
でなければならない。 ピダンティック形式このどちらかである:~authorized_types()
. - A
前方
メソッドに実行される推論コードを格納する。
そして、それがエージェントに使われるために必要なすべてなのだ!
道具を作るには別の方法がある。それは ガイドツアーを使ったツールを実装した。 ツール
デコレーターその ツール() デコレーターは、シンプルなツールを定義するのにお勧めの方法ですが、より明確にするためにクラス内でいくつかのメソッドを使ったり、追加のクラス属性を使ったりと、これ以上のものが必要になることもあります。
この場合、以下のサブクラスを作成することでツールを構築できます。 工具 上記の通りである。
ツールをハブに共有する #
カスタムツールをハブに共有するには、次のように呼び出します。 push_to_hub() を使用してください。Hub上にリポジトリが作成され、読み取り権限のあるトークンが使用されていることを確認してください。
コピー
model_downloads_tool.push_to_hub("{your_username}/hf-model-downloads", token="")
プッシュ・トゥ・ハブが機能するためには、ツールがいくつかのルールを尊重する必要がある:
- すべてのメソッドは自己完結しており、例えば、引数から得られる変数を使用する。
- 上記の通りだ、 すべてのインポートは、ツールの関数内で直接定義されるべきである。を呼び出そうとするとエラーが発生する。 セーブ または push_to_hub() をカスタムツールで使用する。
- をサブクラス化した場合
__init__
メソッドに渡す引数は自己
.これは、特定のツール・インスタンスの初期化時に設定された引数を追跡するのが難しく、ハブに適切に共有できないからだ。そしてとにかく、特定のクラスを作るというアイデアは、ハードコードする必要があるものにはすでにクラス属性を設定できるということだ(単にyour_variable=(...)
の直下にある。class YourTool(Tool):
行)。もちろん、クラス属性を作成することは可能だ。self.your_variable
.
ツールがハブにプッシュされると、それを視覚化することができる。 ここに は モデル・ダウンロード・ツール
私がプッシュした。素晴らしいグラディオのインターフェイスを持っている。
ツールのファイルに潜ってみると、ツールのロジックはすべて ツール.py.そこで、他の人が共有するツールを検査することができる。
それから ロードツール() または フロムハブ() に渡す。 用具
パラメータを渡す必要があります。ツールの実行はカスタムコードの実行を意味するので、リポジトリが信頼できることを確認する必要があります。 trust_remote_code=真
をクリックして、ハブからツールをロードします。
コピー
from smolagents import load_tool, CodeAgent model_download_tool = load_tool( "{your_username}/hf-model-downloads"、 trust_remote_code=True )
空間をツールとして取り込む #
を使用して、ハブからツールとしてのスペースを直接インポートすることができます。 ツール.from_space() メソッドを使用する!
必要なのは、ハブ上のスペースのIDと名前、そしてそのツールが何をするのかを理解するのに役立つ説明だけだ。ボンネットの下では グラディオ・クライアント
ライブラリを使用してスペースを呼び出す。
例えば FLUX.1-dev ハブのスペースを使い、画像を生成する。
コピー
image_generation_tool = Tool.from_space( "black-forest-labs/FLUX.1-schnell"、 name="image_generator"、 説明="プロンプトから画像を生成" ) image_generation_tool("A sunny beach")
そして、ほら、これがあなたの画像です!🏖️

そうすれば、他のツールと同じようにこのツールを使うことができる。例えば、プロンプトを改良してみよう 宇宙服を着たウサギ
そしてその画像を生成する。
コピー
from smolagents import CodeAgent, HfApiModel model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct") agent = CodeAgent(tools=[image_generation_tool], model=model) agent.run( "このプロンプトを改善し、その画像を生成する。", prompt='宇宙服を着たウサギ' )
コピー
=== 諜報員の考え: improved_promptは、"明るいオレンジ色の夕焼けの下、月の表面で、明るいブルーの宇宙服を着たウサギ、背景には地球が見える "である。 プロンプトを改良したので、画像生成ツールを使って、このプロンプトに基づいた画像を生成することができる。 >>> エージェントは以下のコードを実行している: image = image_generator(prompt="bright blue space suit wearing rabbit, under the surface of the moon, bright orange sunset, with the Earth visible in the background") final_answer(image)

なんてクールなんだ🤩
LangChainツールを使う #
私たちはLangchainが大好きで、非常に魅力的なツール群を持っていると思っています。LangChainからツールをインポートするには from_langchain()
メソッドを使用する。
ここでは、LangChainウェブ検索ツールを使ってイントロの検索結果を再現する方法を紹介します。このツールには pip install langchain google-search-results -q
を正しく動作させる。
コピー
from langchain.agents import load_tools search_tool = Tool.from_langchain(load_tools(["serpapi"])[0]) agent = CodeAgent(tools=[search_tool], model=model) agent.run("Attention is All You Need? "で提案されたアーキテクチャのエンコーダと比較して、BERTベースエンコーダにはいくつのブロック(レイヤとも表記される)がありますか?")
エージェントのツールボックスを管理する #
エージェントのツールボックスは、次の属性でツールを追加または交換することで管理できます。 エージェントツール
標準的な辞書だからだ。
を追加しよう。 モデル・ダウンロード・ツール
を、デフォルトのツールボックスのみで初期化された既存のエージェントに追加します。
コピー
from smolagents import HfApiModel model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct") agent = CodeAgent(tools=[], model=model, add_base_tools=True) agent.tools[model_download_tool.name] = model_download_tool
これで新しいツールを活用できる:
コピー
agent.run( "Hugging Face Hubの'text-to-video'タスクで最もダウンロード数が多いモデルの名前を教えてください。但し、文字は逆にしてください。" )
エージェントにあまり多くのツールを追加しないように注意してください:これは弱いLLMエンジンを圧倒する可能性があります。
ツールのコレクションを使う #
ToolCollection オブジェクトを使用し、使用したいコレクションのスラッグを指定することで、ツールコレクションを活用することができます。そして、エージェントを初期化するために、それらをリストとして渡し、使用を開始します!
コピー
from smolagents import ToolCollection, CodeAgent image_tool_collection = ToolCollection( collection_slug="huggingface-tools/diffusion-tools-6630bb19a942c2306a2cdb6f", token="" ) agent = CodeAgent(tools=[*image_tool_collection.tools], model=model, add_base_tools=True) agent.run("川と湖の絵を描いてください。")
起動を速くするため、ツールはエージェントから呼び出された場合のみロードされる。