当前位置: 首页 > news >正文

smolagents学习笔记系列(六)Secure code execution

这篇文章锁定官网教程 Secure code execution 章节的内容,主要介绍了smolagents是如何安全地执行LLM的输出结果。

  • 官网链接:https://huggingface.co/docs/smolagents/v1.9.2/en/tutorials/secure_code_execution

为了不浪费你的时间,下面这条提示务必阅读:

【注意】:这篇文章主要介绍的是 e2b 这个云端python解释器沙盒,但实际上存在一些编码与不兼容问题,官方在文章最末尾处承认了这一点并表示会在未来持续改进,我在运行后容易出现下面这种情况:

在这里插入图片描述

尽管如此我还是建议跟着这篇笔记过一遍,特别是文字部分内容,这样可以帮助你更好的理解 smolagents 这个框架的设计依据。


Code agents

根据官网上描述我们可以认为:LLM直接生成代码要比通过格式化内容解析得到的效果好很多,因为代码是一种计算机语言,如果LLM可以直接生成计算机语言,那么效果要高于通过文本描述再转译。

例如:你让LLM生成一段python代码用于计算斐波那契数列的指定n项,LLM直接给你返回一段代码的效果 > 将这段代码以文本的形式用json包裹,然后再解析出来。

他们的理由如下:

  1. Composability 可组合性:python代码可以将多个函数或类进行组合到一个文件中,但json文本想要实现这种组合非常困难;
  2. Object management 对象管理:json文本无法表述一个类或者对象;
  3. Generality 一般性:代码的目的是为了让你能够快速看明白功能,而json文本需要多层解析;
  4. Representation in LLM training corpus 语言模型的资源库:因为LLM在训练的时候已经包含了大量的代码语料,比起json而言对模型更友好;

综上所述,smolagents框架主推的就是 codeAgent 即使用代码执行器来完成你想要的功能。

在这里插入图片描述

既然codeAgent是smolagents框架主推的对象,那么如何保证python解释器安全运行就是需要讨论的话题


Local python interpreter

smolagents框架提供了一个python解释器用来将代码执行与本地解释器进行隔离,并通过以下三种方式确保代码执行安全:

  1. import 库动作严格限制在用户明确传递的列表中,不会自行导入指定外的库;
  2. 限制执行此处避免死循环与资源膨胀;
  3. 不会执行任何事先未定义的操作;

尽管如此也不是万无一失的,官网提到了一种情况可能会突破上面的限制损坏你本地电脑的文件系统:如果一个LLM模型被恶意fine-tune成使用Pillow循环生成10万张大小为100MB的图片,那么你的硬盘会在运行后立马爆盘

为了应对上述类似的情况,官网介绍了一种更加严格的代码执行机制 E2B


E2B code executor

E2B(Environment to Build AI Applications)实际上就是一个云端沙盒功能,既然是云端服务那自然少不了和之前一样的注册、申请API这套流程,官网没有对其进行介绍,我这里补充一下;

  1. 安装 smolagents 的 e2b 依赖:
$ pip install "smolagents[e2b]"
  1. 登录 e2b 官网: https://e2b.dev;
  2. 绑定/注册账号;
    在这里插入图片描述

这个 e2b 只要绑定后就会自动分配一个 API Key,在你的主页上显示出来,但我发现这个API是无法直接使用的,建议在 Keys 界面自己新建一个,点击 Add API Key 按钮后根据提示就可以生成一个新的Key,旧的Key直接删掉即可:

【注意】:E2B 的API Key也是不能后期查看的,生成后一定要找个地方把这个码记下来
在这里插入图片描述

然后设置环境变量:

$ export E2B_API_KEY="你的e2b API Key"

这次官网的示例竟然可以直接运行,不容易啊。

from smolagents import CodeAgent, VisitWebpageTool, HfApiModel
agent = CodeAgent(
    tools = [VisitWebpageTool()],
    model=HfApiModel(),
    additional_authorized_imports=["requests", "markdownify"],
    use_e2b_executor=True
)

agent.run("What was Abraham Lincoln's preferred pet?")

运行后会显示如下:
在这里插入图片描述

你可能会注意到有一段 404 Client Error: Not Found for url: https://www.history.com/topics/american-history/abraham-lincoln-fun-facts 错误,这个并不代表LLM或者Agent出错,而是这个网页已经不能访问了,后面你感兴趣的话可以给他一些其他链接,比如我询问Agent “苹果公司最新的产品有哪些?”,那么对应的代码就需要修改成下面的内容:

from smolagents import CodeAgent, VisitWebpageTool, HfApiModel
agent = CodeAgent(
    tools = [VisitWebpageTool()],
    model=HfApiModel(),
    additional_authorized_imports=["requests", "markdownify"],
    use_e2b_executor=True
)

agent.run("What are the latest products from Apple Inc?")       # 自己感兴趣的问题

这样执行的话就可以得到稍微能看的内容了:
在这里插入图片描述

相关文章:

  • Redis 面试题
  • RT-Thread+STM32L475VET6——TF 卡文件系统
  • 创建型模式 - 原型模式 (Prototype Pattern)
  • 【Leetcode】两数之和
  • 【Blender】三、材质篇--01,Blender材质基础 原理化BSDF
  • Go红队开发—基础语法入门
  • 如何在 Ubuntu 上安装和使用 Podman ?
  • 【STL】4.<list>
  • kotlin 知识点 七 泛型的高级特性
  • Java 入门第一课 InteliJ IDEA 的快捷操作
  • 阿里云可观测全面拥抱 OpenTelemetry 社区
  • 【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】
  • JVM相关面试题
  • 项目实战--网页五子棋(游戏房间)(6)
  • Pytorch实现之混合成员GAN训练自己的数据集
  • MySQL 使用 `WHERE` 子句时 `COUNT(*)`、`COUNT(1)` 和 `COUNT(column)` 的区别解析
  • 第2课 树莓派镜像的烧录
  • SV基础(二):数据类型
  • C++ day6
  • 本地部署DeepSeek的硬件配置建议
  • LPR名副其实吗?如果有所偏离又该如何调整?
  • 2025全球城市科技传播能力指数出炉,上海位列第六
  • 马上评|家长抱婴儿值护学岗,如何避免“被自愿”?
  • 乌克兰官员与法德英美四国官员举行会谈
  • 中国情怀:时代记录与家国镜相|澎湃·镜相第三届非虚构写作大赛暨七猫第六届百万奖金现实题材征文大赛征稿启事
  • 外交部:国际社会广泛理解和支持中方不同意台参加世卫大会的决定