各位看官,且听我细细道来,今日要讲的,乃是一个精彩绝伦的故事——关于一群聪明绝顶的AI Agent如何携手合作,构建一个自主的网络搜索引擎,宛如武林高手过招,招招精彩,式式惊人!
🌍 初探江湖:任务揭秘
话说这江湖上,有一桩难题,需要AI群侠出手解决:预测到2030年,如果大型语言模型(LLM)的训练规模按照目前的节奏持续扩大,那么最大的训练运行所需的电力将达到多少GW?这相当于哪些国家的用电量?并且,所有使用的数字都需要提供来源。这任务,就好比让侠客们寻找武林秘籍,不仅要找到,还要知道秘籍的来历和出处。
🛠 磨砺兵器:打造搜索利器
要完成这个任务,首先得有趁手的兵器。我们先打造一个「网络搜索工具」,如同侠客手中的宝剑,能够快速精准地找到所需信息。虽然江湖上已有DuckDuckGoSearchTool这等利器,但我们还要打造一个「网页浏览工具」,如同侠客的千里眼,能够看清网页上的内容。
我们使用markdownify
这个神奇的工具,将网页内容转换成易于阅读的Markdown格式,如同将天书翻译成白话文,方便AI Agent理解。代码如下:
import re
import requests
from markdownify import markdownify
from requests.exceptions import RequestException
from smolagents import tool
@tool
def visit_webpage(url: str) -> str:
"""访问指定URL的网页,并将其内容作为markdown字符串返回。
Args:
url: 要访问的网页的URL。
Returns:
转换为Markdown的网页内容,如果请求失败则返回错误消息。
"""
try:
response = requests.get(url)
response.raise_for_status()
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])
🔍 集结群侠:组建多智体系统
兵器已备,接下来就是集结各路英雄好汉,组成我们的多智体系统。
首先,我们需要一个「网页代理」,如同身手敏捷的斥候,负责使用搜索工具和网页浏览工具,在网络的汪洋大海中寻找线索。我们选择JsonAgent
作为斥候,因为它处理单线程任务效率极高,如同单枪匹马闯荡江湖,来去自如。
from smolagents import (
CodeAgent,
ToolCallingAgent,
HfApiModel,
ManagedAgent,
DuckDuckGoSearchTool,
LiteLLMModel,
)
model_id = "Qwen/Qwen2.5-Coder-32B-Instruct" # 使用强大的Qwen模型
model = HfApiModel(model_id)
web_agent = ToolCallingAgent(
tools=[DuckDuckGoSearchTool(), visit_webpage],
model=model,
max_steps=10, # 设置最大搜索步数,如同斥候最多探查十个地方
)
为了更好地管理这位斥候,我们将其封装成一个「受管代理」(ManagedAgent),如同给斥候配备了联络工具,方便与其他成员沟通。
managed_web_agent = ManagedAgent(
agent=web_agent,
name="search",
description="为你运行网络搜索。将你的查询作为参数提供给它。",
)
最后,我们需要一个「管理代理」(Manager Agent),如同运筹帷幄的军师,负责统筹全局,制定计划。我们选择CodeAgent
作为军师,因为它推理能力强大,如同智多星吴用,能够分析局势,做出最佳决策。我们还赋予它使用time
、numpy
和pandas
等工具的能力,如同给军师配备了算盘和地图,方便进行数据计算和分析。
manager_agent = CodeAgent(
tools=[],
model=model,
managed_agents=[managed_web_agent],
additional_authorized_imports=["time", "numpy", "pandas"],
)
⚔️ 决战江湖:多智体协同作战
万事俱备,只欠东风。现在,让我们向多智体系统发出指令,如同军师下达作战命令:
answer = manager_agent.run("如果LLM训练按照目前的节奏持续扩大到2030年,那么最大的训练运行所需的电力将达到多少GW?这相当于哪些国家的用电量?请提供所有使用数字的来源。")
经过一番激烈的搜索和计算,多智体系统最终给出了答案,如同侠客们凯旋而归,带回了武林秘籍:
根据目前的增长预测和能耗估算,如果LLM训练按照目前的节奏持续扩大到2030年:
1. 到2030年,最大的训练运行所需的电力约为303.74 GW,相当于每年约2,660,762 GWh。
2. 与各国电力消耗量相比:
- 相当于中国总电力消耗量的34%左右。
- 超过印度(184%)、俄罗斯(267%)和日本(291%)的总电力消耗量。
- 几乎是意大利或墨西哥等国电力消耗量的9倍。
3. 数字来源:
- 未来LLM训练的初始估算值5 GW来自AWS首席执行官Matt Garman。
- 使用的增长预测是Springs市场研究的79.80%的复合年增长率。
- 各国电力消耗量数据来自美国能源信息管理局,主要针对2021年。
🎉 功成身退:任务圆满完成
至此,多智体系统圆满完成了任务,如同侠客们功成身退,留下了一段江湖传奇。
💡 这个多智体系统就像一个可以不断扩展的团队,可以添加更多的Agent,例如执行代码的Agent、处理文件加载的Agent等等,如同江湖上不断涌现新的高手,共同维护武林的和平与繁荣。