Outils Conteneurisés
Ce guide montre comment créer un outil qui appelle un exécutable dans un conteneur. C’est une méthode flexible et sécurisée pour exécuter des outils qui peuvent avoir des dépendances ou des préoccupations de sécurité.
Cela se fait généralement en créant un conteneur avec une image particulière (ici gcc
).
// start a fresh containerconst container = await host.container({ image: "gcc",})
puis en réutilisant le conteneur dans les invocations de l’outil. Vous pouvez retourner le résultat de container.exec
à partir de l’outil et il sera géré par le runtime.
defTool(..., async (args) => { ... // use container in tool const res = await container.exec("gcc", ["main.c"]) return res})
Exemple : GCC en tant qu’outil
Section intitulée « Exemple : GCC en tant qu’outil »Cet exemple utilise l’image officielle de docker GCC pour compiler un programme en C en tant qu’outil. Le moteur LLM invoquera l’outil pour valider la syntaxe du code généré.
script({ model: "large",})let container = undefinedlet sourceIndex = 0defTool( "gcc", "GNU Compiler Collection (GCC), C/C++ compiler", { source: "", }, async (args) => { const { source } = args
if (!container) // lazy allocation of container container = await host.container({ image: "gcc", })
const fn = `tmp/${sourceIndex++}/main.c` await container.writeText(fn, source) const res = await container.exec("gcc", [fn]) return res })
$`Generate a valid C program that prints "Hello, World!"`
👤 utilisateur
Generate a valid C program that prints "Hello, World!"
🤖 assistant
📠 appel d'outil gcc
(call\_IH693jAqZaC7i3AkUa3eIFXi
)
```yaml wrapsource: |- #include <stdio.h>
int main() { printf("Hello, World!\n"); return 0; }```
🛠️ sortie de l'outil call\_IH693jAqZaC7i3AkUa3eIFXi
exitCode: 0stdout: ""stderr: ""failed: false
🤖 assistant
File ./file1.c:
```c#include <stdio.h>
int main() { printf("Hello, World!\n"); return 0;}```