20 KiB
Tools
рдпрд╣рд╛рдБ, рд╣рдо рдПрдбрд╡рд╛рдВрд╕реНрдб tools рдЙрдкрдпреЛрдЧ рджреЗрдЦреЗрдВрдЧреЗред
Tip
рдпрджрд┐ рдЖрдк рдПрдЬреЗрдВрдЯреНрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдЬреЗрдВрдЯреНрд╕ рдХрд╛ рдкрд░рд┐рдЪрдп рдФрд░ smolagents рдХреА рдЧрд╛рдЗрдбреЗрдб рдЯреВрд░ рдкрдврд╝рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
- Tools
- рдЯреВрд▓ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?
- рдЕрдкрдирд╛ рдЯреВрд▓ рд╣рдм рдкрд░ рд╢реЗрдпрд░ рдХрд░реЗрдВ
- рд╕реНрдкреЗрд╕ рдХреЛ рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ
- LangChain рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
- рдЕрдкрдиреЗ рдПрдЬреЗрдВрдЯ рдХреЗ рдЯреВрд▓рдмреЙрдХреНрд╕ рдХреЛ рдореИрдиреЗрдЬ рдХрд░реЗрдВ
- рдЯреВрд▓реНрд╕ рдХрд╛ рдХрд▓реЗрдХреНрд╢рди рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЯреВрд▓ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ
рдЯреВрд▓ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ LLM рдПрдЬреЗрдВрдЯрд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, LLM рдХреЛ рдПрдХ API рджреА рдЬрд╛рдПрдЧреА: рдирд╛рдо, рдЯреВрд▓ рд╡рд┐рд╡рд░рдг, рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд┐рд╡рд░рдг, рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░ред
рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдпрд╣ рдПрдХ рдХреНрд▓рд╛рд╕ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ, рдЯреВрд▓ рдПрдХ рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд░реИрдк рдХрд░рддреА рд╣реИ рдЬреЛ LLM рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
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 рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рд╡реЗ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:["string", "boolean","integer", "number", "image", "audio", "array", "object", "any", "null"]ред - рдПрдХ
forwardрдореЗрдердб рдЬрд┐рд╕рдореЗрдВ рдПрдХреНрдЬреАрдХреНрдпреВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИред
рдПрдЬреЗрдВрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рд╣реА рдЪрд╛рд╣рд┐рдП!
рдЯреВрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред guided_tour рдореЗрдВ, рд╣рдордиреЗ @tool рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЯреВрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред [tool] рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕рд░рд▓ рдЯреВрд▓реНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХрдИ рдореЗрдердбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд▓рд╛рд╕ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдКрдкрд░ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ [Tool] рдХреЛ рд╕рдмрдХреНрд▓рд╛рд╕ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдЯреВрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдкрдирд╛ рдЯреВрд▓ рд╣рдм рдкрд░ рд╢реЗрдпрд░ рдХрд░реЗрдВ
рдЖрдк рдЯреВрд▓ рдкрд░ [~Tool.push_to_hub] рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдХрд╕реНрдЯрдо рдЯреВрд▓ рд╣рдм рдкрд░ рд╢реЗрдпрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рд╣рдм рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдИ рд╣реИ рдФрд░ рдЖрдк рд░реАрдб рдПрдХреНрд╕реЗрд╕ рд╡рд╛рд▓рд╛ рдЯреЛрдХрди рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
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рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рднреА рдПрдХ рдХреНрд▓рд╛рд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХрд╛ рдЯреВрд▓ рд╣рдм рдкрд░ рдкреБрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ model_downloads_tool рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкреБрд╢ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЧреНрд░реЗрдбрд┐рдпреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред
рдЯреВрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рдкрд░, рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рд░реА рдЯреВрд▓ рд▓реЙрдЬрд┐рдХ tool.py рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реИред рдпрд╣реАрдВ рдЖрдк рдХрд┐рд╕реА рдФрд░ рджреНрд╡рд╛рд░рд╛ рд╢реЗрдпрд░ рдХрд┐рдП рдЧрдП рдЯреВрд▓ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд░ рдЖрдк рдЯреВрд▓ рдХреЛ [load_tool] рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ [~Tool.from_hub] рдХреЗ рд╕рд╛рде рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдПрдЬреЗрдВрдЯ рдореЗрдВ tools рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рдЯреВрд▓реНрд╕ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдорддрд▓рдм рдХрд╕реНрдЯрдо рдХреЛрдб рдЪрд▓рд╛рдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╣рдм рд╕реЗ рдЯреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП trust_remote_code=True рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░рдЦрддреЗ рд╣реИрдВред
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 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓рд┐рдП рд╣рдм рд╕реЗ FLUX.1-dev рд╕реНрдкреЗрд╕ рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред
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")
рдФрд░ рджреЗрдЦреЛ, рдпрд╣ рддреБрдореНрд╣рд╛рд░реА рдЫрд╡рд┐ рд╣реИ! ЁЯПЦя╕П
рдлрд┐рд░ рдЖрдк рдЗрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рдЯреВрд▓ рдХреА рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ a rabbit wearing a space suit рдХреЛ рд╕реБрдзрд╛рд░реЗрдВ рдФрд░ рдЗрд╕рдХреА рдПрдХ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдпрд╣ рднреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдЬреЗрдВрдЯ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд░реНрдЧреНрдпреВрдореЗрдВрдЯреНрд╕ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
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'}
)
=== 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)
рдпрд╣ рдХрд┐рддрдирд╛ рдХреВрд▓ рд╣реИ? ЁЯдй
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("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 рдЬреЛрдбрд╝реЗрдВред
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
рдЕрдм рд╣рдо рдирдП рдЯреВрд▓ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред
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 рд╕рд░реНрд╡рд░ рдЯреВрд▓реНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рд╣рдм рдореЗрдВ рдХрд▓реЗрдХреНрд╢рди рд╕реЗ рдЯреВрд▓ рдХрд▓реЗрдХреНрд╢рди
рдЖрдк рдЙрд╕ рдХрд▓реЗрдХреНрд╢рди рдХреЗ рд╕реНрд▓рдЧ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдПрдЬреЗрдВрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ!
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 рдпрд╛ smithery.ai рдкрд░ рдЙрдкрд▓рдмреНрдз рд╕реИрдХрдбрд╝реЛрдВ MCP рд╕рд░реНрд╡рд░реНрд╕ рд╕реЗ рдЯреВрд▓реНрд╕ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВред
MCP рд╕рд░реНрд╡рд░реНрд╕ рдЯреВрд▓реНрд╕ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ ToolCollection рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
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.")