🤖🤝🤖 多智体协同探秘:构建自主网络搜索引擎

各位看官,且听我细细道来,今日要讲的,乃是一个精彩绝伦的故事——关于一群聪明绝顶的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作为军师,因为它推理能力强大,如同智多星吴用,能够分析局势,做出最佳决策。我们还赋予它使用timenumpypandas等工具的能力,如同给军师配备了算盘和地图,方便进行数据计算和分析。

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等等,如同江湖上不断涌现新的高手,共同维护武林的和平与繁荣。

发表评论

Only people in my network can comment.
人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 知差(chai)网 🐾 DeepracticeX 社区 🐾 老薛主机 🐾 智柴论坛 🐾