> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 地震可视化AI代理
- URL: https://www.hubwiz.com/blog/ai-agents-for-earthquake-visualization/
- Published: 2025-05-05T21:53:39.000Z
- Updated: 2025-05-05T21:53:39.000Z
- Description: 想象一下，拥有一个AI助手，它可以自动收集全球地震数据，分析模式，并生成漂亮的可视化效果——所有这些都不需要人工干预。
- Author: admin
- Tags: APPLICATION, AGENT, SMOLAGENTS, #Import 2026-10-14 14:41

想象一下，拥有一个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调用和更好的性能](https://huggingface.co/blog/smolagents?ref=hubwiz.com)。

### 2.2 为Hugging Face生态系统而建

与Hugging Face模型、工具和Hub无缝集成意味着你可以：

- 使用任何LLM（从开源到专有）
- 在项目之间共享和重用工具
- 利用社区生态系统

## 3、架构概述

![](https://www.hubwiz.com/blog/content/images/2025/05/image-66.png)

我们的地震可视化代理展示了真正的多代理系统，具有两个专门的代理：

### 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 数据源选择

![](https://www.hubwiz.com/blog/content/images/2025/05/image-67.png)

![](https://www.hubwiz.com/blog/content/images/2025/05/image-65.png)

这展示了SmoLAgents代理如何将思想转化为可执行代码而不是JSON，从而实现更自然和强大的动作表达。

### 5.2 数据转换

![](https://www.hubwiz.com/blog/content/images/2025/05/image-68.png)

代理自主地将数据结构化为可视化要求，显示直接编码在可执行动作中的复杂推理。

### 5.3 错误处理和恢复

![](https://www.hubwiz.com/blog/content/images/2025/05/image-69.png)

![](https://www.hubwiz.com/blog/content/images/2025/05/image-70.png)

这展示了代理的能力：

- 从执行日志中识别错误模式
- 制定适当解决方案
- 自主实施修复

### 5.4 可视化创建

![](https://www.hubwiz.com/blog/content/images/2025/05/image-71.png)

代理正确地将可视化要求映射到执行，展示了代码代理在处理复杂工作流方面的力量。

### 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系统的未来。

对于完整的代码实现笔记本，请查看[代码链接](https://github.com/kshitijkutumbe/smolagent%5Fcodingagent?ref=hubwiz.com)。

---

原文链接：[Autonomous Coding AI Agent using smolagents : Earthquake visualization agent](https://ai.gopubby.com/autonomous-coding-ai-agent-using-smolagents-earthquake-visualization-agent-7e16b615953c?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处