forked from agent-lab/smolagents
232 lines
No EOL
20 KiB
Markdown
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.")
|
|
``` |