使用 Smolagents 和 Novita AI 构建自主代理

使用 Smolagents 和 Novita AI 构建自主代理

关键要点

1.AI 代理:
实现超越僵化、预定义工作流的自主决策。
利用迭代推理、自适应执行和持续学习。

2. Smolagents:
轻量级 Python 库(约 1,000 行代码),简化 AI 代理的创建。
直接输出可执行的 Python 代码片段,并在沙盒环境中安全执行。
支持多种模型、模态(文本、图像、音频、视频)以及外部工具集成。

3. Novita AI 支持:
与 Smolagents 兼容,支持 DeepSeek R1 Turbo 等强大模型,性能更优、成本更低。

人工智能已从模式识别发展到生成式内容创作。下一个重大飞跃是 代理型 AI(agentic AI)的出现——系统能够自主决策并采取行动,解决复杂的多步骤问题。本文探讨 AI 代理的概念,深入介绍代码代理的细节,概述如何构建一个代理,讨论不同底层模型的性能,并解答关于这一变革性技术的常见问题。

什么是 AI 代理?

代理型 AI 解决了传统刚性工作流难以有效处理的任务所带来的挑战。许多真实场景涉及复杂、微妙的流程,静态的预定义 if-else 结构无法完全捕捉。代理型 AI 为工作流引入了灵活性和适应性,使系统能够根据不断变化的上下文动态确定并执行最优的动作序列。

https://youtu.be/-pqzyvRp3Tc

它是如何工作的?

代理型 AI 通过一个迭代、动态的循环来运作:感知、推理、行动和学习。其核心是,AI 代理利用大语言模型(LLMs)作为推理引擎来分析情境、规划响应、协调专用模型并执行任务。工作流通常包括以下步骤:

  • 数据摄入与感知: 代理从多个来源收集和处理数据,获取上下文感知能力,以辅助决策过程。
  • 推理与规划: 使用 LLMs,代理解读数据、推理可能的解决方案、生成战略计划,并确定实现目标所需的行动。
  • 行动与执行: 代理与外部工具和预定义函数集成,根据推理输出执行任务。它们会迭代地执行动作、观察结果并相应调整,直到达到期望结果。
  • 持续学习: 通过反馈循环和检索增强生成(RAG)等技术,代理能够访问专有数据源,持续改进其理解、性能和准确性,保持相关性。

通过结合这些能力——自主决策、迭代推理、外部工具集成和持续改进——代理型 AI 有效地将基于 LLM 的推理与现实世界的执行和适应连接起来。

来源:Nvidia

什么是 smolagents?

Smolagents 是一个轻量级 Python 库,旨在简化构建强大 AI 代理的过程。它采用极简方法,核心逻辑仅约 1,000 行代码,提供最小的抽象层,为开发者提供更大的直接控制权。Smolagents 被定位为 transformers.agents 的继任者(后者最终将被弃用)。更多细节请访问 GitHub

amolagents

关键特性 与核心机制

✨ 简洁性

  • Smolagents 以约 1,000 行代码实现了强大的 AI 代理逻辑,将抽象层保持在最小,为开发者提供了更大的灵活性(参见 agents.py)。

🧑‍💻 一流的代码代理支持

  • Smolagents 的 CodeAgent 直接将代理动作输出为 Python 代码片段,而非 JSON 或文本,从而提高了效率和性能。它在沙盒环境(E2B、Docker)中安全执行代码,并保持对传统 JSON/文本代理的支持。

🤗 Hub 集成

  • Smolagents 允许通过 Hugging Face Hub 轻松共享和加载可复用的 Python 工具,简化了协作和工具复用。

🌐 模型无关性

  • Smolagents 支持几乎所有的大语言模型(LLM)——本地 transformers 或 ollama 模型、Hugging Face 托管的模型,以及通过 LiteLLM 提供的外部提供商(如 OpenAI 或 Anthropic)。

👁️ 模态无关性

  • 使用 Smolagents 创建的代理可以无缝处理多种输入模态,包括文本、图像、视频和音频。

🛠️ 工具无关性

  • Smolagents 灵活地集成了来自不同生态系统的工具,例如 LangChain、Anthropic 的 MCP 或 Hugging Face Hub Spaces。

smolagents 工作方式

如何使用 Novita AI API 和 smolagents 构建代理?

Novita AI 是一个 AI 云平台,为开发者提供通过简单 API 部署 AI 模型的便捷方式,同时提供经济可靠的 GPU 云用于构建和扩展。

Smolagents 支持多种大语言模型(LLM),包括 Novita AI!接下来我们将以 deepseek r1 turbo 为例,展示 smolagents 和 Novita AI 的强大功能!

值得一提的是,Novita AI 发布了 Turbo 版本,吞吐量提升 3 倍,并限时提供 60% 折扣!

novita ai no1

立即尝试 DeepSeek R1 Turbo!

一个示例

输入:

import os
from smolagents import OpenAIServerModel, CodeAgent, DuckDuckGoSearchTool

model = OpenAIServerModel(
    model_id="deepseek/deepseek-r1-turbo",
    api_base="https://api.novita.ai/v3/openai",
    api_key="Your API Key" # 请替换为目标服务器的 API Key
)

agent = CodeAgent(tools=[DuckDuckGoSearchTool()], model=model)

