如果您是建立代理的新手,请务必首先阅读 代理入门 和 smolagents 导游.
代码代理 #
多个 研究 文件 这表明,让 LLM 用代码编写其操作(工具调用)要比当前的工具调用标准格式好得多,因为当前的工具调用标准格式在整个行业中都是 "将操作写成包含工具名称和使用参数的 JSON 格式"。
为什么代码更好?因为我们的代码语言是专门为表达计算机执行的操作而设计的。如果 JSON 代码段是一种更好的方式,那么这个软件包就会是用 JSON 代码段编写的,魔鬼也会嘲笑我们。
代码只是在计算机上表达操作的一种更好的方式。它有更好的
- 可组合性: 您能否像定义 python 函数一样,在 JSON 操作中嵌套 JSON 操作,或定义一组 JSON 操作以便以后重复使用?
- 对象管理: 如何存储类似于
生成图像
在 JSON 中? - 通用性: 代码可以表达任何计算机能做的事情。
- LLM 培训语料库中的表征: 为什么不利用法律硕士培训语料库中已包含大量高质量行动这一天赐良机呢?
下图说明了这一点。 可执行代码行动引发更好的 LLM 代理.

这就是为什么我们把重点放在提出代码代理上,这里指的是 python 代理,这意味着我们要花更大的精力来构建安全的 python 解释器。
本地 python 解释器 #
默认情况下 代码代理
在你的环境中运行 LLM 生成的代码。这种执行不是由普通 Python 解释器完成的:我们重新构建了一个更安全的 本地 PythonInterpreter
从头开始。该解释器专为安全而设计,其功能如下
- 将导入限制在用户明确传递的列表中
- 限制操作次数,防止无限循环和资源膨胀。
- 不会执行任何未预先定义的操作。
我们已经在许多使用案例中使用过这种方法,从未发现对环境造成任何破坏。
不过,这种解决方案也并非万无一失:我们可以想象,在某些情况下,针对恶意行为进行微调的 LLM 仍然会对环境造成危害。例如,如果你允许一个无害的软件包,如 枕头
如果您选择 LLM 引擎来处理图像,那么 LLM 可能会生成数以千计的图像存档,从而占用您的硬盘空间。如果您自己选择了 LLM 引擎,这种情况当然不太可能发生,但还是有可能发生。
因此,如果你想格外谨慎,可以使用下面描述的远程代码执行选项。
E2B 代码执行器 #
为了获得最大的安全性,您可以使用我们与 E2B 的集成,在沙箱环境中运行代码。这是一种远程执行服务,可在隔离的容器中运行代码,使代码无法影响本地环境。
为此,您需要设置您的 E2B 账户,并设置您的 E2B_API_KEY
在你的环境变量中。前往 E2B 快速入门文档 了解更多信息。
然后使用 pip install e2b-code-interpreter python-dotenv
.
现在你准备好了!
要将代码执行器设置为 E2B,只需通过标记 use_e2b_executor=True
初始化您的 代码代理
.请注意,您应该在 附加授权进口
以便执行器安装它们。
复制的
从 smolagents 导入 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?")
目前,E2B 代码执行与多代理不兼容,因为让一个代理调用本应远程执行的代码块会造成混乱。但我们正在努力添加!