定制工具
創建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(即佐德)來定義參數類型。
args: { query: tool.schema.string().describe("SQL query to execute")}您還可以直接導入佐德並返回一個普通對象:
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 作為 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 腳本。