Files
tf_code/packages/web/src/content/docs/zh-tw/custom-tools.mdx
2026-02-09 18:11:59 -06:00

171 lines
4.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 定制工具
description: 創建LLM可以在opencode中調用的工具。
---
自定義工具是您創建的函數LLM 可以在對話期間調用。它們與 opencode 的 [內置工具](/docs/tools) 一起工作,例如 `read`、`write` 和 `bash`。
---
## 創建工具
工具定義為 **TypeScript** 或 **JavaScript** 文件。但是,工具定義可以調用用 **任何語言** 編寫的腳本 - TypeScript 或 JavaScript 僅用於工具定義本身。
---
### 地點
它們可以定義為:
- 通過將它們放在項目的 `.opencode/tools/` 目錄中來本地進行。
- 或者在全局範圍內,將它們放置在 `~/.config/opencode/tools/` 中。
---
### 結構
創建工具的最簡單方法是使用 `tool()` 幫助程序,它提供類型安全和驗證。
```ts title=".opencode/tools/database.ts" {1}
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>`**
```ts title=".opencode/tools/math.ts"
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`(即[佐德](https://zod.dev))來定義參數類型。
```ts "tool.schema"
args: {
query: tool.schema.string().describe("SQL query to execute")
}
```
您還可以直接導入[佐德](https://zod.dev)並返回一個普通對象:
```ts {6}
import { z } from "zod"
export default {
description: "Tool description",
args: {
param: z.string().describe("Parameter description"),
},
async execute(args, context) {
// Tool implementation
return "result"
},
}
```
---
### 情境
工具接收有關當前會話的上下文:
```ts title=".opencode/tools/project.ts" {8}
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 腳本:
```python title=".opencode/tools/add.py"
import sys
a = int(sys.argv[1])
b = int(sys.argv[2])
print(a + b)
```
然後創建調用它的工具定義:
```ts title=".opencode/tools/python-add.ts" {10}
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.$`](https://bun.com/docs/runtime/shell) 實用程序來運行 Python 腳本。