agent.run("请规划一次从上海到北京的周末旅行,包括交通方式、行程安排和必备物品清单")

输出:

transport = web_search(query="上海到北京周末交通 2024")                                                                                                                                                                                                                                                           
  print("交通方式:", transport)                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                 
  attractions = web_search(query="北京2日游行程 热门景点 2024")                                                                                                                                                                                                                                                                 
  print("景点推荐:", attractions)                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                 
  details = web_search(query="北京旅游必备物品 2024")                                                                                                                                                                                                                                                                                   
  print("必备物品与提示:", details)                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                 
  weekend_plan = {                                                                                                                                                                                                                                                                                                                               
      "交通": {                                                                                                                                                                                                                                                                                                                        
          "推荐选项": "周五晚上 G12 次高铁(18:00-22:30)上海虹桥至北京南",                                                                                                                                                                                                                                
          "备选": "周六早班飞机(07:00-09:00+转运时间)"                                                                                                                                                                                                                                                                    
      },                                                                                                                                                                                                                                                                                                                                         
      "行程安排": {                                                                                                                                                                                                                                                                                                                             
          "第一天(周六)": [                                                                                                                                                                                                                                                                                                                  
              "08:30 - 天安门广场(免费)",                                                                                                                                                                                                                                                                                           
              "10:00 - 故宫(预订门票,游览3-4小时)",                                                                                                                                                                                                                                                                              
              "14:00 - 天坛",                                                                                                                                                                                                                                                                                                        
              "晚上:后海晚餐 + 胡同探索"                                                                                                                                                                                                                                                                                
          ],                                                                                                                                                                                                                                                                                                                                     
          "第二天(周日)": [                                                                                                                                                                                                                                                                                                                    
              "07:00 - 出发前往慕田峪长城(预订班车/出租车)",                                                                                                                                                                                                                                                                      
              "09:00-12:00 - 长城游览(建议坐缆车)",                                                                                                                                                                                                                                                                          
              "14:00 - 颐和园",                                                                                                                                                                                                                                                                                                           
              "18:00 - 返回市区,乘坐 G27 次高铁(19:00-23:18)返回上海"                                                                                                                                                                                                                                                            
          ]                                                                                                                                                                                                                                                                                                                                      
      },                                                                                                                                                                                                                                                                                                                                         
      "必备物品": [                                                                                                                                                                                                                                                                                                                            
          "预订好的故宫门票(¥60)",                                                                                                                                                                                                                                                                                              
          "舒适的步行鞋",                                                                                                                                                                                                                                                                                                           
          "分层衣物(查看天气预报)",                                                                                                                                                                                                                                                                                           
          "便携 WiFi/充电宝",                                                                                                                                                                                                                                                                                                            
          "微信支付/支付宝余额",                                                                                                                                                                                                                                                                                                           
          "身份证/护照(用于取火车票)"                                                                                                                                                                                                                                                                                              
      ]                                                                                                                                                                                                                                                                                                                                          
  }                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                 
  final_answer(weekend_plan)                                       

最终答案

最终答案:{'交通': {'推荐选项': '周五晚上 G12 次高铁(18:00-22:30)上海虹桥至北京南', '备选': '周六早班飞机(07:00-09:00+转运时间)'}, '行程安排': {'第一天(周六)': ['08:30 - 天安门广场(免费)', '10:00 - 故宫(预订门票,游览3-4小时)', '14:00 - 天坛', '晚上:后海晚餐 + 胡同探索'], '第二天(周日)': ['07:00 - 出发前往慕田峪长城(预订班车/出租车)', '09:00-12:00 - 长城游览(建议坐缆车)', '14:00 - 颐和园', '18:00 - 返回市区,乘坐 G27 次高铁(19:00-23:18)返回上海']}, '必备物品': ['预订好的故宫门票(¥60)', '舒适的步行鞋', '分层衣物(查看天气预报)', '便携 WiFi/充电宝', '微信支付/支付宝余额', '身份证/护照(用于取火车票)']}

Smolagents 中模型性能对比

smolagents LLM 排行榜

更多详情请查看 Hugging Face

代理型 AI 代表着人工智能的重大进步,赋予系统自主解决问题和执行任务的能力。Smolagents 库提供了一个轻量却强大的框架,专为构建智能代理而设计,强调基于代码的直接操作,并与多种大语言模型(LLM)兼容。随着开源模型的不断快速改进,Smolagents 为开发者提供了一个易用且通用的工具包,用于探索和实现代理型 AI 在各种领域的激动人心的潜力。

常见问题

代理型 AI 和生成式 AI 之间的主要区别是什么?

生成式 AI 专注于创建新内容,如文本和图像;而代理型 AI 则专注于做出决策并自主执行任务以实现目标。

在 smolagents 中执行代码安全吗?

smolagents 提供了安全执行代码的选项,包括使用 E2B 或 Docker 的沙盒环境,从而消除对本地系统的风险。

在哪里可以找到关于 smolagents 的更多信息?

您可以在 smolagents GitHub 仓库以及专为该库设立的 Hugging Face Space 中找到完整的文档、教程和示例。

Novita AI 是一站式云平台,助力您的 AI 抱负。集成 API、无服务器、GPU 实例——您所需的成本高效工具。无需基础设施,免费开始,让您的 AI 愿景成为现实。

推荐阅读