地震可视化AI代理
想象一下,拥有一个AI助手,它可以自动收集全球地震数据,分析模式,并生成漂亮的可视化效果——所有这些都不需要人工干预。在这篇全面的指南中,我们将使用smolagents构建这样一个系统,Hugging Face的最小化但功能强大的框架用于创建AI代理。
我们将创建一个“地震可视化代理”,该代理可以:
- 搜索实时地震数据
- 处理复杂的地质数据集
- 生成交互式世界地图
- 自主处理错误恢复
通过本教程的结束,你不仅会有一个工作的地震可视化系统,还会理解构建可靠AI代理的基本概念。
1、理解LLM代理:从简单生成到复杂操作
在探索SmoLAgents之前,了解大型语言模型(LLM)代理的重要性是很重要的。LLMs已经超越了简单的文本生成,积极地参与工作流,代理的存在存在于一个光谱上:
- 简单处理器:LLM生成文本而不控制程序流程
- 路由器:输出引入基本控制流(if/else决策)
- 工具调用:LLM可以确定要使用的函数及其适当的参数
- 多步代理:LLM管理迭代过程和工作流循环
- 多代理系统:多个专业代理协作完成复杂目标
我们的地震可视化系统展示了“多代理系统”级别的例子,其中专门的代理协调以完成复杂的科学可视化任务。
2、为什么选择smolagents?
SmoLAgents作为我们地震项目的最佳选择,因为它采用了一种革命性的方法来处理代理动作:
2.1 代码代理:思考Python,而不是JSON
传统框架表示动作为JSON:
{"tool": "web_search", "args": {"query": "earthquake data USGS"}}
SmoLAgents的CodeAgent将动作表达为可执行代码:
results = web_search("earthquake data USGS")
df = pd.DataFrame(parse_json(results))
这种基于代码的方法提供了“代码的优势”——LLMs经过大量训练,减少了语法错误,并直接在动作中启用复杂推理。研究表明,代码代理在复杂基准测试中实现了30%更少的LLM调用和更好的性能。
2.2 为Hugging Face生态系统而建
与Hugging Face模型、工具和Hub无缝集成意味着你可以:
- 使用任何LLM(从开源到专有)
- 在项目之间共享和重用工具
- 利用社区生态系统
3、架构概述
我们的地震可视化代理展示了真正的多代理系统,具有两个专门的代理:
3.1 地震网络代理
目的:数据收集专家 职责:
- 搜索地震数据源
- 从USGS/EMSC API提取数据
- 解析并结构化原始地质数据
3.2 地震管理代理
目的:协调和可视化管理 职责:
- 协调网络代理
- 处理和分析数据
- 创建可视化
- 管理错误恢复
这种多代理架构展示了任务分工和专业化——每个代理都有明确的职责,这导致了更可靠和可维护的系统。
4、实现深入探讨
4.1 设置基础
让我们建立必要的核心基础设施:
from smolagents import tool, Tool, CodeAgent, OpenAIServerModel
from tavily import TavilyClient
import plotly.express as px
import pandas as pd
4.2 创建智能工具
工具是使我们的代理与现实世界互动的基础构建块:
@tool
def web_search(query: str) -> str:
"""搜索地震数据。
使用Tavily进行具有地质学重点的智能网络搜索。
"""
tavily_client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))
response = tavily_client.search(query)
return str(response["results"])
class VisitWebpageTool(Tool):
name = "visit_webpage"
description = "读取有关地质数据的网页内容"
inputs = {"url": {"type": "string", "description": "地震数据源的URL"}}
output_type = "string"
def forward(self, url: str) -> str:
# 高级错误处理和内容提取
try:
response = requests.get(url, timeout=20)
markdown_content = markdownify(response.text).strip()
return truncate_content(markdown_content, 40000)
except requests.exceptions.Timeout:
return "请求超时"
except Exception as e:
return f"错误: {str(e)}"
注意我们是如何实施稳健的错误处理的——这是生产就绪代理的关键方面。
4.3 配置网络代理
我们的网络代理针对数据收集进行了优化,具有精心选择的权限:
quake_web_agent = CodeAgent(
model=OpenAIServerModel("gpt-4.1-2025-04-14", max_completion_tokens=8096),
tools=[web_search, VisitWebpageTool()],
additional_authorized_imports=[
"geopandas", "plotly", "numpy", "pandas", "requests"
],
max_steps=10,
name="quake_web_agent",
description="从网络来源收集实时地震数据"
)
关键配置决策:
- 模型选择:GPT-4用于复杂推理
- 令牌限制:增加以处理大量数据
- 授权导入:仔细选择的数据科学库
- 步骤限制:防止无限循环
4.4 构建经理代理
经理展示了分层代理系统的强大功能:
quake_manager = CodeAgent(
model=OpenAIServerModel("gpt-4.1-2025-04-14", max_tokens=8096),
tools=[],
managed_agents=[quake_web_agent],
planning_interval=5,
verbosity_level=2,
max_steps=15
)
这种设置体现了多代理协作模式,其中专门的代理协同工作以实现复杂目标。
5、代理的思维-行动过程
让我们分析我们的多步骤代理如何通过地震可视化任务进行推理:
5.1 数据源选择
这展示了SmoLAgents代理如何将思想转化为可执行代码而不是JSON,从而实现更自然和强大的动作表达。
5.2 数据转换
代理自主地将数据结构化为可视化要求,显示直接编码在可执行动作中的复杂推理。
5.3 错误处理和恢复
这展示了代理的能力:
- 从执行日志中识别错误模式
- 制定适当解决方案
- 自主实施修复
5.4 可视化创建
代理正确地将可视化要求映射到执行,展示了代码代理在处理复杂工作流方面的力量。
5.5 性能分析
📊 数据处理:~10,000次地震,4个步骤
🔄 错误恢复:自动修复幅度问题
🚀 LLM令牌使用:通过基于代码的动作优化
✨ 可视化质量:出版就绪的交互式地图
⏱️ 总执行时间:<1分钟
6、高级多代理功能
6.1 工具整合
遵循效率原则,考虑结合相关工具:
@tool
def get_seismic_data(source: str = "USGS", time_range: str = "month") -> pd.DataFrame:
"""从指定来源获取并解析地震数据"""
# 结合功能进行数据检索和解析
pass
6.2 扩展视觉功能
SmoLAgents支持多模态功能,允许:
vision_agent = CodeAgent(
model=vision_model,
tools=[image_analysis_tool],
description="分析地震可视化以获得见解"
)
7、结束语
使用SmoLAgents构建地震可视化代理展示了从简单的LLM文本生成到复杂的多代理系统的演变。通过利用代码代理和最小化抽象的原则,我们创建了一个系统,它展示了从数据收集到自主可视化的真正代理能力。
关键是,当LLMs通过代码而不是JSON进行操作时,它们获得了广泛的培训优势,使得代理开发更加自然和有效。这种方法体现在smolagents中,代表了代理AI系统的未来。
对于完整的代码实现笔记本,请查看代码链接。
原文链接:Autonomous Coding AI Agent using smolagents : Earthquake visualization agent
汇智网翻译整理,转载请标明出处