smolagents-audit/docs/source/hi/examples/multiagents.md

183 lines
11 KiB
Markdown

# рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░реЗрдВ ЁЯдЦЁЯдЭЁЯдЦ
[[open-in-colab]]
рдЗрд╕ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рд╣рдо рдПрдХ **рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдирд╛рдПрдВрдЧреЗ: рдПрдХ рдПрдЬреЗрдВрдЯрд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдПрдЬреЗрдВрдЯ рд╡реЗрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ!**
рдпрд╣ рдПрдХ рд╕рд░рд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдЧреА, рдЬреЛ рдкреНрд░рдмрдВрдзрд┐рдд рд╡реЗрдм рдЦреЛрдЬ рдПрдЬреЗрдВрдЯ рдХреЛ рд░реИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `ManagedAgent` рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
```
+----------------+
| Manager agent |
+----------------+
|
_______________|______________
| |
Code interpreter +--------------------------------+
tool | Managed agent |
| +------------------+ |
| | Web Search agent | |
| +------------------+ |
| | | |
| Web Search tool | |
| Visit webpage tool |
+--------------------------------+
```
рдЖрдЗрдП рдЗрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВред
рдЖрд╡рд╢реНрдпрдХ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджреА рдЧрдИ рд▓рд╛рдЗрди рдЪрд▓рд╛рдПрдВ:
```
!pip install 'smolagents[toolkit]' --upgrade -q
```
HF Inference API рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдХрд░реЗрдВ:
```
from huggingface_hub import login
login()
```
тЪбя╕П рд╣рдорд╛рд░рд╛ рдПрдЬреЗрдВрдЯ [Qwen/Qwen3-Next-80B-A3B-Thinking](https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Thinking) рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрдЧрд╛ рдЬреЛ `InferenceClientModel` рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ HF рдХреЗ Inference API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: Inference API рдХрд┐рд╕реА рднреА OS рдореЙрдбрд▓ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
_рдиреЛрдЯ:_ The Inference API рд╡рд┐рднрд┐рдиреНрди рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЙрдбрд▓ рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдмрд┐рдирд╛ рдкреВрд░реНрд╡ рд╕реВрдЪрдирд╛ рдХреЗ рдЕрдкрдбреЗрдЯ рдпрд╛ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ [рдпрд╣рд╛рдВ](https://huggingface.co/docs/api-inference/supported-models)ред
```py
model_id = "Qwen/Qwen3-Next-80B-A3B-Thinking"
```
## ЁЯФН рдПрдХ рд╡реЗрдм рд╕рд░реНрдЪ рдЯреВрд▓ рдмрдирд╛рдПрдВ
рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж [`WebSearchTool`] рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Google search рдХреЗ рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдореЗрдВ `WebSearchTool` рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреЗ рдЧрдП рдкреЗрдЬ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд┐рд▓реНрдЯ-рдЗрди `VisitWebpageTool` рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВрдЧреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рддреЛ рдЖрдЗрдП `markdownify` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реБрд░реВ рд╕реЗ рдЕрдкрдирд╛ `VisitWebpageTool` рдЯреВрд▓ рдмрдирд╛рдПрдВред
```py
import re
import requests
from markdownify import markdownify
from requests.exceptions import RequestException
from smolagents import tool
@tool
def visit_webpage(url: str) -> str:
"""Visits a webpage at the given URL and returns its content as a markdown string.
Args:
url: The URL of the webpage to visit.
Returns:
The content of the webpage converted to Markdown, or an error message if the request fails.
"""
try:
# Send a GET request to the URL
response = requests.get(url)
response.raise_for_status() # Raise an exception for bad status codes
# Convert the HTML content to Markdown
markdown_content = markdownify(response.text).strip()
# Remove multiple line breaks
markdown_content = re.sub(r"\n{3,}", "\n\n", markdown_content)
return markdown_content
except RequestException as e:
return f"Error fetching the webpage: {str(e)}"
except Exception as e:
return f"An unexpected error occurred: {str(e)}"
```
рдареАрдХ рд╣реИ, рдЕрдм рдЪрд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЯреВрд▓ рдХреЛ рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ!
```py
print(visit_webpage("https://en.wikipedia.org/wiki/Hugging_Face")[:500])
```
## рд╣рдорд╛рд░реА рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ ЁЯдЦЁЯдЭЁЯдЦ
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдЯреВрд▓реНрд╕ `search` рдФрд░ `visit_webpage` рд╣реИрдВ, рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрдм рдПрдЬреЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдПрдЬреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪреБрдиреЗрдВ?
- рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд┐рдВрдЧ рдПрдХ рд╕рд┐рдВрдЧрд▓-рдЯрд╛рдЗрдорд▓рд╛рдЗрди рдЯрд╛рд╕реНрдХ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдЯреВрд▓ рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП JSON рдЯреВрд▓ рдХреЙрд▓рд┐рдВрдЧ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо `ToolCallingAgent` рдЪреБрдирддреЗ рд╣реИрдВред
- рд╕рд╛рде рд╣реА, рдЪреВрдВрдХрд┐ рдХрднреА-рдХрднреА рд╡реЗрдм рд╕рд░реНрдЪ рдореЗрдВ рд╕рд╣реА рдЙрддреНрддрд░ рдЦреЛрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ рдкреЗрдЬреЛрдВ рдХреА рд╕рд░реНрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рдо `max_steps` рдХреЛ рдмрдврд╝рд╛рдХрд░ 10 рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред
```py
from smolagents import (
CodeAgent,
ToolCallingAgent,
InferenceClientModel,
ManagedAgent,
WebSearchTool,
)
model = InferenceClientModel(model_id=model_id)
web_agent = ToolCallingAgent(
tools=[WebSearchTool(), visit_webpage],
model=model,
max_steps=10,
)
```
рдлрд┐рд░ рд╣рдо рдЗрд╕ рдПрдЬреЗрдВрдЯ рдХреЛ рдПрдХ `ManagedAgent` рдореЗрдВ рд░реИрдк рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдЗрд╕рдХреЗ рдореИрдиреЗрдЬрд░ рдПрдЬреЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдПрдЧрд╛ред
```py
managed_web_agent = ManagedAgent(
agent=web_agent,
name="search",
description="Runs web searches for you. Give it your query as an argument.",
)
```
рдЕрдВрдд рдореЗрдВ рд╣рдо рдПрдХ рдореИрдиреЗрдЬрд░ рдПрдЬреЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдкрд░ рд╣рдо рдЕрдкрдиреЗ рдореИрдиреЗрдЬреНрдб рдПрдЬреЗрдВрдЯ рдХреЛ рдЗрд╕рдХреЗ `managed_agents` рдЖрд░реНрдЧреБрдореЗрдВрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдЬреЗрдВрдЯ рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕реЛрдЪрдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрдиреНрдирдд рддрд░реНрдХ рд▓рд╛рднрджрд╛рдпрдХ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП `CodeAgent` рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред
рд╕рд╛рде рд╣реА, рд╣рдо рдПрдХ рдРрд╕рд╛ рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрд╖ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдЧрдгрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ: рдЗрд╕рд▓рд┐рдП рдЖрдЗрдП `additional_authorized_imports=["time", "numpy", "pandas"]` рдЬреЛрдбрд╝реЗрдВ, рдпрджрд┐ рдПрдЬреЗрдВрдЯ рдХреЛ рдЗрди рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред
```py
manager_agent = CodeAgent(
tools=[],
model=model,
managed_agents=[managed_web_agent],
additional_authorized_imports=["time", "numpy", "pandas"],
)
```
рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдЕрдм рдЪрд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ! рд╣рдо рдПрдХ рдРрд╕рд╛ рдкреНрд░рд╢реНрди рдЪреБрдирддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЧрдгрдирд╛ рдФрд░ рд╢реЛрдз рджреЛрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
```py
answer = manager_agent.run("If LLM training continues to scale up at the current rhythm until 2030, what would be the electric power in GW required to power the biggest training runs by 2030? What would that correspond to, compared to some countries? Please provide a source for any numbers used.")
```
We get this report as the answer:
```
Based on current growth projections and energy consumption estimates, if LLM trainings continue to scale up at the
current rhythm until 2030:
1. The electric power required to power the biggest training runs by 2030 would be approximately 303.74 GW, which
translates to about 2,660,762 GWh/year.
2. Comparing this to countries' electricity consumption:
- It would be equivalent to about 34% of China's total electricity consumption.
- It would exceed the total electricity consumption of India (184%), Russia (267%), and Japan (291%).
- It would be nearly 9 times the electricity consumption of countries like Italy or Mexico.
3. Source of numbers:
- The initial estimate of 5 GW for future LLM training comes from AWS CEO Matt Garman.
- The growth projection used a CAGR of 79.80% from market research by Springs.
- Country electricity consumption data is from the U.S. Energy Information Administration, primarily for the year
2021.
```
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ [рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╣рд╛рдЗрдкреЛрдерд┐рд╕рд┐рд╕](https://gwern.net/scaling-hypothesis) рд╕рддреНрдп рдмрдиреА рд░рд╣рддреА рд╣реИ рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рдмрдбрд╝реЗ рдкрд╛рд╡рд░рдкреНрд▓рд╛рдВрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдЯреНрд╕ рдиреЗ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╣рдпреЛрдЧ рдХрд┐рдпрд╛! тЬЕ
ЁЯТб рдЖрдк рдЗрд╕ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдзрд┐рдХ рдПрдЬреЗрдВрдЯреНрд╕ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рдХреЛрдб рдПрдХреНрдЬреАрдХреНрдпреВрд╢рди рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╡реЗрдм рд╕рд░реНрдЪ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдлрд╛рдЗрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред