Aller au contenu

Outils Conteneurisés

AI generated translation.

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 container
const 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
})

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 = undefined
let sourceIndex = 0
defTool(
"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 wrap
source: |-
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
```
🛠️ sortie de l'outil call\_IH693jAqZaC7i3AkUa3eIFXi
exitCode: 0
stdout: ""
stderr: ""
failed: false
🤖 assistant
File ./file1.c:
```c
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
```