
精通 smolagents:使用 Hugging Face 创建 AI 代理的全面指南及现实案例
- Rifx.Online
- Large Language Models , AI Applications , AI Research
- 05 Mar, 2025
smolagents
读者们好 👋 希望大家一切都好 😊
上图是由 smolagents 框架生成的,看起来很可爱吧。在本文的最后,你也会了解到如何使用 hugging face 的 smolagents 来创建图像
Agents 生态系统
什么是 Agent?
Agent 是一个系统,它利用 AI 模型与其环境交互,以实现用户定义的目标。它结合了推理、规划和执行操作(通常通过外部工具)来完成任务。
可以将 Agent 想象成有两个主要部分:
1.大脑(AI 模型)
这里是所有思考发生的地方。AI 模型处理推理和规划。它根据情况决定要采取哪些 Actions。
2.身体(能力和工具)
这部分代表了 Agent 所具备的一切能力。
可能的操作范围取决于 Agent 所配备的。例如,因为人类没有翅膀,所以他们无法执行“飞”的 Action,但他们可以执行“走”、“跑”、“跳”、“抓”等 Action。
我们为 Agent 使用什么类型的 AI 模型?
在 Agent 中最常见的 AI 模型是 LLM(大型语言模型),它接受文本作为输入,并输出文本。
众所周知的例子有 OpenAI 的 GPT4、Meta 的 LLama、Google 的 Gemini 等。这些模型已经在大量的文本上进行了训练,并且能够很好地泛化。我们将在 下一节 中了解更多关于 LLM 的信息。
也可以使用接受其他输入作为 Agent 核心模型的模型。例如,视觉语言模型 (VLM),它就像一个 LLM,但也能理解图像作为输入。我们现在将专注于 LLM,稍后将讨论其他选项。
AI 如何对其环境采取行动?
LLM 是很棒的模型,但它们只能生成文本。
但是,如果你让像 HuggingChat 或 ChatGPT 这样的知名聊天应用程序生成图像,它们可以!这是怎么做到的?
答案是 HuggingChat、ChatGPT 和类似应用程序的开发人员实现了附加功能(称为工具),LLM 可以使用这些工具来创建图像。
Credits: HuggingFace
Agent 可以执行什么类型的任务?
Agent 可以通过我们通过 Tools 实现的任何任务来完成 Actions。
例如,如果我编写一个 Agent 作为我电脑上的个人助理(如 Siri),并且我要求它“向我的经理发送电子邮件,要求推迟今天的会议”,我可以给它一些代码来发送电子邮件。这将是 Agent 需要发送电子邮件时可以使用的新 Tool。我们可以用 Python 编写它:
def send_message_to(recipient, message):
"""Useful to send an e-mail message to a recipient"""
...
LLM,正如我们将看到的,将生成代码来运行该工具,并在需要时执行此操作,从而完成所需任务。
send_message_to("Manager", "Can we postpone today's meeting?")
Tools 的设计非常重要,并且对你的 Agent 的质量有很大影响。某些任务需要创建非常具体的 Tools,而其他任务可以使用通用工具(如“web_search”)来解决。
请注意,Actions 与 Tools 不同。例如,一个 Action 可能涉及使用多个 Tools 来完成。
允许 Agent 与其环境交互,为公司和个人提供了现实生活中的应用。
示例 1:个人虚拟助手
像 Siri、Alexa 或 Google Assistant 这样的虚拟助手在代表用户与其数字环境交互时,充当了 Agent。
它们接受用户查询,分析上下文,从数据库中检索信息,并提供响应或启动操作(如设置提醒、发送消息或控制智能设备)。
示例 2:客户服务聊天机器人
许多公司部署聊天机器人作为 Agent,它们使用自然语言与客户互动。
这些 Agent 可以回答问题,指导用户完成故障排除步骤,在内部数据库中打开问题,甚至完成交易。
它们预定义的目标可能包括提高用户满意度、减少等待时间或提高销售转化率。通过直接与客户互动,从对话中学习,并随着时间的推移调整其响应,它们展示了 Agent 运作的核心原则。
示例 3: 视频游戏中的 AI 非玩家角色
由 LLM 驱动的 AI 智能体可以使非玩家角色 (NPC) 更加动态和不可预测。
它们不再遵循僵化的行为树,而是可以根据上下文做出反应,适应玩家的互动,并生成更细致的对话。 这种灵活性有助于创造更逼真、更具吸引力的角色,这些角色会随着玩家的行为而发展。
它们是如何工作的?
- 智能体将首先思考,然后行动,最后观察以执行任何操作
致谢:HuggingFace
总览:Congo 智能体
Step1:用户请求“给我拿一杯咖啡” Congo 智能体
Step2:Congo 智能体 思考和计划(将思考并计划选择哪些工具来完成用户请求)Congo 智能体进行推理和计划,弄清楚他需要的步骤和工具:
- 去厨房
- 使用咖啡机
- 冲泡咖啡
- 把咖啡拿回来
Step3:Congo 智能体使用工具完成用户请求
什么是 LLM? 大脑(AI 模型)
正如我们已经了解到的 LLM,我不想详细介绍,但我会重点介绍几件事。
LLM 是一种 AI 模型,擅长理解和生成人类语言。 它们在大量文本数据上进行训练,使它们能够学习语言中的模式、结构,甚至是细微差别。 这些模型通常包含数百万个参数。
如今,大多数 LLM 都建立在 Transformer 架构之上——一种基于“Attention”算法的深度学习架构,自 2018 年 Google 发布 BERT 以来就引起了人们的极大兴趣。
Transformer 有 3 种类型:
编码器
基于编码器的 Transformer 将文本(或其他数据)作为输入,并输出该文本的密集表示(或嵌入)。
示例:Google 的 BERT
- 用例:文本分类、语义搜索、命名实体识别
- 典型大小:数百万个参数
解码器
基于解码器的 Transformer 侧重于生成新 token 以一次完成一个序列。
示例:Meta 的 Llama
- 用例:文本生成、聊天机器人、代码生成
- 典型大小:数十亿(以美国的方式,即 10⁹)个参数
Seq2Seq (编码器–解码器)
一个序列到序列的 Transformer 结合了一个编码器和一个解码器。 编码器首先将输入序列处理成一个上下文表示,然后解码器生成一个输出序列。
示例:T5、BART
- 用例:翻译、摘要、释义
- 典型大小:数百万个参数
Attention is all you need
Transformer 架构的一个关键方面是 Attention。在预测下一个词时,句子中的每个词的重要性并不相同;例如句子“法国的首都是……”中的“法国”和“首都”这两个词就携带了最多的含义。
来源:HuggingFace
这种识别最相关词语来预测下一个 token 的过程已被证明非常有效。
尽管自 GPT-2 以来,LLM 的基本原理——预测下一个 token——一直保持一致,但在扩展神经网络和使注意力机制适用于越来越长的序列方面取得了重大进展。
如果你与 LLM 交互过,你可能熟悉术语 context length,它指的是 LLM 可以处理的最大 token 数量,以及它拥有的最大 attention span。
什么是 AI 工具?主体
一个工具是赋予 LLM 的一个功能。这个功能应该实现一个明确的目标。
以下是 AI 代理中一些常用的工具:
这些仅仅是示例,因为实际上你可以为任何用例创建一个工具!
一个好的工具应该能够补充 LLM 的能力。
例如,如果你需要执行算术运算,给你的 LLM 提供一个计算器工具将比依赖模型的原生功能提供更好的结果。
此外,LLM 根据其训练数据预测提示的完成,这意味着它们的内部知识只包括训练之前发生的事件。因此,如果你的代理需要最新数据,你必须通过某种工具提供它。
例如,如果你直接询问 LLM(没有搜索工具)今天的天气,LLM 可能会产生随机的天气。
来源:Huggingface
一个工具应该包含:
- 对该功能作用的文本描述。
- 一个 Callable(用于执行操作)。
- 带类型的 Arguments。
- (可选)带类型的 Outputs。
工具如何工作?
正如我们所看到的,LLM 只能接收文本输入并生成文本输出。它们无法自行调用工具。当我们谈论向 Agent 提供工具时,我们的意思是教会 LLM 关于工具的存在,并要求模型生成文本,以便在需要时调用工具。例如,如果我们提供一个工具来从互联网上查询某个地点的天气,然后询问 LLM 巴黎的天气,LLM 将识别出这个问题是使用我们教给它的“天气”工具的相关机会。LLM 将生成文本,以代码的形式调用该工具。代理有责任解析 LLM 的输出,识别是否需要调用工具,并代表 LLM 调用该工具。然后,来自工具的输出将被发送回 LLM,LLM 将为用户编写其最终回复。
来自工具调用的输出是对话中的另一种消息类型。工具调用步骤通常不会显示给用户:代理检索对话,调用工具,获取输出,将它们添加为新的对话消息,并将更新后的对话再次发送给 LLM。从用户的角度来看,就像 LLM 使用了该工具,但实际上是我们的应用程序代码(代理)完成了它。
核心组件
代理在一个持续的循环中工作:思考 (Thought) → 行动 (Act) 和观察 (Observe)。
让我们一起分解这些动作:
- 思考:代理的 LLM 部分决定下一步应该做什么。
- 行动:代理通过使用相关的参数调用工具来采取行动。
- 观察:模型反思来自工具的响应。
思考-行动-观察循环
这三个组件在一个持续的循环中协同工作。用编程的类比来说,代理使用一个 while 循环:循环持续进行,直到代理的目标得到满足。
从视觉上看,它看起来像这样:
来源:HuggingFace
在许多 Agent 框架中,规则和指南直接嵌入到系统提示中,确保每个循环都遵循定义的逻辑。
在一个简化的版本中,我们的系统提示可能看起来像这样:
来源:HuggingFace
我们在这里看到,在系统消息中,我们定义了:
- Agent 的行为。
- 我们的 Agent 可以访问的工具,正如我们在上一节中所描述的。
- 思考-行动-观察循环,我们将其融入到 LLM 指令中。
让我们举一个小例子来理解这个过程,然后再深入研究过程的每个步骤。
Congo,天气代理
我们创建了 Congo,天气代理。
用户问 Congo:“今天印度的天气怎么样?”
Congo 的工作是使用天气 API 工具来回答这个问题。
循环的展开方式如下:
思考
内部推理:
收到查询后,Congo 的内部对话可能是:
“用户需要印度的当前天气信息。 我可以使用一个获取天气数据的工具。 首先,我需要调用天气 API 来获取最新的详细信息。”
此步骤显示了代理将问题分解为几个步骤:首先,收集必要的数据。
行动
工具使用:
基于它的推理和 Congo 知道 get_weather
工具的事实,Congo 准备了一个 JSON 格式的命令,该命令调用天气 API 工具。 例如,它的第一个操作可能是:
思考:我需要检查印度的当前天气。
{
"action": "get_weather",
"action_input": {
"location": "India"
}
}
在这里,该操作清楚地指定了要调用的工具(例如,get_weather)以及要传递的参数(“location”:“India”)。
观察
来自环境的反馈:
在工具调用之后,Congo 接收到一个观察结果。 这可能是来自 API 的原始天气数据,例如:
“印度的当前天气:部分多云,35°C,25% 湿度。”
然后将此观察结果作为附加上下文添加到提示中。 它充当现实世界的反馈,确认操作是否成功并提供所需的详细信息。
更新后的思考
反思:
有了观察结果,Congo 会更新其内部推理:
“现在我有了印度的天气数据,我可以为用户编写一个答案。”
最终行动
然后,Congo 生成最终响应,其格式与我们告诉它的一样:
思考:我现在有了天气数据。 纽约的当前天气是部分多云,温度为 15°C,湿度为 60%。”
最终答案:纽约的当前天气是部分多云,温度为 15°C,湿度为 60%。
此最终操作将答案发送回用户,从而结束循环。
什么是 Hugging Face 的 Smolagents?
一个非常简单的库,可为语言模型解锁代理功能。
“代码代理,即用代码编写其操作的代理(而不是“用于编写代码的代理”)。 为了确保安全,我们支持通过 E2B 在沙盒环境中执行。”
代码代理如何工作?
构建一个代理
要构建一个代理,您至少需要两个元素:
tools
:代理可以访问的工具列表model
:将成为您的代理引擎的 LLM。
首先安装该软件包。
pip install smolagents==1.2.0
场景 1:我想用自然语言查询我的模型 amazon“sales_data”,为简单起见,我选取了几个记录
使用了简单的代码代理,sql_engine 作为工具
from sqlalchemy import (
Column,
Float,
Integer,
MetaData,
String,
Table,
create_engine,
insert,
inspect,
text,
)
engine = create_engine("sqlite:///:memory:")
metadata_obj = MetaData()
## create city SQL table
table_name = "sales_data"
sales_data = Table(
table_name,
metadata_obj,
Column("product_id", Integer, primary_key=True),
Column("product_name", String(16), primary_key=True),
Column("category", String(16)),
Column("discounted_price", Float),
Column("actual_price", Float),
Column("discount_percentage", Float),
Column("rating", Integer),
Column("rating_count", Integer),
Column("about_product", String(16)),
Column("user_id", Integer),
Column("user_name", String(16)),
Column("review_id", Integer),
Column("review_title", String(16)),
Column("review_content", String(16)),
Column("img_link", String(16)),
Column("product_link", String(16))
)
metadata_obj.create_all(engine)
## 产品评论数据
```json
[
{
"product_id": "B0BPJBTB3F",
"product_name": "Khaitan ORFin 暖风机,适用于家庭和厨房 - K0 2215",
"category": "Home\u0026Kitchen|Heating,Cooling\u0026AirQuality|RoomHeaters|FanHeaters",
"discounted_price": "1299.0",
"actual_price": "2495.0",
"discount_percentage": "0.48",
"rating": "2",
"rating_count": "2",
"about_product": "Khaitan Orfin 暖风机,适用于家庭和厨房 | 功率 2000 瓦 | 加热位置 1000 瓦 - 2000 瓦 | 可调节恒温器温度控制 | 自动热切断保护 | 前格栅保护 | 涡轮风扇",
"user_id": "AGHT3K4KSG5MAQUSXRDT5VNB73GA,AE4Q5XQ7SZW35EEUJKQ3IV2IIBQQ",
"user_name": "Manidipa Sengupta,Vidisha",
"review_id": "R1OO2ED6615EX1,RR4S5JTJMCPA5",
"review_title": "质量差,产品很棒..",
"review_content": "加热能力为零。此外,我已经发起了退货请求。没有人来取走它,这个价格最好的加热器。质量很好。建议每个人都购买这款加热器.......... 购买的神奇产品...",
"img_link": "https://m.media-amazon.com/images/W/WEBP_402378-T1/images/I/31B8Pd1SmLL._SX300_SY300_QL70_FMwebp_.jpg",
"product_link": "https://www.amazon.in/Khaitan-ORFin-heater-Home-kitchen-K0/dp/B0BPJBTB3F/ref\u003dsr_1_326?qid\u003d1672923609\u0026s\u003dkitchen\u0026sr\u003d1-326"
},
{
"product_id": "B0BFBNXS94",
"product_name": "个人尺寸搅拌机,便携式搅拌机,电池供电 USB 搅拌机,带四个刀片,迷你搅拌机旅行瓶,用于果汁、奶昔和冰沙(粉色)",
"category": "Home\u0026Kitchen|Kitchen\u0026HomeAppliances|SmallKitchenAppliances|HandBlenders",
"discounted_price": "669.0",
"actual_price": "1499.0",
"discount_percentage": "0.55",
"rating": "2.3",
"rating_count": "13",
"about_product": "✔【易于携带】- 这款手持式搅拌机配备了旅行盖,方便携带。您可以随时随地喝到有营养的果汁、奶昔或冰沙,例如家庭、办公室、健身房、旅行或任何其他户外活动。此外,它也可以带上飞机。|✔【便携式设计】:独特的设计可以分离底座和杯体。USB 榨汁杯配备 1400mAh 可充电高质量电池,可以通过多种方式充电,例如通过移动电源、交流适配器充电,充电时间为 3-5 小时;充满电可以产生 15-20 杯果汁。|✔【食品级材料】- 便携式搅拌机由优质 ABS 和硅胶制成,食品级材料。它具有独特的安全设计,包括硅胶底部,防滑和吸震。这款便携式榨汁机也是果汁和旅行爱好者的合适礼物。|✔【4 刀片设计】- 用于奶昔和冰沙的便携式搅拌机具有强大的电机底座和 4 个食品级不锈钢 3D 刀片。采用食品级电解技术的切割头的不锈钢 SUS304 经久耐用,具有出色的混合能力,使果肉能够快速|✔【一键混合/清洁】:简单的按钮触摸。清洁时容量为 350ml,只需在杯中放入适量的水,然后按下按钮即可自动清洁。这可以为您节省很多麻烦。",
"user_id": "AHRDA66XO63XYCBZJMW4EUJN3BFQ,AELE2SOO7LBNHXU7UK5F7TGQHA6Q,AHAVCLRCPYO2MFYPTURF33N7XH5A,AE762UDUDQPW4R4QHHTIL7TPTJUA,AEGZSJIUSKF2EKIKGLNKY2CU6WXA",
"user_name": "Manya,Been,Podili Parasuram,Rejoy Jacob,Priya",
"review_id": "R1WJ8T3U9P42IU,RM9RH8FX9U95D,R31M8UXT7NLOMY,R18Q7M2R00EW68,R11NHZQ8OKA9U0",
"review_title": "好产品,我推荐购买,不要买!!有缺陷的产品,浪费钱,非常非常糟糕的便携式,浪费钱,它不能正常工作",
"review_content": "我喜欢它携带起来很方便,浪费钱。有缺陷的产品,质量差。根本不混合,https://m.media-amazon.com/images/I/71IVsjyZ13L._SY88.jpg,第一次充电问题第二次电机问题,https://m.media-amazon.com/images/I/61aXXxIxPwL._SY88.jpg",
"img_link": "https://m.media-amazon.com/images/I/417TQs3uroL._SX300_SY300_QL70_FMwebp_.jpg",
"product_link": "https://www.amazon.in/Personal-Blender-Portable-Battery-Smoothies/dp/B0BFBNXS94/ref\u003dsr_1_261_mod_primary_new?qid\u003d1672923605\u0026s\u003dkitchen\u0026sbo\u003dRZvfv%2F%2FHxDF%2BO5021pAnSA%3D%3D\u0026sr\u003d1-261"
},
{
"product_id": "B0B7L86YCB",
"product_name": "Green Tales 热封迷你食品封口机 - 用于密封塑料袋包装的脉冲机",
"category": "Home\u0026Kitchen|Kitchen\u0026HomeAppliances|SmallKitchenAppliances|VacuumSealers",
"discounted_price": "161.0",
"actual_price": "300.0",
"discount_percentage": "0.46",
"rating": "2.6",
"rating_count": "24",
"about_product": "封口机用于零食食品保鲜储存,并创建气密容器,使食品保持新鲜。|热封机将轻松重新密封原始塑料袋,因此食物将不再暴露于灰尘。|磁性底部,它很容易附着在冰箱或任何固定的金属表面上,因此您可以在厨房、户外、橱柜或任何您需要的地方方便地使用它。|安全且方便的封口机:优质 ABS 材料,耐高低温。|气密密封 创建气密密封,防止您的食物变得平淡无味,并锁住新鲜度和风味。",
"user_id": "AG2BB3Q2AQB7SBFBURGYSMFHDAOA,AGFXIO346VXYI35ANHRTU7FE7ZGA,AEZIOFC5L34FZZOMGKEHXHLG6KQA,AFDS7H2OSIL3I4CZBN7C7NS4XOXA,AEBSIJDEVFVOC7PQYB3W36OLAHNA,AGHY5MD6U2E5
```json
{
"product_id": "B0BN515G4L",
"product_name": "MR. BRAND 便携式 USB 榨汁机 电动 USB 榨汁机 搅拌机 搅拌瓶 搅拌机,6 刀片充电瓶,带(多种颜色)(MULTI MIXER 6 BLED)",
"category": "家居与厨房|厨房与家用电器|小型厨房电器|榨汁机搅拌机",
"discounted_price": "499.0",
"actual_price": "2199.0",
"discount_percentage": "0.77",
"rating": "2.8",
"rating_count": "109",
"about_product": "便携式且方便充电:这款小巧轻便的设计方便您携带到学校、办公室、公园、露营等任何地方。它也很方便通过移动电源、笔记本电脑、电脑、汽车或其他 USB 设备充电。|易于清洁且安全 - 它具有智能安全保护装置、磁感应开关,使用和清洁都非常安全,榨汁杯的杯体和底部可以分离,您可以轻松清洁它|多功能 - 使用我们的果汁搅拌机混合各种水果和蔬菜,您可以制作天然美味的果汁、奶昔、冰沙和其他婴儿食品。它非常便携,非常适合旅行、户外活动。|随时随地享受您的果汁。|6 个不锈钢刀片,锋利耐用,可以使用很长时间。",
"user_id": "AEJKHGA26MUVUZIYWZOW4B6I4X7Q,AF3B47EOSBULYG63EGZZZGO6HTNA,AGNSXRFJBDVGM7FS7YYPNCEO7XFQ,AHR53IW5LAAXGGFK3DRWRMXMM7KQ,AE5W6S5KCJV6L2WMBIOKYWQJN37Q,AH5J4DROVHI6XHMTCBAK7WWU3F4Q,AE5KAK3S3XZDPRUR2VCND2QNZTUQ,AEKG7ELYA43YNPZ2YT3ORIL2VSOA",
"user_name": "Yashvant Gote,Nargis Sultana,S.I.KUMAR,Ravi,Lokesh Hegde,Abhinav Anand,Any babar,Sarada peram",
"review_id": "RGB7OLWZEBW2D,R35V1I6KBBWDA1,R2S9K0UTNSD0L6,R3RC91ZJN8FXRE,RHM5Q098AI06R,R2QOHI14M69TVA,R2PQH5L3O1O0F4,R3TYY0655P2RMO",
"review_title": "便携式,但功能不强大,不太好。备用电源很差。对我 9 岁的女孩来说更像是一个玩具。500 卢比可以,不要被评级愚弄,不是一个好产品,不推荐,最差的电池,没用,它价格实惠。,用户友好的搅拌机,推荐购买不错的产品",
"review_content": "功率不足,该产品更像是一个儿童玩具。不能将其用作合适的榨汁机。备用电源非常差。,好的,我第一次不得不更换该产品,因为它漏水,现在更换后,新的没有电池备用,而且振动太大。MRP 超过 2000 卢比,这根本无法通过该产品证明。购买该产品后,我发现他们正在提供 25 到 100 卢比的现金返还优惠,如果您给出 5 星评价,这可能是它有良好评级的原因。我觉得我被评级愚弄了。,废物产品,因为榨汁机漏水,导致整个地方一片混乱,而且榨汁机没有正确研磨,水果的碎片仍然未研磨。我通常不写评论,但我被迫写下这篇评论,因为它只是浪费金钱,明智地花在更好的东西上,它根本无法正常工作,充电 4 小时后,电池只能持续 30 - 45 秒。非常糟糕的产品。而且他们还给了一个现金返还优惠券来吸引好评。在详细页面上给出了误导性信息。,我买这个主要是为了奶昔,它做得很好,而且价格实惠,但它在充电时不起作用,用户友好的搅拌机,对 pg 住宿者非常有用。我从收到亚马逊的那一天起就用它来制作蛋白质奶昔。",
"img_link": "https://m.media-amazon.com/images/I/51pFS9lDzML._SY300_SX300_QL70_FMwebp_.jpg",
"product_link": "https://www.amazon.in/MR-BRAND-Portable-Electric-Rechargeable/dp/B0BNDGL26T/ref\u003dsr_1_302?qid\u003d1672923607\u0026s\u003dkitchen\u0026sr\u003d1-302"
}, {
"product_id": "B0BBVKRP7B",
"product_name": "SHREENOVA ID116 Plus 蓝牙健身智能手表,适用于男士、女士和儿童活动追踪器(黑色)",
"category": "电子产品|可穿戴技术|智能手表",
"discounted_price": "281.0",
"actual_price": "1999.0",
"discount_percentage": "0.86",
"rating": "2.8",
"rating_count": "87",
"about_product": "✅ 全天活动跟踪:跟踪步数、距离、燃烧的卡路里、活动时间,您可以在 OLED 显示屏或 APP 上查看每日活动和时间|✅ 注意 - 无呼叫功能 - 您只会收到通知以在您的手腕上查看呼叫和消息:接收/拒绝呼叫、日历、短信和 SNS(Facebook、WhatsApp、LinkedIn、Instagram 和 Twitter)显示屏上的通知,健身追踪器手环让您永远不会错过重要的消息。|✅ 注意 - 此健身手环仅在从 Play 商店安装健身手环应用程序后才能使用。要设置手表时间,您必须安装健身手环应用程序。您将收到条形码,请扫描它以下载该应用程序。从应用程序连接健身手环时,打开蓝牙和位置。不要直接通过蓝牙连接手环,您需要从 APP 连接它。|✅ 注意 - 此手表不提供充电器,它具有内置 USB 端口,小心取下手表带,然后您可以看到 USB 端口,您可以轻松地将其连接到任何笔记本电脑、电脑、手机充电器进行充电。如有任何产品问题,请通过买家留言与我们联系,请从 Play 商店安装该设备的任何一个应用程序,应用程序名称为 FIT PRO",
"user_id": "AHSYI7EUDN2RNS2IPMGAS5MKLXPQ,AHHLJNBYVOGQSFG2Q4UMMRU3V3UA,AFC7PJA3XS6MHXYAUF3JZDHDUZWQ,AFL6U5G4P2KLLZU4HCOXES7ME2CQ,AFSSRLUEWTKDHYSAS36MDQQPYTKA,AG5UBF32OIHPW42GLXLBS4QOKKVA,AHLGMGTL6FSAFU2INPKH5ISUODTQ,AFL2ZLTGQ64RMXKWRI7QSA3457GQ",
"user_name": "dk yadav,MUKESH KUMAR VERMA,Vishnu,Shaikh Shahalam,sushilkumar dubey,Roshan Narendra Raut,Deepak thakur,Aappashaeb Barsale",
"review_id": "RQOWF9MFTN6CQ,R23B5JORWWE85P,R3SB0VOD36AXI0,R21GGYJ4354Q5J,R2L4513I3EHE9T,R1PKO3C46KVSKW,R2MGVNOXZZ1BWP,R2IYFCFPLPOX6C",
"review_title": "非常好 prodat,电池寿命为 0 天,好,开机按钮在哪里?,Saman kharab hai,不要购买完全浪费时间和金钱。,Bhot
```json
[
{
"product_id": "B0BBLHTRM9",
"product_name": "IONIX 龙头净水器,厨房和浴室多层水龙头过滤器,净水器滤芯",
"category": "Home\u0026Kitchen|Kitchen\u0026HomeAppliances|WaterPurifiers\u0026Accessories|WaterPurifierAccessories",
"discounted_price": "199.0",
"actual_price": "699.0",
"discount_percentage": "0.72",
"rating": "2.9",
"rating_count": "159",
"about_product": "水龙头净水器:内置多层滤芯可分离椰壳活性炭、沸石、PVA 无纺布、亚硫酸钙和橡胶,适用于净化硬水和井水。|健康生活方式:去除水中的氯、重金属和其他杂质,水更甘甜,更安全。|易于清洁:家庭和办公室必备品,100% 全新且高质量。耐高温,不易变形。要清洁,只需取下滤网并在水下冲洗即可。|节水:由柔软的橡胶材料制成,可防止漏水,每次使用时都可以节水。; 包装清单:1 * 水龙头过滤器|包含的组件:1 X 五层水龙头",
"user_id": "AF6LRVDRKYWPTZXZLQERZ3LXCWDA,AG7FU75LA5ONPMNEVH6X47PHPHYA,AG3YRWMWYEW3G2WELWCNIU2H7HQQ,AGXZDH5CDJHVZVCYA6555BIZIWTQ,AEP6P6MBRADJL3SDICYEMQUWXVEA,AEVOU4VDGD6M5VOUU47DZ7JRABEA,AGA3BZEL7AM75FQS67KO32HQKWHQ,AHYU5NW2HTBFSIBPELM5BWRVFHDQ",
"user_name": "Anmol Khanna,G.l.sudhakar,Amazon Customer,manoj,Satya,Swarup Panday,Reyaansh Arora,neha keluskar",
"review_id": "R9GL8284FSYUG,R1Q6Z3DZDJMDPN,R25CLTZM7X33KC,R3EZN6N234M56M,R3V5ZJK278N7DE,R2D7IYLDOK44OG,R3E1T8ZS17TP57,R388P83LV3P6PH",
"review_title": "几天后停止工作,好的。 每 4 个月更换一次太多,水龙头过滤器,质量,不能净化水,非常好的产品,真的很好!,坏",
"review_content": "几天后停止工作,好的,它不容易安装。 一点水压过滤器就会掉下来。 安装是该产品的缺点。 采用的净水方法很好。 安装必须简单。,由于水的问题而出现头发问题,所以我为我的浴室买了它。 质量好的产品,但使用几天后过滤后的水压降低了。,优点:-易于安装(管道有 3 种不同的尺寸)缺点:- 希望它可以净化自来水(如它们在说明中所述)。 不幸的是,它没有达到目的 - 我用 tds ppc 仪表测量了我的常用水 - 结果是 427(班加罗尔常用)。 在我安装此过滤器后 - 它显示的结果是 424。 令人失望。 你需要它低于 100 才能确保可以饮用。,易于安装且物有所值,我将其用于学校项目,效果非常好!,收到旧产品。 内部似乎生锈了",
"img_link": "https://m.media-amazon.com/images/I/41n90w1dlJL._SY445_SX342_QL70_FMwebp_.jpg",
"product_link": "https://www.amazon.in/IONIX-Tap-Multilayer-Filter-Filter-Pack/dp/B0BBLHTRM9/ref\u003dsr_1_488?qid\u003d1672923617\u0026s\u003dkitchen\u0026sr\u003d1-488"
},
{
"product_id": "B08YK7BBD2",
"product_name": "Nirdambhay Mini Bag Sealer, 2 in 1 Heat Sealer and Cutter Handheld Sealing Machine Portable Bag Resealer Sealer for Plastic Bags Food Storage Snack Fresh Bag Sealer (Including 2 AA Battery)",
"category": "Home\u0026Kitchen|Kitchen\u0026HomeAppliances|SmallKitchenAppliances|VacuumSealers",
"discounted_price": "429.0",
"actual_price": "999.0",
"discount_percentage": "0.57",
"rating": "3",
"rating_count": "617",
"about_product": "【易于使用】安装电池后,您需要按住开关按钮 3-5 秒才能预热。 将需要密封的袋子放在中间,较薄的袋子可以快速撕裂,较厚的袋子应缓慢均匀地拉动。|【便携式】使用后,无需拆卸电池,挂钩可以卡在密封处,并可以与其他电器一起悬挂。 完美的便携式封袋机,适用于厨房、露营、旅行等。|【双重用途】本产品不仅是封口机,也是开袋机,开袋非常容易方便。迷你便携式切袋机和封口机,快速封口和切割。|【材质】采用优质ABS材质,做工精细,无毛刺,耐高低温,经久耐用。|【注意】密封时不要用力按压,否则会导致金属接触片变形而无法加热。 要密封的袋子必须保持清洁,并且没有水、油和其他污渍",
"user_id": "AELHZH2PRVKJIVTQMABOTT6LUMBQ,AGNBNAIVJCEB3TBMEUWKDG6F3OAA,AEEJ6B3XBCPD2CHBKEWXRNHXM5EA,AFVUY5ZKTN2NRRFDXM6M6IOW6YXQ,AFX3VLIHVKXRNRC2HBLSBNEIV2LQ,AEQABAS4A3RXJ6CM4EX2645IUCEA,AH3SJ6WSYDG6DYJVQ7UYWAACHFMA,AFDFDVVB5IXZZBCIHG3VJVK3E3CQ",
"user_name": "Ritika,ABHISHEK U.,Bhavika,Rekha rana,Balamurugan A,Dhiren Shah,Mrs. Imran khan,Anusree",
"review_id": "R24VRMVVKTZXZU,R2SZR29UV8HPIJ,R34NPCR94RTTCU,REPOE3PIM6ZRN,R2RF6XPVSOG2R2,RHE4AF3VC0YG,RQ8DJGRM0OVUA,R2AX7J603OWTJ3",
"review_title": "不值得炒作,好,真的很有用😃,产品不错,但当我们按下密封时,密封器的下部会自动出来...,好的产品。 产生的热量不足以包装,不合格,口袋友好,有效且易于使用,一般",
"review_content": "嗨,观众,所以我在观看了#amazonfinds 的无尽运输后购买了这款产品。 尽管我对该产品的使用感到兴奋,但它并没有被证明那么有用。 密封侧面的加热不足以使包装袋密封良好。 切割侧面工作正常。 但大多数情况下,加热侧面必须用力按压,以至于电池盒在用拇指施加压力时会滑开,所以我认为我们完全可以在没有这款产品的情况下在家里工作。 它绝对时尚,配有手册、电池和一个挂钩来悬挂它,但滑动电池盖让我的便利性失败了,好用,物有所值,易于使用,当我们按下密封时,下部会自动打开,没有加热足够的能量来",
"img_link": "https://m.media-amazon.com/images/I/41n90w1dlJL._SY445_SX34
```json
[
{
"product_id": "B09F6D21BY",
"product_name": "兼容 LG 电视系列所有型号的遥控器|兼容型号:适用于您的 LG 智能电视通用遥控器 AN-MR600G AN-MR650 AN-MR650G ANMR650A ANMR600 AN-MR650B AN-MR19BA AN-MR18BA 等",
"category": "Electronics|HomeTheater,TV\u0026Video|RemoteControls",
"discounted_price": "790.0",
"actual_price": "1999.0",
"discount_percentage": "0.6",
"rating": "3.0",
"rating_count": "103",
"about_product": "适用于 LG 电视系列所有型号的遥控器|兼容型号:适用于您的 LG 智能电视通用遥控器 AN-MR600G AN-MR650 AN-MR650G ANMR650A ANMR600 AN-MR650B AN-MR19BA AN-MR18BA 等|应用程序热键:Prime Video、Netflix 并自定义您自己的!无需编程或设置。|这是专用的替换遥控器,不是原装的,但功能与原装的 100% 相同,并且涵盖了原装遥控器的所有功能。|注意:此遥控器不支持语音命令",
"user_id": "AH7NTBDGAMGOFFADEVWJL3O4YQ2A,AEJUIUF6CYKRBWLSOPWPE7KMC3RA,AF45WMWXMOPN3ELUJ2H2N63JWKGA,AH6MPOEE6ICQG3RBULF7TOQVMMEA,AH7QLQDC5BMOKDDRGGWSEP3AQ6IQ,AEIXFEXXMTDJNPWUMOIEA34ZLC7Q,AEQV4U4ZGMGZOWC4RQSUQZGHYSHA,AG7DCRRGNMM7FSENOSNAQTVYBHPQ",
"user_name": "Jarlina Nath,Sona,Ranjit Harchekar,Myneni Suneeta,prithvi,Srinivas,upender,Ishita Bhadana",
"review_id": "R1S2PH1JD9B9XB,R3UUKCS12Q0B9X,R16YH8SVJU5W61,R32XCAYQRNE0Q3,R1FQD9T17LXHLF,R17H2I7PYTIEIA,RWEPEYF95XCK9,R14CFFXT17UAJI",
"review_title": "不好,没有语音识别,没有像原装 LG 遥控器那样的指针光线。不包含这些功能,最好的产品,无法正常工作,无法使用,不要购买,它没有指针,无法正常工作,完美",
"review_content": "遥控器的鼠标功能无法使用,带按钮的遥控器似乎还可以,但没有语音识别,也没有像原装 LG 产品那样的光线指针。希望根据网站上的失实陈述获得退款。在我的投诉后,您修改了说明。最好的产品,数字按钮无法使用,产品有缺陷,无法与电视一起使用,不喜欢该产品,因为它没有指针选项,无法正常工作,购买的最佳选择,因为很难更换 OLED 电视遥控器...",
"img_link": "https://m.media-amazon.com/images/W/WEBP_402378-T2/images/I/315sEpeo50L._SX300_SY300_QL70_FMwebp_.jpg",
"product_link": "https://www.amazon.in/Compatible-Suitable-Control-Non-Support-Netflix/dp/B09F6D21BY/ref\u003dsr_1_344?qid\u003d1672909141\u0026s\u003delectronics\u0026sr\u003d1-344"
},
{
"product_id": "B0B94JPY2N",
"product_name": "亚马逊品牌 - Solimo 65W 快速充电编织 Type C 到 C 数据线 | 适用于所有支持的手机(1 米,黑色)",
"category": "Computers\u0026Accessories|Accessories\u0026Peripherals|Cables\u0026Accessories|Cables|USBCables",
"discounted_price": "199.0",
"actual_price": "999.0",
"discount_percentage": "0.8",
"rating": "3.0",
"rating_count": '200',
"about_product": "USB C 到 C 数据线:此电缆的两端都有 C 型连接器,并且需要与此电缆一起使用 USB C 型壁式充电器/适配器|耐用且坚固:1 米长,5 毫米厚|65W 快速充电,高达 4A/65W|配备智能充电自动检测技术|该电缆支持 480Mbps 的数据传输速度|通过多种内置保护措施防止过热和过度充电|适用于所有主要智能手机,包括 OnePlus、小米、Realme、Oppo 等。",
"user_id": "AE7CFHY23VAJT2FI4NZKKP6GS2UQ",
"user_name": "Pranav",
"review_id": "RUB7U91HVZ30",
"review_title": "该电缆可以使用,但并非如广告所说的 65W",
"review_content": "我有一个支持 pd 的车载充电器,我之前购买了 solimo 电缆,它们工作得很好,但这个电缆不像 solimo usb a 到 usb c 那样触发 3A 快速充电,这很奇怪,因为它应该是一个 65W 的充电器,支持 4A 快速充电。无论如何,它是一个制作精良的产品,可以使用,但不如预期。它可能与您的充电器兼容,但我测试了 2 个不同的车载充电器,它们都没有全速运行。",
"img_link": "https://m.media-amazon.com/images/W/WEBP_402378-T2/images/I/41Vpx5MVtaL._SY300_SX300_QL70_FMwebp_.jpg",
"product_link": "https://www.amazon.in/Amazon-Brand-Charging-Suitable-Supported/dp/B0B94JPY2N/ref\u003dsr_1_444?qid\u003d1672909146\u0026s\u003delectronics\u0026sr\u003d1-444"
},
{
"product_id": "B0B82YGCF6",
"product_name": "Tokdis MX-1 Pro 蓝牙通话智能手表 - 1.69 英寸 LCD 显示屏、多个表盘、睡眠监测器、心率和 SpO2 监测、多种运动模式、防水",
"category": "Electronics|WearableTechnology|SmartWatches",
"discounted_price": "899.0",
"actual_price": "3499.0",
"discount_percentage": "0.74",
"rating": "3.0",
"rating_count": "681",
"about_product": "【蓝牙通话手表】- Tokdis MX-1 Pro 允许您通过内置扬声器和麦克风直接从手表拨打和接听电话。这款智能手表具有拨号盘、访问最近通话的选项以及手动同步手机的联系人。|【如何激活蓝牙通话】- 要启用蓝牙通话功能,请先将其连接到 Fitpro 应用程序。连接后,手动进入手机的蓝牙设置并配对这款智能手表。配对后,您将收到通知。|【1.69 英寸高清全触摸】 - 1.69 英寸大显示屏【全金属机身】 - 这款手表具有时尚\u00
```markdown
## 智能手表时间日期问题
我遇到了一个智能手表的时间日期问题。今天日期是12月12日星期一,但它仍然显示12月10日星期六。每次都必须手动更新时间。
这款手表最初的五天工作正常,而且即使它更便宜,也应该物有所值。现在已经正常工作了两个月。

## SQL Agent with Gemini
```python
for row in rows:
stmt = insert(sales_data).values(**row)
with engine.begin() as connection:
cursor = connection.execute(stmt)
inspector = inspect(engine)
columns_info = [(col["name"], col["type"]) for col in inspector.get_columns("sales_data")]
table_description = "Columns:\n" + "\n".join([f" - {name}: {col_type}" for name, col_type in columns_info])
print(table_description)
我们创建了一个 sqlite 表并列出了数据,这些数据被导入到 sales_data 表中
from smolagents import tool,OpenAIServerModel
api_key = # Replace with your secret name
## Specify the model, which will leverage the api_key we just got
model=OpenAIServerModel(
model_id="gemini-2.0-flash-exp",
api_base="https://generativelanguage.googleapis.com/v1beta/openai/",
api_key=api_key,
temperature=0.7
)
@tool
def sql_engine(query: str) -> str:
"""
Allows you to perform SQL queries on the table. Returns a string representation of the result.
The table is named 'sales_data'. Its description is as follows:
Columns:
- product_id: INTEGER
- product_name: VARCHAR(16)
- category: VARCHAR(16)
- discounted_price: FLOAT
- actual_price: FLOAT
- discount_percentage: FLOAT
- rating: INTEGER
- rating_count: INTEGER
- about_product: VARCHAR(16)
- user_id: INTEGER
- user_name: VARCHAR(16)
- review_id: INTEGER
- review_title: VARCHAR(16)
- review_content: VARCHAR(16)
- img_link: VARCHAR(16)
- product_link: VARCHAR(16)
Args:
query: The query to perform. This should be correct SQL.
"""
output = ""
with engine.connect() as con:
rows = con.execute(text(query))
for row in rows:
output += "\n" + str(row)
return output
from smolagents import CodeAgent, HfApiModel
agent = CodeAgent(
tools=[sql_engine],
model=model,
)
agent.run("Can you give me the rating_count for each category")
*当我询问查询“*Can you give me the rating_count for each category” 时,agent 处理了 nlp 查询并生成了 sql,然后针对表“sales_data”执行了 sql,如下所示
Can you give me the rating_count for each category │
│ │
╰─ OpenAIServerModel - gemini-2.0-flash-exp ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Step 0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
─ Executing this code: ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
query = "SELECT category, SUM(rating_count) FROM sales_data GROUP BY category"
result = sql_engine(query=query)
print(result)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Execution logs:
('Computers&Accessories|Accessories&Peripherals|Cables&Accessories|Cables|USBCables', 200)
('Electronics|HomeTheater,TV&Video|Accessories|RemoteControls', 103)
('Electronics|WearableTechnology|SmartWatches', 768)
('Home&Kitchen|Heating,Cooling&AirQuality|RoomHeaters|FanHeaters', 2)
('Home&Kitchen|Kitchen&HomeAppliances|SmallKitchenAppliances|HandBlenders', 13)
('Home&Kitchen|Kitchen&HomeAppliances|SmallKitchenAppliances|JuicerMixerGrinders', 109)
('Home&Kitchen|Kitchen&HomeAppliances|SmallKitchenAppliances|VacuumSealers', 641)
('Home&Kitchen|Kitchen&HomeAppliances|WaterPurifiers&Accessories|WaterPurifierAccessories', 159)
Out: None
[Step 0: Duration 1.87 seconds| Input tokens: 2,373 | Output tokens: 77]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Step 1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
─ Executing this code: ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
query_result = sql_engine(query="SELECT category, SUM(rating_count) FROM sales_data GROUP BY category")
final_answer(query_result)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Out - Final answer:
('Computers&Accessories|Accessories&Peripherals|Cables&Accessories|Cables|USBCables', 200)
('Electronics|HomeTheater,TV&Video|Accessories|RemoteControls', 103)
('Electronics|WearableTechnology|SmartWatches', 768)
('Home&Kitchen|Heating,Cooling&AirQuality|RoomHeaters|FanHeaters', 2)
('Home&Kitchen|Kitchen&HomeAppliances|SmallKitchenAppliances|HandBlenders', 13)
('Home&Kitchen|Kitchen&HomeAppliances|SmallKitchenAppliances|JuicerMixerGrinders', 109)
('Home&Kitchen|Kitchen&HomeAppliances|SmallKitchenAppliances|VacuumSealers', 641)
('Home&Kitchen|Kitchen&HomeAppliances|WaterPurifiers&Accessories|WaterPurifierAccessories', 159)
[Step 1: Duration 0.83 seconds| Input tokens: 5,113 | Output tokens: 154]
\n('Computers&Accessories|Accessories&Peripherals|Cables&Accessories|Cables|USBCables', 200)\n('Electronics|HomeTheater,TV&Video|Accessories|RemoteControls', 103)\n('Electronics|WearableTechnology|SmartWatches', 768)\n('Home&Kitchen|Heating,Cooling&AirQuality|RoomHeaters|FanHeaters', 2)\n('Home&Kitchen|Kitchen&HomeAppliances|SmallKitchenAppliances|HandBlenders', 13)\n('Home&Kitchen|Kitchen&HomeAppliances|SmallKitchenAppliances|JuicerMixerGrinders', 109)\n('Home&Kitchen|Kitchen&HomeAppliances|SmallKitchenAppliances|VacuumSealers', 641)\n('Home&Kitchen|Kitchen&HomeAppliances|WaterPurifiers&Accessories|WaterPurifierAccessories', 159)
场景 2:获取给定股票的股票价格
使用 Code Agent 和 DuckDuckGoSearchTool 内置工具
from smolagents import CodeAgent, DuckDuckGoSearchTool, LiteLLMModel,OpenAIServerModel
import yfinance as yf
api_key = # Replace with your secret name
指定模型,该模型将利用我们刚刚获得的 api_key
model=OpenAIServerModel(
model_id="gemini-2.0-flash-exp",
api_base="https://generativelanguage.googleapis.com/v1beta/openai/",
api_key=api_key,
temperature=0.7
)
使用工具和导入定义代理
agent = CodeAgent(
tools=[DuckDuckGoSearchTool()],
additional_authorized_imports=["yfinance"],
model=model
)
运行代理以获取 Apple Inc. 的股票价格
response = agent.run(
"is if Microsoft Inc (NASDAQ: AAPL). Use the YFinance Library."
)
输出响应
print(response)
当我提出查询“获取 Microsoft Inc (NASDAQ: AAPL) 的股票价格。使用 YFinance 库。”时,代理处理了 nlp 查询并生成了输出
search_query = "current stock price of Microsoft (MSFT) in USD"
search_results = web_search(query=search_query)
print(search_results)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Execution logs:
### Search Results
[Microsoft Corporation (MSFT) Stock Price, News, Quote & History - Yahoo ...](https://finance.yahoo.com/quote/MSFT/)
Find the latest Microsoft Corporation (MSFT) stock quote, history, news and other vital information to help you with your stock trading and investing. ... Nasdaq Real Time Price • USD. Microsoft ...
[MSFT Stock Price | Microsoft Corp. Stock Quote (U.S.: Nasdaq ...](https://www.marketwatch.com/investing/stock/MSFT)
MSFT | Complete Microsoft Corp. stock news by MarketWatch. View real-time stock prices and stock quotes for a full financial overview.
[Microsoft Corp (MSFT) Stock Price & News - Google Finance](https://www.google.com/finance/quote/MSFT:NASDAQ)
Get the latest Microsoft Corp (MSFT) real-time quote, historical performance, charts, and other financial information to help you make more informed trading and investment decisions.
[Microsoft Corporation (MSFT) Real-Time Quotes - Nasdaq](https://www.nasdaq.com/market-activity/stocks/msft/real-time)
Get real-time updates on Microsoft Corporation Common Stock (MSFT) stock quotes, trades, and more. Make informed investments with Nasdaq.
[Microsoft Corporation (MSFT) Stock Price, Quote & News - Stock Analysis](https://stockanalysis.com/stocks/msft/)
Get a real-time Microsoft Corporation (MSFT) stock price quote with breaking news, financials, statistics, charts and more. ... MSFT · Real-Time Price · USD. Watchlist Compare. 408.43-2.11 (-0.51%) At
close: Feb 14, 2025, 4:00 PM. 408.10 ... But stock prices face downward pressure due to various uncertainties, with the ongoing U.S.-China ...
[Microsoft Corporation (MSFT) stock price, news, quote and history ...](https://sg.finance.yahoo.com/quote/MSFT/)
Find the latest Microsoft Corporation (MSFT) stock quote, history, news and other vital information to help you with your stock trading and investing. ... NasdaqGS - Nasdaq Real Time Price • USD.
Microsoft Corporation (MSFT) Follow. Compare. 409.64 +1.21 +(0.30%) At close: 18 February at 4:00:01 pm GMT-5 . 409.80 +0.16 ... 409.64 Current. 650 ...
[Microsoft Investor Relations - Microsoft Stock Lookup](https://www.microsoft.com/en-us/investor/stock-lookup)
D irect Stock Purchase and Dividend Reinvestment Program. Computershare, Microsoft's transfer agent, administers a direct stock purchase plan and a divident reinvestment plan for the company. To find
out more about these programs you may contact Computershare directly at (800) 285-7772, Option 1, between the hours of 8 A.M. and 8 P.M. Eastern Time, Monday through Friday, and Saturday 9 A.M ...
[MSFT Stock Chart and Price — Microsoft (NASDAQ) - TradingView](https://www.tradingview.com/symbols/NASDAQ-MSFT/)
The current price of MSFT is 409.64 USD — it has increased by 0.18% in the past 24 hours. Watch Microsoft Corp. stock price performance more closely on the chart. What is Microsoft Corp. stock ticker?
Depending on the exchange, the stock ticker may vary. For instance, ...
[Microsoft Corporation (MSFT) Stock Price, Quote, News & History - Nasdaq](https://www.nasdaq.com/market-activity/stocks/msft)
Discover real-time Microsoft Corporation Common Stock (MSFT) stock prices, quotes, historical data, news, and Insights for informed trading and investment decisions. Stay ahead with Nasdaq.
[Microsoft Corporation (MSFT) Stock Price, News, Quote & History - Yahoo ...](https://ca.finance.yahoo.com/quote/MSFT/)
Find the latest Microsoft Corporation (MSFT) stock quote, history, news and other vital information to help you with your stock trading and investing. ... NasdaqGS - Delayed Quote • USD. Microsoft
Corporation (MSFT) Follow. Compare. 408.43 -2.11 ... Current Quarterly Annual . As of 2025-02-14. Market Cap . 3.04T . Enterprise Value . 3.03T ...
Out: None
[Step 3: Duration 3.33 seconds| Input tokens: 18,430 | Output tokens: 2,240]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Step 4 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
─ Executing this code: ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
final_answer("408.43")
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Out - Final answer: 408.43
[Step 4: Duration 2.15 seconds| Input tokens: 27,058 | Output tokens: 2,494]
408.43
场景 3:使用提示生成照片
使用了 Code Agent 和 image_generation_tool 我们从 HuggingFace Spaces 导入了一个工具,并用它来生成图像。简单而强大。
from smolagents import CodeAgent,OpenAIServerModel, Tool
api_key = # Replace with your secret name
指定模型,该模型将利用我们刚刚获得的 api_key
model=OpenAIServerModel(
model_id="gemini-2.0-flash-exp",
api_base="https://generativelanguage.googleapis.com/v1beta/openai/",
api_key=api_key,
temperature=0.7
)
image_generation_tool = Tool.from_space(
"black-forest-labs/FLUX.1-schnell",
name="image_generator",
description="Generate an image from a prompt",
token="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"
)
image_generation_tool("A sunny beach")
model =model
agent = CodeAgent(tools=[image_generation_tool], model=model)
agent.run(
"Improve this prompt, then generate an image of it. prompt='smolagents by huggingface'"
)
输出:
通过这个,你了解了如何使用 Hugging Face 的 SmolAgents 创建带有示例的 AI Agent
要深入了解该框架,请查看官方 https://github.com/huggingface/smolagents