В этом блокноте мы сделаем мультиагентный веб-браузер: агентная система с несколькими агентами, сотрудничающими для решения проблем с помощью Интернета!
Это будет простая иерархия, использующая 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.
Похоже, нам понадобятся мощные силовые установки, если гипотеза масштабирования продолжает оставаться верным.
Нашим агентам удалось эффективно скооперироваться для решения поставленной задачи! ✅
💡 Вы можете легко расширить эту оркестровку на большее количество агентов: один выполняет выполнение кода, другой - веб-поиск, третий - загрузку файлов...