smolagents は Hugging Face が公開した AI エージェント・フレークワークで、数行のコードで強力なエージェントを実行できるライブラリです。最初にその README を訳しておきます。
smolagents : Hugging Face AI エージェント・フレームワーク
作成 : クラスキャット・セールスインフォメーション
作成日時 : 08/19/2025
バージョン : v1.21.1
* 本記事は github.com/huggingface/smolagents の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
◆ お問合せ : 下記までお願いします。
- クラスキャット セールス・インフォメーション
- sales-info@classcat.com
- ClassCatJP
smolagents : Hugging Face AI エージェント・フレームワーク
smolagents は数行のコードで強力なエージェントを実行できるライブラリです。それは以下を提供します :
✨ 単純さ (Simplicity) : エージェント用のロジックは ~1,000 行のコードに収まります (agents.py 参照)。抽象化は raw コード上、最小限の形に抑えました!
🧑💻 コードエージェントの First-class サポート : CodeAgent は (「エージェントをコードを記述するために使用する」のではなく、) アクションをコードで記述します。セキュアにするため、E2B, Docker や Pyodide+Deno WebAssembly サンドボックスを通してサンドボックス環境での実行をサポートします。
🤗 ハブ統合 : 最も効率的なエージェントのインスタントな共有のために、you can share/pull tools or agents to/from the Hub !
🌐 モデル非依存 : smolagents はあらゆる LLM をサポートします。それは、ローカルの transformers や ollama モデル、Hub 上の多くのプロバイダー の一つ、あるいは LiteLLM 統合経由で OpenAI, Anthropic やその他多くからの任意のモデルで構いません。
👁️ モダリティ非依存 : エージェントはテキスト、ビジョン、動画、更に音声入力もサポートします!Cf this tutorial for vision.
🛠️ ツール非依存 : 任意の MCP サーバ や LangChain のツールを使用でき、Hub スペース をツールとして使用することさえできます。
Full documentation can be found here.
Note : Check the our launch blog post to learn more about smolagents!
Quick デモ
まず、パッケージをツールのデフォルトセットとともにインストールします :
pip install smolagents[toolkit]
次にエージェントを定義し、それに必要なツールを与えて実行します!
from smolagents import CodeAgent, WebSearchTool, InferenceClientModel
model = InferenceClientModel()
agent = CodeAgent(tools=[WebSearchTool()], model=model, stream_outputs=True)
agent.run("How many seconds would it take for a leopard at full speed to run through Pont des Arts?")
さらにエージェントを Space レポジトリとして、Hub に共有することもできます :
agent.push_to_hub("m-ric/my_agent")
# agent.from_hub("m-ric/my_agent") to load an agent from Hub
このライブラリは LLM 非依存です : 上記の例を任意の推論プロバイダーに切り替えることができるでしょう。
InferenceClientModel、HF でサポートされるすべての 推論プロバイダー へのゲートウェイ
from smolagents import InferenceClientModel
model = InferenceClientModel(
model_id="deepseek-ai/DeepSeek-R1",
provider="together",
)
100+ LLM にアクセス可能な LiteLLM
from smolagents import LiteLLMModel
model = LiteLLMModel(
model_id="anthropic/claude-3-5-sonnet-latest",
temperature=0.2,
api_key=os.environ["ANTHROPIC_API_KEY"]
)
OpenAI-互換サーバ : Together AI
import os
from smolagents import OpenAIServerModel
model = OpenAIServerModel(
model_id="deepseek-ai/DeepSeek-R1",
api_base="https://api.together.xyz/v1/", # Leave this blank to query OpenAI servers.
api_key=os.environ["TOGETHER_API_KEY"], # Switch to the API key for the server you're targeting.
)
OpenAI-互換サーバ : OpenRouter
import os
from smolagents import OpenAIServerModel
model = OpenAIServerModel(
model_id="openai/gpt-4o",
api_base="https://openrouter.ai/api/v1", # Leave this blank to query OpenAI servers.
api_key=os.environ["OPENROUTER_API_KEY"], # Switch to the API key for the server you're targeting.
)
ローカル `transformers` モデル
from smolagents import TransformersModel
model = TransformersModel(
model_id="Qwen/Qwen2.5-Coder-32B-Instruct",
max_new_tokens=4096,
device_map="auto"
)
How do Code agents work?
CodeAgent は従来の ReAct エージェントのように殆ど動作します – 例外は、LLM エンジンがそのアクションを Python コードスニペットとして記述することです。
アクションは Python コードスニペットになりました。そのため、ツール呼び出しは Python 関数呼び出しとして実行されます。例えば、エージェントが一つのアクションで幾つかの web サイトを検索する方法は以下です :
requests_to_search = ["gulf of mexico america", "greenland denmark", "tariffs"]
for request in requests_to_search:
print(f"Here are the search results for {request}:", web_search(request))
このライブラリはどれほど小さい (smol) でしょう?
抽象化を厳密な最小限に抑えるように努力しました : agents.py のメインコードは 1,000 行未満のコードです。それでも、幾つかのタイプのエージェントを実装しています : CodeAgent はそのアクションを Python コード・スニペットとして記述し、より古典的な ToolCallingAgent は組み込みのツール呼び出しメソッドを利用します。マルチエージェント階層、ツールコレクションからのインポート、リモートコード実行、ビジョンモデル … も備えています。
ところで、何故フレームワークを使うのでしょう?それは、この作業の大部分が自明ではないからです。例えば、コードエージェントはシステムプロンプト、パーサー、実行全体を通して、一貫したコード形式を維持する必要があります。そしてフレームワークはこの複雑さを処理します。しかしもちろん、ソースコードをハックして必要な部分だけを使用し、他の部分すべては除外することを勧めます。
以上