Se siete alle prime armi con la costruzione di agenti, assicuratevi di leggere prima la sezione introduzione agli agenti e il visita guidata agli smolagent.
Codice agenti #
Multiplo ricerca documenti hanno dimostrato che il fatto che l'LLM scriva le sue azioni (le chiamate agli strumenti) in codice è molto meglio dell'attuale formato standard per le chiamate agli strumenti, che in tutto il settore ha diverse sfumature di "scrittura delle azioni come un JSON di nomi di strumenti e argomenti da usare".
Perché il codice è migliore? Perché abbiamo creato i nostri linguaggi di codice appositamente per esprimere al meglio le azioni eseguite da un computer. Se gli snippet JSON fossero un modo migliore, questo pacchetto sarebbe stato scritto in snippet JSON e il diavolo starebbe ridendo di noi.
Il codice è solo un modo migliore per esprimere le azioni su un computer. È migliore:
- Compostezza: è possibile annidare le azioni JSON l'una nell'altra, o definire un insieme di azioni JSON da riutilizzare in seguito, nello stesso modo in cui si può definire una funzione python?
- Gestione degli oggetti: come si memorizza l'output di un'azione come
generare_immagine
in JSON? - Generalità: Il codice è costruito per esprimere semplicemente tutto ciò che si può far fare a un computer.
- Rappresentazione nel corpus di formazione LLM: perché non sfruttare questa benedizione del cielo che ha già incluso un sacco di azioni di qualità nel corpus formativo di LLM?
Questo è illustrato nella figura seguente, tratta da Le azioni del codice eseguibile implicano agenti LLM migliori.

Per questo motivo abbiamo posto l'accento sulla proposta di agenti di codice, in questo caso agenti python, il che significava impegnarsi maggiormente nella costruzione di interpreti python sicuri.
Interprete python locale #
Per impostazione predefinita, l'opzione CodiceAgente
esegue il codice generato da LLM nel vostro ambiente. Questa esecuzione non viene eseguita dall'interprete Python standard: abbiamo ricostruito un interprete più sicuro. Interprete localePython
da zero. Questo interprete è progettato per la sicurezza da:
- Limitare le importazioni a un elenco esplicitamente passato dall'utente
- Limitare il numero di operazioni per evitare loop infiniti e l'aumento delle risorse.
- Non eseguirà alcuna operazione che non sia predefinita.
Lo abbiamo utilizzato in molti casi d'uso, senza mai osservare alcun danno all'ambiente.
Tuttavia questa soluzione non è a prova di bomba: si potrebbero immaginare occasioni in cui LLM ottimizzati per azioni maligne potrebbero comunque danneggiare l'ambiente. Per esempio, se si è permesso a un pacchetto innocuo come Cuscino
per elaborare le immagini, LLM potrebbe generare migliaia di salvataggi di immagini che riempirebbero il disco rigido. Non è certo probabile se avete scelto voi stessi il motore LLM, ma potrebbe accadere.
Per questo motivo, se volete essere ancora più prudenti, potete utilizzare l'opzione di esecuzione di codice remoto descritta di seguito.
Esecutore di codice E2B #
Per ottenere la massima sicurezza, è possibile utilizzare la nostra integrazione con E2B per eseguire il codice in un ambiente sandbox. Si tratta di un servizio di esecuzione remota che esegue il codice in un contenitore isolato, rendendo impossibile che il codice influisca sull'ambiente locale.
A tal fine, è necessario configurare il proprio account E2B e impostare il proprio account E2B_API_KEY
nelle variabili d'ambiente. Andate a Documentazione di avvio rapido di E2B per maggiori informazioni.
Quindi si può installare con pip installare e2b-code-interpreter python-dotenv
.
Ora siete pronti!
Per impostare l'esecutore del codice su E2B, è sufficiente passare il flag use_e2b_executor=True
quando si inizializzano i file CodiceAgente
. Si noti che è necessario aggiungere tutte le dipendenze dello strumento in importazioni_autorizzate_aggiuntive
in modo che l'esecutore li installi.
Copiato
da smolagents import CodeAgent, VisitWebpageTool, HfApiModel agent = CodeAgent( strumenti = [VisitWebpageTool()], model=HfApiModel(), additional_authorized_imports=["requests", "markdownify"], use_e2b_executor=True ) agent.run("Qual era l'animale domestico preferito da Abraham Lincoln?")
Al momento l'esecuzione del codice E2B non è compatibile con gli agenti multipli, perché un agente che chiama un blob di codice che dovrebbe essere eseguito in remoto è un casino. Ma stiamo lavorando per aggiungerlo!