import{s as ze,f as Ge,o as Qe,n as Ie}from"../chunks/scheduler.f6319a2a.js";import{S as Ae,i as Xe,g as i,s as o,r as f,A as Ye,h as a,f as l,c as s,j as qe,u as c,x as p,k as Ce,y as Re,a as n,v as g,d as h,t as d,w as M}from"../chunks/index.85aa684c.js";import{T as Fe}from"../chunks/Tip.3d397a88.js";import{C as Oe}from"../chunks/CodeBlock.3400fc53.js";import{D as De}from"../chunks/DocNotebookDropdown.3fc3604b.js";import{H as $e,E as Ke}from"../chunks/getInferenceSnippets.743412b2.js";function et(A){let u,b='如果你是第一次构建 agent，请先阅读 <a href="../conceptual_guides/intro_agents">agent 介绍</a> 和 <a href="../guided_tour">smolagents 导览</a>。';return{c(){u=i("p"),u.innerHTML=b},l(m){u=a(m,"P",{"data-svelte-h":!0}),p(u)!=="svelte-1m405yx"&&(u.innerHTML=b)},m(m,G){n(m,u,G)},p:Ie,d(m){m&&l(u)}}}function tt(A){let u,b,m,G,_,X,$,Y,r,R,C,F,y,ye='<a href="https://huggingface.co/papers/2402.01030" rel="nofollow">多项</a> <a href="https://huggingface.co/papers/2411.01747" rel="nofollow">研究</a> <a href="https://huggingface.co/papers/2401.00812" rel="nofollow">表明</a>，让大语言模型用代码编写其动作（工具调用）比当前标准的工具调用格式要好得多，目前行业标准是 “将动作写成包含工具名称和参数的 JSON” 的各种变体。',O,v,ve="为什么代码更好？因为我们专门为计算机执行的动作而设计编程语言。如果 JSON 片段是更好的方式，那么这个工具包就应该是用 JSON 片段编写的，魔鬼就会嘲笑我们。",D,x,xe="代码就是表达计算机动作的更好方式。它具有更好的：",K,w,we="<li><strong>组合性</strong>：你能像定义 Python 函数那样，在 JSON 动作中嵌套其他 JSON 动作，或者定义一组 JSON 动作以便以后重用吗？</li> <li><strong>对象管理</strong>：你如何在 JSON 中存储像 <code>generate_image</code> 这样的动作的输出？</li> <li><strong>通用性</strong>：代码是为了简单地表达任何可以让计算机做的事情而构建的。</li> <li><strong>在 LLM 训练语料库中的表示</strong>：天赐良机，为什么不利用已经包含在 LLM 训练语料库中的大量高质量动作呢？</li>",ee,T,Te='下图展示了这一点，取自 <a href="https://huggingface.co/papers/2402.01030" rel="nofollow">可执行代码动作引出更好的 LLM 智能体</a>。',te,Q,Le,le,L,Ue="这就是为什么我们强调提出代码智能体，在本例中是 Python 智能体，这意味着我们要在构建安全的 Python 解释器上投入更多精力。",ne,U,oe,P,Pe=`默认情况下，<code>CodeAgent</code> 会在你的环境中运行 LLM 生成的代码。
这个执行不是由普通的 Python 解释器完成的：我们从零开始重新构建了一个更安全的 <code>LocalPythonExecutor</code>。
这个解释器通过以下方式设计以确保安全：`,se,J,Je="<li>将导入限制为用户显式传递的列表</li> <li>限制操作次数以防止无限循环和资源膨胀</li> <li>不会执行任何未预定义的操作</li>",ie,k,ke="我们已经在许多用例中使用了这个解释器，从未观察到对环境造成任何损害。",ae,H,He=`然而，这个解决方案并不是万无一失的：可以想象，如果 LLM 被微调用于恶意操作，仍然可能损害你的环境。例如，如果你允许像 <code>Pillow</code> 这样无害的包处理图像，LLM 可能会生成数千张图像保存以膨胀你的硬盘。
如果你自己选择了 LLM 引擎，这当然不太可能，但它可能会发生。`,pe,j,je="所以如果你想格外谨慎，可以使用下面描述的远程代码执行选项。",ue,B,me,E,Be="为了最大程度的安全性，你可以使用我们与 E2B 的集成在沙盒环境中运行代码。这是一个远程执行服务，可以在隔离的容器中运行你的代码，使代码无法影响你的本地环境。",re,V,Ee='为此，你需要设置你的 E2B 账户并在环境变量中设置 <code>E2B_API_KEY</code>。请前往 <a href="https://e2b.dev/docs/quickstart" rel="nofollow">E2B 快速入门文档</a> 了解更多信息。',fe,Z,Ve="然后你可以通过 <code>pip install e2b-code-interpreter python-dotenv</code> 安装它。",ce,S,Ze="现在你已经准备好了！",ge,N,Se=`要将代码执行器设置为 E2B，只需在初始化 <code>CodeAgent</code> 时传递标志 <code>executor_type=&quot;e2b&quot;</code>。
请注意，你应该将所有工具的依赖项添加到 <code>additional_authorized_imports</code> 中，以便执行器安装它们。`,he,W,de,q,Ne="目前 E2B 代码执行暂不兼容多 agent——因为把 agent 调用放在应该在远程执行的代码块里，是非常混乱的。但我们正在努力做到这件事！",Me,z,be,I,_e;return _=new $e({props:{title:"安全代码执行",local:"安全代码执行",headingTag:"h1"}}),$=new De({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Mixed",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/smolagents_doc/zh/secure_code_execution.ipynb"},{label:"PyTorch",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/smolagents_doc/zh/pytorch/secure_code_execution.ipynb"},{label:"TensorFlow",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/smolagents_doc/zh/tensorflow/secure_code_execution.ipynb"},{label:"Mixed",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/smolagents_doc/zh/secure_code_execution.ipynb"},{label:"PyTorch",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/smolagents_doc/zh/pytorch/secure_code_execution.ipynb"},{label:"TensorFlow",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/smolagents_doc/zh/tensorflow/secure_code_execution.ipynb"}]}}),r=new Fe({props:{warning:!1,$$slots:{default:[et]},$$scope:{ctx:A}}}),C=new $e({props:{title:"代码智能体",local:"代码智能体",headingTag:"h3"}}),U=new $e({props:{title:"本地 Python 解释器",local:"本地-python-解释器",headingTag:"h3"}}),B=new $e({props:{title:"E2B 代码执行器",local:"e2b-代码执行器",headingTag:"h3"}}),W=new Oe({props:{code:"ZnJvbSUyMHNtb2xhZ2VudHMlMjBpbXBvcnQlMjBDb2RlQWdlbnQlMkMlMjBWaXNpdFdlYnBhZ2VUb29sJTJDJTIwSW5mZXJlbmNlQ2xpZW50TW9kZWwlMEFhZ2VudCUyMCUzRCUyMENvZGVBZ2VudCglMEElMjAlMjAlMjAlMjB0b29scyUyMCUzRCUyMCU1QlZpc2l0V2VicGFnZVRvb2woKSU1RCUyQyUwQSUyMCUyMCUyMCUyMG1vZGVsJTNESW5mZXJlbmNlQ2xpZW50TW9kZWwoKSUyQyUwQSUyMCUyMCUyMCUyMGFkZGl0aW9uYWxfYXV0aG9yaXplZF9pbXBvcnRzJTNEJTVCJTIycmVxdWVzdHMlMjIlMkMlMjAlMjJtYXJrZG93bmlmeSUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGV4ZWN1dG9yX3R5cGUlM0QlMjJlMmIlMjIlMEEpJTBBJTBBYWdlbnQucnVuKCUyMldoYXQlMjB3YXMlMjBBYnJhaGFtJTIwTGluY29sbidzJTIwcHJlZmVycmVkJTIwcGV0JTNGJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> smolagents <span class="hljs-keyword">import</span> CodeAgent, VisitWebpageTool, InferenceClientModel
agent = CodeAgent(
    tools = [VisitWebpageTool()],
    model=InferenceClientModel(),
    additional_authorized_imports=[<span class="hljs-string">&quot;requests&quot;</span>, <span class="hljs-string">&quot;markdownify&quot;</span>],
    executor_type=<span class="hljs-string">&quot;e2b&quot;</span>
)

agent.run(<span class="hljs-string">&quot;What was Abraham Lincoln&#x27;s preferred pet?&quot;</span>)`,wrap:!1}}),z=new Ke({props:{source:"https://github.com/huggingface/smolagents/blob/main/docs/source/zh/tutorials/secure_code_execution.md"}}),{c(){u=i("meta"),b=o(),m=i("p"),G=o(),f(_.$$.fragment),X=o(),f($.$$.fragment),Y=o(),f(r.$$.fragment),R=o(),f(C.$$.fragment),F=o(),y=i("p"),y.innerHTML=ye,O=o(),v=i("p"),v.textContent=ve,D=o(),x=i("p"),x.textContent=xe,K=o(),w=i("ul"),w.innerHTML=we,ee=o(),T=i("p"),T.innerHTML=Te,te=o(),Q=i("img"),le=o(),L=i("p"),L.textContent=Ue,ne=o(),f(U.$$.fragment),oe=o(),P=i("p"),P.innerHTML=Pe,se=o(),J=i("ul"),J.innerHTML=Je,ie=o(),k=i("p"),k.textContent=ke,ae=o(),H=i("p"),H.innerHTML=He,pe=o(),j=i("p"),j.textContent=je,ue=o(),f(B.$$.fragment),me=o(),E=i("p"),E.textContent=Be,re=o(),V=i("p"),V.innerHTML=Ee,fe=o(),Z=i("p"),Z.innerHTML=Ve,ce=o(),S=i("p"),S.textContent=Ze,ge=o(),N=i("p"),N.innerHTML=Se,he=o(),f(W.$$.fragment),de=o(),q=i("p"),q.textContent=Ne,Me=o(),f(z.$$.fragment),be=o(),I=i("p"),this.h()},l(e){const t=Ye("svelte-u9bgzb",document.head);u=a(t,"META",{name:!0,content:!0}),t.forEach(l),b=s(e),m=a(e,"P",{}),qe(m).forEach(l),G=s(e),c(_.$$.fragment,e),X=s(e),c($.$$.fragment,e),Y=s(e),c(r.$$.fragment,e),R=s(e),c(C.$$.fragment,e),F=s(e),y=a(e,"P",{"data-svelte-h":!0}),p(y)!=="svelte-50jhgj"&&(y.innerHTML=ye),O=s(e),v=a(e,"P",{"data-svelte-h":!0}),p(v)!=="svelte-wsqcpy"&&(v.textContent=ve),D=s(e),x=a(e,"P",{"data-svelte-h":!0}),p(x)!=="svelte-1jskndn"&&(x.textContent=xe),K=s(e),w=a(e,"UL",{"data-svelte-h":!0}),p(w)!=="svelte-1rh1aog"&&(w.innerHTML=we),ee=s(e),T=a(e,"P",{"data-svelte-h":!0}),p(T)!=="svelte-7kkwmk"&&(T.innerHTML=Te),te=s(e),Q=a(e,"IMG",{src:!0}),le=s(e),L=a(e,"P",{"data-svelte-h":!0}),p(L)!=="svelte-n69i"&&(L.textContent=Ue),ne=s(e),c(U.$$.fragment,e),oe=s(e),P=a(e,"P",{"data-svelte-h":!0}),p(P)!=="svelte-st9pa7"&&(P.innerHTML=Pe),se=s(e),J=a(e,"UL",{"data-svelte-h":!0}),p(J)!=="svelte-r5ls43"&&(J.innerHTML=Je),ie=s(e),k=a(e,"P",{"data-svelte-h":!0}),p(k)!=="svelte-14u3l5f"&&(k.textContent=ke),ae=s(e),H=a(e,"P",{"data-svelte-h":!0}),p(H)!=="svelte-hm1f2r"&&(H.innerHTML=He),pe=s(e),j=a(e,"P",{"data-svelte-h":!0}),p(j)!=="svelte-1iwo0wb"&&(j.textContent=je),ue=s(e),c(B.$$.fragment,e),me=s(e),E=a(e,"P",{"data-svelte-h":!0}),p(E)!=="svelte-1mwu7as"&&(E.textContent=Be),re=s(e),V=a(e,"P",{"data-svelte-h":!0}),p(V)!=="svelte-1ont1lb"&&(V.innerHTML=Ee),fe=s(e),Z=a(e,"P",{"data-svelte-h":!0}),p(Z)!=="svelte-z794n4"&&(Z.innerHTML=Ve),ce=s(e),S=a(e,"P",{"data-svelte-h":!0}),p(S)!=="svelte-lnqw0e"&&(S.textContent=Ze),ge=s(e),N=a(e,"P",{"data-svelte-h":!0}),p(N)!=="svelte-vqe432"&&(N.innerHTML=Se),he=s(e),c(W.$$.fragment,e),de=s(e),q=a(e,"P",{"data-svelte-h":!0}),p(q)!=="svelte-11hsivv"&&(q.textContent=Ne),Me=s(e),c(z.$$.fragment,e),be=s(e),I=a(e,"P",{}),qe(I).forEach(l),this.h()},h(){Ce(u,"name","hf:doc:metadata"),Ce(u,"content",lt),Ge(Q.src,Le="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/code_vs_json_actions.png")||Ce(Q,"src",Le)},m(e,t){Re(document.head,u),n(e,b,t),n(e,m,t),n(e,G,t),g(_,e,t),n(e,X,t),g($,e,t),n(e,Y,t),g(r,e,t),n(e,R,t),g(C,e,t),n(e,F,t),n(e,y,t),n(e,O,t),n(e,v,t),n(e,D,t),n(e,x,t),n(e,K,t),n(e,w,t),n(e,ee,t),n(e,T,t),n(e,te,t),n(e,Q,t),n(e,le,t),n(e,L,t),n(e,ne,t),g(U,e,t),n(e,oe,t),n(e,P,t),n(e,se,t),n(e,J,t),n(e,ie,t),n(e,k,t),n(e,ae,t),n(e,H,t),n(e,pe,t),n(e,j,t),n(e,ue,t),g(B,e,t),n(e,me,t),n(e,E,t),n(e,re,t),n(e,V,t),n(e,fe,t),n(e,Z,t),n(e,ce,t),n(e,S,t),n(e,ge,t),n(e,N,t),n(e,he,t),g(W,e,t),n(e,de,t),n(e,q,t),n(e,Me,t),g(z,e,t),n(e,be,t),n(e,I,t),_e=!0},p(e,[t]){const We={};t&2&&(We.$$scope={dirty:t,ctx:e}),r.$set(We)},i(e){_e||(h(_.$$.fragment,e),h($.$$.fragment,e),h(r.$$.fragment,e),h(C.$$.fragment,e),h(U.$$.fragment,e),h(B.$$.fragment,e),h(W.$$.fragment,e),h(z.$$.fragment,e),_e=!0)},o(e){d(_.$$.fragment,e),d($.$$.fragment,e),d(r.$$.fragment,e),d(C.$$.fragment,e),d(U.$$.fragment,e),d(B.$$.fragment,e),d(W.$$.fragment,e),d(z.$$.fragment,e),_e=!1},d(e){e&&(l(b),l(m),l(G),l(X),l(Y),l(R),l(F),l(y),l(O),l(v),l(D),l(x),l(K),l(w),l(ee),l(T),l(te),l(Q),l(le),l(L),l(ne),l(oe),l(P),l(se),l(J),l(ie),l(k),l(ae),l(H),l(pe),l(j),l(ue),l(me),l(E),l(re),l(V),l(fe),l(Z),l(ce),l(S),l(ge),l(N),l(he),l(de),l(q),l(Me),l(be),l(I)),l(u),M(_,e),M($,e),M(r,e),M(C,e),M(U,e),M(B,e),M(W,e),M(z,e)}}}const lt='{"title":"安全代码执行","local":"安全代码执行","sections":[{"title":"代码智能体","local":"代码智能体","sections":[],"depth":3},{"title":"本地 Python 解释器","local":"本地-python-解释器","sections":[],"depth":3},{"title":"E2B 代码执行器","local":"e2b-代码执行器","sections":[],"depth":3}],"depth":1}';function nt(A){return Qe(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class mt extends Ae{constructor(u){super(),Xe(this,u,nt,tt,ze,{})}}export{mt as component};
