В этом блокноте мы сделаем мультиагентный веб-браузер: агентная система с несколькими агентами, сотрудничающими для решения проблем с помощью Интернета!
Это будет простая иерархия, использующая ManagedAgent объект для обертывания управляемого агента веб-поиска:
Скопировано
+----------------+
| Агент менеджера |
+----------------+
|
_______________|______________
| |
Интерпретатор кода +--------------------------------+
инструмент | Управляемый агент |
| +------------------+ |
| | Агент веб-поиска | |
| +------------------+ |
| | | |
Инструмент для веб-поиска | | |
| Инструмент для посещения веб-страниц |
+--------------------------------+Давайте настроим эту систему.
Выполните следующую строку, чтобы установить необходимые зависимости:
Скопировано
!pip install markdownify duckduckgo-search smolagents --upgrade -q
Давайте войдем в систему, чтобы вызвать HF Inference API:
Скопировано
из huggingface_hub import login login()
⚡️ Наш агент будет работать на Qwen/Qwen2.5-Coder-32B-Instruct используя HfApiModel класс, использующий HF's Inference API: Inference API позволяет быстро и легко запустить любую модель ОС.
Примечание: В Inference API размещены модели, основанные на различных критериях, и развернутые модели могут быть обновлены или заменены без предварительного уведомления. Узнайте больше об этом здесь.
Скопировано
model_id = "Qwen/Qwen2.5-Coder-32B-Instruct"
🔍 Создайте инструмент для поиска информации в Интернете #
Для просмотра веб-страниц мы можем использовать уже существующие DuckDuckGoSearchTool инструмент, обеспечивающий эквивалент поиска Google.
Но затем нам также нужно будет иметь возможность зайти на страницу, найденную с помощью DuckDuckGoSearchTool. Для этого мы можем импортировать встроенный в библиотеку VisitWebpageToolНо мы построим его снова, чтобы посмотреть, как это делается.
Итак, давайте создадим наш VisitWebpageTool инструмент с нуля, используя markdownify.
Скопировано
импорт ре
импортировать запросы
from markdownify import markdownify
from requests.exceptions import RequestException
из smolagents import tool
@tool
def visit_webpage(url: str) -> str:
"""Посещает веб-страницу по заданному URL и возвращает ее содержимое в виде строки в формате markdown.
Args:
url: URL веб-страницы, которую нужно посетить.
Возвращает:
Содержимое веб-страницы, преобразованное в Markdown, или сообщение об ошибке при неудачном запросе.
"""
try:
# Отправьте GET-запрос на URL-адрес
response = requests.get(url)
response.raise_for_status() # Вызывать исключение для плохих кодов состояния
# Преобразуйте содержимое HTML в Markdown
markdown_content = markdownify(response.text).strip()
# Удалите несколько переносов строк
markdown_content = re.sub(r"\n{3,}", "\n\n", markdown_content)
return markdown_content
except RequestException as e:
return f "Ошибка при получении веб-страницы: {str(e)}"
except Exception as e:
return f "Произошла непредвиденная ошибка: {str(e)}"Итак, давайте инициализируем и протестируем наш инструмент!
Скопировано
print(visit_webpage("https://en.wikipedia.org/wiki/Hugging_Face")[:500])Постройте нашу мультиагентную систему 🤖🤝🤖 #
Теперь, когда у нас есть все инструменты. поиск и посетить_страницуМы можем использовать их для создания веб-агента.
Какую конфигурацию выбрать для этого агента?
- Просмотр веб-страниц - это задача с одной временной шкалой, которая не требует параллельных вызовов инструментов, поэтому вызов инструментов JSON хорошо подходит для этой задачи. Поэтому мы выбираем
JsonAgent. - Кроме того, поскольку иногда при веб-поиске приходится изучать множество страниц, прежде чем найти правильный ответ, мы предпочитаем увеличить количество
max_stepsдо 10.
Скопировано
из smolagents import (
CodeAgent,
ToolCallingAgent,
HfApiModel,
ManagedAgent,
DuckDuckGoSearchTool,
LiteLLMModel,
)
модель = HfApiModel(model_id)
web_agent = ToolCallingAgent(
tools=[DuckDuckGoSearchTool(), visit_webpage],
model=model,
max_steps=10,
)Затем мы обернем этого агента в ManagedAgent что сделает его доступным для вызова агентом-менеджером.
Скопировано
managed_web_agent = ManagedAgent(
agent=web_agent,
name="поиск",
description="Выполняет за вас поиск в Интернете. Передайте ему свой запрос в качестве аргумента.",
)Наконец, мы создаем агента-менеджера и при инициализации передаем ему нашего управляемого агента в его управляемые_агенты аргумент.
Поскольку именно этому агенту поручено планировать и размышлять, продвинутые рассуждения будут полезны, так что CodeAgent будет лучшим выбором.
Кроме того, мы хотим задать вопрос, который включает в себя текущий год и производит дополнительные вычисления данных: поэтому добавим additional_authorized_imports=["time", "numpy", "pandas"].На случай, если агенту понадобятся эти пакеты.
Скопировано
manager_agent = CodeAgent(
tools=[],
модель=модель,
managed_agents=[managed_web_agent],
additional_authorized_imports=["time", "numpy", "pandas"],
)Вот и все! Теперь давайте запустим нашу систему! Мы выбираем вопрос, который требует как вычислений, так и исследований:
Скопировано
answer = manager_agent.run("Если обучение LLM будет продолжаться в текущем ритме до 2030 года, то какая электрическая мощность в ГВт потребуется для питания самых больших учебных заведений к 2030 году? Чему это будет соответствовать по сравнению с некоторыми странами? Пожалуйста, укажите источник для любых используемых цифр.")В качестве ответа мы получаем этот отчет:
Скопировано
Исходя из текущих прогнозов роста и оценок потребления энергии, если обучение LLM будет продолжаться в текущем ритме до 2030 года, то до 2030 года: 1. 1. Электроэнергия, необходимая для питания самых крупных тренингов к 2030 году, составит примерно 303,74 ГВт, что что составляет около 2 660 762 ГВтч/год. 2. Сравните это с потреблением электроэнергии в странах: - Это будет эквивалентно примерно 34% общего потребления электроэнергии в Китае. - Это превысит общее потребление электроэнергии в Индии (184%), России (267%) и Японии (291%). - Это почти в 9 раз больше, чем потребление электроэнергии в таких странах, как Италия или Мексика. 3. Источник цифр: - Первоначальная оценка в 5 ГВт для будущих LLM-тренингов исходит от генерального директора AWS Мэтта Гармана. - Для прогноза роста использовался показатель CAGR 79,80%, полученный в результате исследования рынка компанией Springs. - Данные о потреблении электроэнергии в стране взяты из Управления энергетической информации США, в основном на 2021 год. 2021.
Похоже, нам понадобятся мощные силовые установки, если гипотеза масштабирования продолжает оставаться верным.
Нашим агентам удалось эффективно скооперироваться для решения поставленной задачи! ✅
💡 Вы можете легко расширить эту оркестровку на большее количество агентов: один выполняет выполнение кода, другой - веб-поиск, третий - загрузку файлов...
