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.
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> :
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 :
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 :
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 :
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.