الأدوات المخصصة
أنشئ أدوات يمكن لـ LLM استدعاؤها في opencode.
الأدوات المخصصة هي دوال تنشئها يمكن لـ LLM استدعاؤها أثناء المحادثات. تعمل جنبا إلى جنب مع الأدوات المدمجة في opencode مثل read وwrite وbash.
إنشاء أداة
تُعرّف الأدوات كملفات TypeScript أو JavaScript. لكن تعريف الأداة يمكنه استدعاء سكربتات مكتوبة بأي لغة — إذ تُستخدم TypeScript أو JavaScript فقط لتعريف الأداة نفسه.
الموقع
يمكن تعريفها:
- محليا بوضعها في مجلد
.opencode/tools/داخل مشروعك. - أو عالميا بوضعها في
~/.config/opencode/tools/.
البنية
أسهل طريقة لإنشاء أدوات هي استخدام المساعد tool() الذي يوفر أمان الأنواع والتحقق.
import { tool } from "@opencode-ai/plugin"
export default tool({ description: "Query the project database", args: { query: tool.schema.string().describe("SQL query to execute"), }, async execute(args) { // Your database logic here return `Executed query: ${args.query}` },})يصبح اسم الملف هو اسم الأداة. المثال أعلاه ينشئ أداة باسم database.
عدة أدوات في ملف واحد
يمكنك أيضا تصدير عدة أدوات من ملف واحد. يصبح كل تصدير أداة مستقلة باسم <filename>_<exportname>:
import { tool } from "@opencode-ai/plugin"
export const add = tool({ description: "Add two numbers", args: { a: tool.schema.number().describe("First number"), b: tool.schema.number().describe("Second number"), }, async execute(args) { return args.a + args.b },})
export const multiply = tool({ description: "Multiply two numbers", args: { a: tool.schema.number().describe("First number"), b: tool.schema.number().describe("Second number"), }, async execute(args) { return args.a * args.b },})ينشئ هذا أداتين: math_add وmath_multiply.
الوسائط
يمكنك استخدام tool.schema، وهو في الأساس Zod، لتعريف أنواع الوسائط.
args: { query: tool.schema.string().describe("SQL query to execute")}يمكنك أيضا استيراد Zod مباشرة وإرجاع كائن عادي:
import { z } from "zod"
export default { description: "Tool description", args: { param: z.string().describe("Parameter description"), }, async execute(args, context) { // Tool implementation return "result" },}السياق
تستقبل الأدوات سياقا حول الجلسة الحالية:
import { tool } from "@opencode-ai/plugin"
export default tool({ description: "Get project information", args: {}, async execute(args, context) { // Access context information const { agent, sessionID, messageID, directory, worktree } = context return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}` },})استخدم context.directory لدليل العمل الخاص بالجلسة.
استخدم context.worktree لجذر شجرة العمل (worktree) في git.
أمثلة
كتابة أداة بلغة Python
يمكنك كتابة أدواتك بأي لغة تريدها. إليك مثالا يجمع رقمين باستخدام Python.
أولا، أنشئ الأداة كسكربت Python:
import sys
a = int(sys.argv[1])b = int(sys.argv[2])print(a + b)ثم أنشئ تعريف الأداة الذي يستدعيه:
import { tool } from "@opencode-ai/plugin"import path from "path"
export default tool({ description: "Add two numbers using Python", args: { a: tool.schema.number().describe("First number"), b: tool.schema.number().describe("Second number"), }, async execute(args, context) { const script = path.join(context.worktree, ".opencode/tools/add.py") const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text() return result.trim() },})هنا نستخدم أداة Bun.$ لتشغيل سكربت Python.