smolagents-audit/docs/source/hi/tutorials/tools.md

232 lines
No EOL
20 KiB
Markdown

# Tools
[[open-in-colab]]
рдпрд╣рд╛рдБ, рд╣рдо рдПрдбрд╡рд╛рдВрд╕реНрдб tools рдЙрдкрдпреЛрдЧ рджреЗрдЦреЗрдВрдЧреЗред
> [!TIP]
> рдпрджрд┐ рдЖрдк рдПрдЬреЗрдВрдЯреНрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ [рдПрдЬреЗрдВрдЯреНрд╕ рдХрд╛ рдкрд░рд┐рдЪрдп](../conceptual_guides/intro_agents) рдФрд░ [smolagents рдХреА рдЧрд╛рдЗрдбреЗрдб рдЯреВрд░](../guided_tour) рдкрдврд╝рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
- [Tools](#tools)
- [рдЯреВрд▓ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?](#рдЯреВрд▓-рдХреНрдпрд╛-рд╣реИ-рдФрд░-рдЗрд╕реЗ-рдХреИрд╕реЗ-рдмрдирд╛рдПрдВ)
- [рдЕрдкрдирд╛ рдЯреВрд▓ рд╣рдм рдкрд░ рд╢реЗрдпрд░ рдХрд░реЗрдВ](#рдЕрдкрдирд╛-рдЯреВрд▓-рд╣рдм-рдкрд░-рд╢реЗрдпрд░-рдХрд░реЗрдВ)
- [рд╕реНрдкреЗрд╕ рдХреЛ рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ](#рд╕реНрдкреЗрд╕-рдХреЛ-рдЯреВрд▓-рдХреЗ-рд░реВрдк-рдореЗрдВ-рдЗрдореНрдкреЛрд░реНрдЯ-рдХрд░реЗрдВ)
- [LangChain рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ](#LangChain-рдЯреВрд▓реНрд╕-рдХрд╛-рдЙрдкрдпреЛрдЧ-рдХрд░реЗрдВ)
- [рдЕрдкрдиреЗ рдПрдЬреЗрдВрдЯ рдХреЗ рдЯреВрд▓рдмреЙрдХреНрд╕ рдХреЛ рдореИрдиреЗрдЬ рдХрд░реЗрдВ](#рдЕрдкрдиреЗ-рдПрдЬреЗрдВрдЯ-рдХреЗ-рдЯреВрд▓рдмреЙрдХреНрд╕-рдХреЛ-рдореИрдиреЗрдЬ-рдХрд░реЗрдВ)
- [рдЯреВрд▓реНрд╕ рдХрд╛ рдХрд▓реЗрдХреНрд╢рди рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ](#рдЯреВрд▓реНрд╕-рдХрд╛-рдХрд▓реЗрдХреНрд╢рди-рдЙрдкрдпреЛрдЧ-рдХрд░реЗрдВ)
### рдЯреВрд▓ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ
рдЯреВрд▓ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ LLM рдПрдЬреЗрдВрдЯрд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, LLM рдХреЛ рдПрдХ API рджреА рдЬрд╛рдПрдЧреА: рдирд╛рдо, рдЯреВрд▓ рд╡рд┐рд╡рд░рдг, рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд┐рд╡рд░рдг, рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░ред
рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдпрд╣ рдПрдХ рдХреНрд▓рд╛рд╕ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ, рдЯреВрд▓ рдПрдХ рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд░реИрдк рдХрд░рддреА рд╣реИ рдЬреЛ LLM рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
```python
from smolagents import Tool
class HFModelDownloadsTool(Tool):
name = "model_download_counter"
description = """
This is a tool that returns the most downloaded model of a given task on the Hugging Face Hub.
It returns the name of the checkpoint."""
inputs = {
"task": {
"type": "string",
"description": "the task category (such as text-classification, depth-estimation, etc)",
}
}
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()
```
рдХрд╕реНрдЯрдо рдЯреВрд▓ `Tool` рдХреЛ рд╕рдмрдХреНрд▓рд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЙрдкрдпреЛрдЧреА рдореЗрдердбреНрд╕ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЪрд╛рдЗрд▓реНрдб рдХреНрд▓рд╛рд╕ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ:
- рдПрдХ `name` рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ, рдЬреЛ рдЯреВрд▓ рдХреЗ рдирд╛рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдирд╛рдо рдЖрдорддреМрд░ рдкрд░ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯреВрд▓ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХреЛрдб рдПрдХ рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЛ рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ `model_download_counter` рдирд╛рдо рджреЗрдВред
- рдПрдХ `description` рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдПрдЬреЗрдВрдЯ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЛ рдкреЙрдкреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдПрдХ `inputs` рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ, рдЬреЛ `"type"` рдФрд░ `"description"` keys рд╡рд╛рд▓рд╛ рдбрд┐рдХреНрд╢рдирд░реА рд╣реИред рдЗрд╕рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреЛ рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИред
- рдПрдХ `output_type` рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ, рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдЯрд╛рдЗрдк рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред `inputs` рдФрд░ `output_type` рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк [Pydantic formats](https://docs.pydantic.dev/latest/concepts/json_schema/#generating-json-schema) рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рд╡реЗ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: `["string", "boolean","integer", "number", "image", "audio", "array", "object", "any", "null"]`ред
- рдПрдХ `forward` рдореЗрдердб рдЬрд┐рд╕рдореЗрдВ рдПрдХреНрдЬреАрдХреНрдпреВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИред
рдПрдЬреЗрдВрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рд╣реА рдЪрд╛рд╣рд┐рдП!
рдЯреВрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред [guided_tour](../guided_tour) рдореЗрдВ, рд╣рдордиреЗ `@tool` рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЯреВрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред [`tool`] рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕рд░рд▓ рдЯреВрд▓реНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХрдИ рдореЗрдердбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд▓рд╛рд╕ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдКрдкрд░ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ [`Tool`] рдХреЛ рд╕рдмрдХреНрд▓рд╛рд╕ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдЯреВрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
### рдЕрдкрдирд╛ рдЯреВрд▓ рд╣рдм рдкрд░ рд╢реЗрдпрд░ рдХрд░реЗрдВ
рдЖрдк рдЯреВрд▓ рдкрд░ [`~Tool.push_to_hub`] рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдХрд╕реНрдЯрдо рдЯреВрд▓ рд╣рдм рдкрд░ рд╢реЗрдпрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рд╣рдм рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдИ рд╣реИ рдФрд░ рдЖрдк рд░реАрдб рдПрдХреНрд╕реЗрд╕ рд╡рд╛рд▓рд╛ рдЯреЛрдХрди рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
```python
model_downloads_tool.push_to_hub("{your_username}/hf-model-downloads", token="<YOUR_HUGGINGFACEHUB_API_TOKEN>")
```
рд╣рдм рдкрд░ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдЯреВрд▓ рдХреЛ рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- рд╕рднреА рдореЗрдердбреНрд╕ рд╕реЗрд▓реНрдл-рдХрдВрдЯреЗрдиреНрдб рд╣реИрдВ, рдпрд╛рдиреА рдЙрдирдХреЗ рдЖрд░реНрдЧреНрд╕ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдЙрдкрд░реЛрдХреНрдд рдмрд┐рдВрджреБ рдХреЗ рдЕрдиреБрд╕рд╛рд░, **рд╕рднреА рдЗрдореНрдкреЛрд░реНрдЯреНрд╕ рдХреЛ рд╕реАрдзреЗ рдЯреВрд▓ рдХреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рднреАрддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП**, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдЯреВрд▓ рдХреЗ рд╕рд╛рде [`~Tool.save`] рдпрд╛ [`~Tool.push_to_hub`] рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдПрд░рд░ рдорд┐рд▓реЗрдЧрд╛ред
- рдпрджрд┐ рдЖрдк `__init__` рд╡рд┐рдзрд┐ рдХреЛ рд╕рдмрдХреНрд▓рд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ `self` рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдиреНрдп рдЖрд░реНрдЧреНрдпреВрдореЗрдВрдЯ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреВрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЛ рдЖрд░реНрдЧреНрдпреВрдореЗрдВрдЯреНрд╕ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдм рдкрд░ рдареАрдХ рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдФрд░ рд╡реИрд╕реЗ рднреА, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╣рд╛рд░реНрдб-рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдмрд╕ `your_variable=(...)` рдХреЛ рд╕реАрдзреЗ `class YourTool(Tool):` рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╕реЗрдЯ рдХрд░реЗрдВ ). рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдЕрднреА рднреА `self.your_variable` рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рднреА рдПрдХ рдХреНрд▓рд╛рд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХрд╛ рдЯреВрд▓ рд╣рдм рдкрд░ рдкреБрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред [рдпрд╣рд╛рдБ](https://huggingface.co/spaces/m-ric/hf-model-downloads) `model_downloads_tool` рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкреБрд╢ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЧреНрд░реЗрдбрд┐рдпреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред
рдЯреВрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рдкрд░, рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рд░реА рдЯреВрд▓ рд▓реЙрдЬрд┐рдХ [tool.py](https://huggingface.co/spaces/m-ric/hf-model-downloads/blob/main/tool.py) рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реИред рдпрд╣реАрдВ рдЖрдк рдХрд┐рд╕реА рдФрд░ рджреНрд╡рд╛рд░рд╛ рд╢реЗрдпрд░ рдХрд┐рдП рдЧрдП рдЯреВрд▓ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд░ рдЖрдк рдЯреВрд▓ рдХреЛ [`load_tool`] рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ [`~Tool.from_hub`] рдХреЗ рд╕рд╛рде рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдПрдЬреЗрдВрдЯ рдореЗрдВ `tools` рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рдЯреВрд▓реНрд╕ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдорддрд▓рдм рдХрд╕реНрдЯрдо рдХреЛрдб рдЪрд▓рд╛рдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╣рдм рд╕реЗ рдЯреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `trust_remote_code=True` рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░рдЦрддреЗ рд╣реИрдВред
```python
from smolagents import load_tool, CodeAgent
model_download_tool = load_tool(
"{your_username}/hf-model-downloads",
trust_remote_code=True
)
```
### рд╕реНрдкреЗрд╕ рдХреЛ рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ
рдЖрдк [`Tool.from_space`] рдореЗрдердб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдм рд╕реЗ рдПрдХ рд╕реНрдкреЗрд╕ рдХреЛ рд╕реАрдзреЗ рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╣рдм рдкрд░ рд╕реНрдкреЗрд╕ рдХреА ID, рдЗрд╕рдХрд╛ рдирд╛рдо, рдФрд░ рдПрдХ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдПрдЬреЗрдВрдЯ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдЯреВрд▓ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдВрджрд░ рд╕реЗ, рдпрд╣ рд╕реНрдкреЗрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [`gradio-client`](https://pypi.org/project/gradio-client/) рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓рд┐рдП рд╣рдм рд╕реЗ [FLUX.1-dev](https://huggingface.co/black-forest-labs/FLUX.1-dev) рд╕реНрдкреЗрд╕ рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред
```python
image_generation_tool = Tool.from_space(
"black-forest-labs/FLUX.1-schnell",
name="image_generator",
description="Generate an image from a prompt"
)
image_generation_tool("A sunny beach")
```
рдФрд░ рджреЗрдЦреЛ, рдпрд╣ рддреБрдореНрд╣рд╛рд░реА рдЫрд╡рд┐ рд╣реИ! ЁЯПЦя╕П
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/sunny_beach.webp">
рдлрд┐рд░ рдЖрдк рдЗрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рдЯреВрд▓ рдХреА рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ `a rabbit wearing a space suit` рдХреЛ рд╕реБрдзрд╛рд░реЗрдВ рдФрд░ рдЗрд╕рдХреА рдПрдХ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдпрд╣ рднреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдЬреЗрдВрдЯ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд░реНрдЧреНрдпреВрдореЗрдВрдЯреНрд╕ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
```python
from smolagents import CodeAgent, InferenceClientModel
model = InferenceClientModel(model_id="Qwen/Qwen3-Next-80B-A3B-Thinking")
agent = CodeAgent(tools=[image_generation_tool], model=model)
agent.run(
"Improve this prompt, then generate an image of it.", additional_args={'user_prompt': 'A rabbit wearing a space suit'}
)
```
```text
=== Agent thoughts:
improved_prompt could be "A bright blue space suit wearing rabbit, on the surface of the moon, under a bright orange sunset, with the Earth visible in the background"
Now that I have improved the prompt, I can use the image generator tool to generate an image based on this prompt.
>>> Agent is executing the code below:
image = image_generator(prompt="A bright blue space suit wearing rabbit, on the surface of the moon, under a bright orange sunset, with the Earth visible in the background")
final_answer(image)
```
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/rabbit_spacesuit_flux.webp">
рдпрд╣ рдХрд┐рддрдирд╛ рдХреВрд▓ рд╣реИ? ЁЯдй
### LangChain рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╣рдо LangChain рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рдкрд╛рд╕ рдЯреВрд▓реНрд╕ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЖрдХрд░реНрд╖рдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред
LangChain рд╕реЗ рдПрдХ рдЯреВрд▓ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, `from_langchain()` рдореЗрдердб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк LangChain рд╡реЗрдм рд╕рд░реНрдЪ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдЪрдп рдХреЗ рд╕рд░реНрдЪ рд░рд┐рдЬрд▓реНрдЯ рдХреЛ рдХреИрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдЯреВрд▓ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `pip install langchain google-search-results -q` рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
```python
from langchain.agents import load_tools
search_tool = Tool.from_langchain(load_tools(["serpapi"])[0])
agent = CodeAgent(tools=[search_tool], model=model)
agent.run("How many more blocks (also denoted as layers) are in BERT base encoder compared to the encoder from the architecture proposed in Attention is All You Need?")
```
### рдЕрдкрдиреЗ рдПрдЬреЗрдВрдЯ рдХреЗ рдЯреВрд▓рдмреЙрдХреНрд╕ рдХреЛ рдореИрдиреЗрдЬ рдХрд░реЗрдВ
рдЖрдк рдПрдЬреЗрдВрдЯ рдХреЗ рдЯреВрд▓рдмреЙрдХреНрд╕ рдХреЛ `agent.tools` рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдореЗрдВ рдПрдХ рдЯреВрд▓ рдЬреЛрдбрд╝рдХрд░ рдпрд╛ рдмрджрд▓рдХрд░ рдореИрдиреЗрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдЯреИрдВрдбрд░реНрдб рдбрд┐рдХреНрд╢рдирд░реА рд╣реИред
рдЪрд▓рд┐рдП рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреВрд▓рдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдП рдЧрдП рдореМрдЬреВрджрд╛ рдПрдЬреЗрдВрдЯ рдореЗрдВ `model_download_tool` рдЬреЛрдбрд╝реЗрдВред
```python
from smolagents import InferenceClientModel
model = InferenceClientModel(model_id="Qwen/Qwen3-Next-80B-A3B-Thinking")
agent = CodeAgent(tools=[], model=model, add_base_tools=True)
agent.tools[model_download_tool.name] = model_download_tool
```
рдЕрдм рд╣рдо рдирдП рдЯреВрд▓ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред
```python
agent.run(
"Can you give me the name of the model that has the most downloads in the 'text-to-video' task on the Hugging Face Hub but reverse the letters?"
)
```
> [!TIP]
> рдПрдЬреЗрдВрдЯ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЯреВрд▓реНрд╕ рди рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ: рдпрд╣ рдХрдордЬреЛрд░ LLM рдЗрдВрдЬрди рдХреЛ рдУрд╡рд░рд╡реНрд╣реЗрд▓реНрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
### рдЯреВрд▓реНрд╕ рдХрд╛ рдХрд▓реЗрдХреНрд╢рди рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЖрдк `ToolCollection` рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреВрд▓ рдХрд▓реЗрдХреНрд╢рдВрд╕ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдпрд╛ рддреЛ рд╣рдм рд╕реЗ рдПрдХ рдХрд▓реЗрдХреНрд╢рди рдпрд╛ MCP рд╕рд░реНрд╡рд░ рдЯреВрд▓реНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
#### рд╣рдм рдореЗрдВ рдХрд▓реЗрдХреНрд╢рди рд╕реЗ рдЯреВрд▓ рдХрд▓реЗрдХреНрд╢рди
рдЖрдк рдЙрд╕ рдХрд▓реЗрдХреНрд╢рди рдХреЗ рд╕реНрд▓рдЧ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдПрдЬреЗрдВрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ!
```py
from smolagents import ToolCollection, CodeAgent
image_tool_collection = ToolCollection.from_hub(
collection_slug="huggingface-tools/diffusion-tools-6630bb19a942c2306a2cdb6f",
token="<YOUR_HUGGINGFACEHUB_API_TOKEN>"
)
agent = CodeAgent(tools=[*image_tool_collection.tools], model=model, add_base_tools=True)
agent.run("Please draw me a picture of rivers and lakes.")
```
рд╕реНрдЯрд╛рд░реНрдЯ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреВрд▓реНрд╕ рдХреЗрд╡рд▓ рддрднреА рд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдПрдЬреЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
#### рдХрд┐рд╕реА рднреА MCP рд╕рд░реНрд╡рд░ рд╕реЗ рдЯреВрд▓ рдХрд▓реЗрдХреНрд╢рди
[glama.ai](https://glama.ai/mcp/servers) рдпрд╛ [smithery.ai](https://smithery.ai/) рдкрд░ рдЙрдкрд▓рдмреНрдз рд╕реИрдХрдбрд╝реЛрдВ MCP рд╕рд░реНрд╡рд░реНрд╕ рд╕реЗ рдЯреВрд▓реНрд╕ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВред
MCP рд╕рд░реНрд╡рд░реНрд╕ рдЯреВрд▓реНрд╕ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ `ToolCollection` рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
```py
from smolagents import ToolCollection, CodeAgent
from mcp import StdioServerParameters
server_parameters = StdioServerParameters(
command="uv",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
with ToolCollection.from_mcp(server_parameters, trust_remote_code=True) as tool_collection:
agent = CodeAgent(tools=[*tool_collection.tools], add_base_tools=True)
agent.run("Please find a remedy for hangover.")
```