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

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

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


http://www.kler.cn/a/562335.html

相关文章:

  • 文件上传漏洞学习笔记
  • VUE 获取视频时长,无需修改数据库,前提当前查看视频可以得到时长
  • 第15章-超声波避障功能 HC-SR04超声波测距模块详解STM32超声波测距
  • Fisher信息矩阵(Fisher Information Matrix, FIM)与自然梯度下降:机器学习中的优化利器
  • KafkaTool
  • 使用 Redis 实现分布式锁
  • P8597 [蓝桥杯 2013 省 B] 翻硬币
  • TCP fast open
  • 存储产品和数据库产品之间有没有竞争关系
  • 了解大模型LLM:部署、优化与框架
  • 原生php实现redis缓存配置和使用方法
  • Android构建系统 - 01 环境准备
  • 深度学习-130-RAG技术之基于Anything LLM搭建本地私人知识库的应用策略问题总结(一)
  • 电脑不能正常启动了怎么办?查看解决方法
  • SQLite 删除表
  • 金和OA-C6 IncentivePlanFulfillAppprove sql注入漏洞复现(CNVD-2023-1)(附脚本)
  • UE5销毁Actor,移动Actor,简单的空气墙的制作
  • Redis面试题----MySQL 里有 2000w 数据,Redis 中只存 20w 的数据,如何保证 Redis 中的数据都是热点数据?
  • Unity游戏制作中的C#基础(5)条件语句和循环语句知识点全解析
  • 【音视频】音视频录制、播放原理