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

news/2025/2/26 6:14:28

这篇文章锁定官网教程 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解释器安全运行就是需要讨论的话题


python_interpreter_32">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"

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

python">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 “苹果公司最新的产品有哪些?”,那么对应的代码就需要修改成下面的内容:

python">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?")       # 自己感兴趣的问题

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


http://www.niftyadmin.cn/n/5868162.html

相关文章

JAVAweb之过滤器,监听器

文章目录 过滤器认识生命周期FilterConfigFilterChain过滤器执行顺序应用场景代码 监听器认识ServletContextListenerHttpSessionListenerServletRequestListener代码 过滤器 认识 Java web三大组件之一,与Servlet相似。过滤器是用来拦截请求的,而非处…

python绑定udp时使用127.0.0.1作为ip,无法sendto,报错Invalid argument

在 Python 中使用 UDP 套接字进行通信时,绑定127.0.0.1作为 IP 地址后无法使用sendto方法发送数据,可能由多种原因导致 这里是其中一个原因: 127.0.0.1 是本地回环地址,只能用于本机内部的进程间通信, 如果你绑定到 …

《OpenCV》—— 背景建模

背景建模是什么? 背景建模的意义? 通过背景建模,我们可以实现很多应用,例如运动检测、目标跟踪 背景建模的方法 帧差法 帧差法的原理 基于 K 近邻的前景分割算法(KNN) 原理 基于 K 近邻的前景分割算法…

pytest下放pytest.ini文件就导致报错:ERROR: file or directory not found: #

pytest下放pytest.ini文件就导致报错:ERROR: file or directory not found: # 如下: 项目文件目录如下: pytest.ini文件内容: [pytest] addopts -v -s --alluredir ./allure-results # 自动添加的命令行参数:# -…

【利用conda配置管理Python版本和依赖环境】

1. 创建新的Python环境 # conda create -n [虚拟环境名] python[python指定的版本] # -y直接安装不用询问,没有时,会提示询问等待用户确定才安装 conda create -n pygnu python3.10 -y验证并检查新建的Python环境 conda activate pygun python --versi…

uni-app 开发 App 、 H5 横屏签名(基于lime-signature)

所用插件&#xff1a;lime-signature 使用到 CSS 特性 绝对定位transform 旋转transform-origin transform 原点 复习一下定位元素&#xff08;相对定位、绝对定位、粘性定位&#xff09; 代码# <template><view class"signature-page"><view clas…

Java多线程中的死锁问题

1.什么是死锁 线程在获取资源的时候&#xff0c;由于获取不到&#xff0c;导致线程卡死&#xff08;阻塞&#xff09;&#xff0c;程序就不执行了。 2.发生死锁的情况 1.一个线程获取一把锁 一个线程如果同时获取一把锁两次&#xff0c;如果是可重入锁&#xff0c;就没有问…

Maven 从下载到实战,xml帮助文档

一、Maven 免费下载 1. 官方下载地址 官网推荐&#xff1a;访问 Maven 官网&#xff0c;选择最新稳定版本&#xff08;如 3.8.1 或 3.6.3&#xff09;的 bin.zip 文件179。 国内镜像&#xff1a;若官网下载缓慢&#xff0c;可使用以下网盘资源&#xff08;注意版权风险&#…