Benutzerdefinierte Tools
Erstellen Sie Tools, die der LLM in opencode aufrufen kann.
Benutzerdefinierte Tools sind Funktionen, die Sie erstellen und die der LLM waehrend Gesprachen aufrufen kann. Sie arbeiten neben den integrierten Tools von OpenCode wie read, write und bash.
Ein Tool erstellen
Tools werden als TypeScript- oder JavaScript-Dateien definiert. Die Tool-Definition kann jedoch Skripte aufrufen, die in beliebiger Sprache geschrieben sind — TypeScript oder JavaScript wird nur fur die Tool-Definition selbst verwendet.
Speicherort
Sie konnen definiert werden:
- Lokal, indem Sie sie im Verzeichnis
.opencode/tool/Ihres Projekts platzieren. - Oder global, indem Sie sie in
~/.config/opencode/tool/platzieren.
Struktur
Der einfachste Weg, Tools zu erstellen, ist die Verwendung des tool()-Helfers, der Typsicherheit und Validierung bietet.
import { tool } from "@opencode-ai/plugin"
export default tool({ description: "Projektdatenbank abfragen", args: { query: tool.schema.string().describe("SQL-Abfrage zum Ausfuhren"), }, async execute(args) { // Ihre Datenbanklogik hier return `Abfrage ausgefuhrt: ${args.query}` },})Der Dateiname wird zum Tool-Namen. Das Obige erstellt ein database-Tool.
Mehrere Tools pro Datei
Sie konnen auch mehrere Tools aus einer einzigen Datei exportieren. Jeder Export wird zu einem separaten Tool mit dem Namen <dateiname>_<exportname> :
import { tool } from "@opencode-ai/plugin"
export const add = tool({ description: "Zwei Zahlen addieren", args: { a: tool.schema.number().describe("Erste Zahl"), b: tool.schema.number().describe("Zweite Zahl"), }, async execute(args) { return args.a + args.b },})
export const multiply = tool({ description: "Zwei Zahlen multiplizieren", args: { a: tool.schema.number().describe("Erste Zahl"), b: tool.schema.number().describe("Zweite Zahl"), }, async execute(args) { return args.a * args.b },})Dies erstellt zwei Tools: math_add und math_multiply.
Argumente
Sie konnen tool.schema verwenden, was einfach Zod ist, um Argumenttypen zu definieren.
args: { query: tool.schema.string().describe("SQL-Abfrage zum Ausfuhren")}Sie konnen auch Zod direkt importieren und ein einfaches Objekt zuruckgeben:
import { z } from "zod"
export default { description: "Tool-Beschreibung", args: { param: z.string().describe("Parameterbeschreibung"), }, async execute(args, context) { // Tool-Implementierung return "Ergebnis" },}Kontext
Tools erhalten Informationen uber die aktuelle Sitzung:
import { tool } from "@opencode-ai/plugin"
export default tool({ description: "Projektinformationen abrufen", args: {}, async execute(args, context) { // Auf Kontextinformationen zugreifen const { agent, sessionID, messageID } = context return `Agent: ${agent}, Sitzung: ${sessionID}, Nachricht: ${messageID}` },})Beispiele
Ein Tool in Python schreiben
Sie konnen Ihre Tools in jeder beliebigen Sprache schreiben. Hier ist ein Beispiel, das zwei Zahlen mit Python addiert.
Erstellen Sie zuerst das Tool als Python-Skript:
import sys
a = int(sys.argv[1])b = int(sys.argv[2])print(a + b)Erstellen Sie dann die Tool-Definition, die es aufruft:
import { tool } from "@opencode-ai/plugin"
export default tool({ description: "Zwei Zahlen mit Python addieren", args: { a: tool.schema.number().describe("Erste Zahl"), b: tool.schema.number().describe("Zweite Zahl"), }, async execute(args) { const result = await Bun.$`python3 .opencode/tool/add.py ${args.a} ${args.b}`.text() return result.trim() },})Hier verwenden wir das Bun.$-Dienstprogramm, um das Python-Skript auszufuhren.