Aller au contenu

Outils personnalisés

Creer des outils que le LLM peut appeler dans opencode.

Les outils personnalisés sont des fonctions que vous creez et que le LLM peut appeler pendant les conversations. Ils fonctionnent aux cote des outils integres d’OpenCode comme read, write et bash.


Creer un outil

Les outils sont definis en tant que fichiers TypeScript ou JavaScript. Cependant, la definition de l’outil peut appeler des scripts ecrits dans n’importe quel langage — TypeScript ou JavaScript est utilise uniquement pour la definition de l’outil elle-meme.


Emplacement

Ils peuvent etre definis :

  • Localement en les plaçant dans le repertoire .opencode/tool/ de votre projet.
  • Ou globalement, en les plaçant dans ~/.config/opencode/tool/.

Structure

Le moyen le plus simple de creer des outils est d’utiliser l’assistant tool() qui fournit la securite du type et la validation.

.opencode/tool/database.ts
import { tool } from "@opencode-ai/plugin"
export default tool({
description: "Interroger la base de donnees du projet",
args: {
query: tool.schema.string().describe("Requete SQL a executer"),
},
async execute(args) {
// Votre logique de base de donnees ici
return `Requete executee : ${args.query}`
},
})

Le nom de fichier devient le nom de l’outil. Ce qui precede cree un outil database.


Plusieurs outils par fichier

Vous pouvez egalement exporter plusieurs outils a partir d’un seul fichier. Chaque export devient un outil distinct avec le nom <nomfichier>_<nomexport> :

.opencode/tool/math.ts
import { tool } from "@opencode-ai/plugin"
export const add = tool({
description: "Additionner deux nombres",
args: {
a: tool.schema.number().describe("Premier nombre"),
b: tool.schema.number().describe("Deuxieme nombre"),
},
async execute(args) {
return args.a + args.b
},
})
export const multiply = tool({
description: "Multiplier deux nombres",
args: {
a: tool.schema.number().describe("Premier nombre"),
b: tool.schema.number().describe("Deuxieme nombre"),
},
async execute(args) {
return args.a * args.b
},
})

Cela cree deux outils : math_add et math_multiply.


Arguments

Vous pouvez utiliser tool.schema, qui est simplement Zod, pour definir des types d’arguments.

args: {
query: tool.schema.string().describe("Requete SQL a executer")
}

Vous pouvez egalement importer Zod directement et renvoyer un objet brut :

import { z } from "zod"
export default {
description: "Description de l'outil",
args: {
param: z.string().describe("Description du parametre"),
},
async execute(args, context) {
// Implementation de l'outil
return "resultat"
},
}

Contexte

Les outils recoivent des informations sur la session en cours :

.opencode/tool/project.ts
import { tool } from "@opencode-ai/plugin"
export default tool({
description: "Obtenir des informations sur le projet",
args: {},
async execute(args, context) {
// Acceder aux informations de contexte
const { agent, sessionID, messageID } = context
return `Agent : ${agent}, Session : ${sessionID}, Message : ${messageID}`
},
})

Exemples

Ecrire un outil en Python

Vous pouvez ecrire vos outils dans n’importe quel langage de votre choix. Voici un exemple qui additionne deux nombres en utilisant Python.

Tout d’abord, creez l’outil en tant que script Python :

.opencode/tool/add.py
import sys
a = int(sys.argv[1])
b = int(sys.argv[2])
print(a + b)

Ensuite, creez la definition de l’outil qui l’appelle :

.opencode/tool/python-add.ts
import { tool } from "@opencode-ai/plugin"
export default tool({
description: "Additionner deux nombres en utilisant Python",
args: {
a: tool.schema.number().describe("Premier nombre"),
b: tool.schema.number().describe("Deuxieme nombre"),
},
async execute(args) {
const result = await Bun.$`python3 .opencode/tool/add.py ${args.a} ${args.b}`.text()
return result.trim()
},
})

Ici, nous utilisons l’utilitaire Bun.$ pour executer le script Python.