Alat Kustom
Buat alat yang dapat dipanggil LLM di dropstone.
Alat kustom adalah fungsi yang Anda buat yang dapat dipanggil LLM selama percakapan. Mereka bekerja bersama dengan alat bawaan Dropstone seperti read, write, dan bash.
Membuat alat
Alat didefinisikan sebagai file TypeScript atau JavaScript. Definisi alat itu sendiri adalah TS/JS, tetapi pekerjaan yang dilakukannya dapat diimplementasikan dalam bahasa apa pun: skrip shell, Python, Go, apa pun yang dapat Anda jalankan dari pembantu shell Bun.
Lokasi
Mereka dapat didefinisikan:
- Secara lokal dengan menempatkannya di direktori
.dropstone/tools/proyek Anda. - Atau secara global, dengan menempatkannya di
~/.config/dropstone/tools/.
Struktur
Cara termudah untuk membuat alat adalah menggunakan pembantu tool() yang menyediakan keamanan tipe dan validasi.
import { tool } from "@blankline/dropstone-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}`
},
})
Nama file menjadi nama alat. Di atas membuat alat database.
Beberapa alat per file
Anda juga dapat mengekspor beberapa alat dari satu file. Setiap ekspor menjadi alat terpisah dengan nama <filename>_<exportname>:
import { tool } from "@blankline/dropstone-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
},
})
Ini membuat dua alat: math_add dan math_multiply.
Tabrakan nama dengan alat bawaan
Alat kustom diindeks berdasarkan nama alat. Jika alat kustom menggunakan nama yang sama dengan alat bawaan, alat kustom memiliki prioritas.
Sebagai contoh, file ini menggantikan alat bash bawaan:
import { tool } from "@blankline/dropstone-plugin"
export default tool({
description: "Restricted bash wrapper",
args: {
command: tool.schema.string(),
},
async execute(args) {
return `blocked: ${args.command}`
},
})
Note:
Lebih suka nama unik kecuali Anda sengaja ingin menggantikan alat bawaan. Jika Anda ingin menonaktifkan alat bawaan tetapi tidak menggantinya, gunakan permissions.
Argumen
Anda dapat menggunakan tool.schema, yang hanya Zod, untuk menentukan tipe argumen.
args: {
query: tool.schema.string().describe("SQL query to execute")
}
Anda juga dapat mengimpor Zod secara langsung dan mengembalikan objek biasa:
import { z } from "zod"
export default {
description: "Tool description",
args: {
param: z.string().describe("Parameter description"),
},
async execute(args, context) {
// Tool implementation
return "result"
},
}
Konteks
Alat menerima konteks tentang sesi saat ini:
import { tool } from "@blankline/dropstone-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}`
},
})
Gunakan context.directory untuk direktori kerja sesi.
Gunakan context.worktree untuk akar git worktree.
Contoh
Tulis alat di Python
Anda dapat menulis alat Anda dalam bahasa apa pun yang Anda inginkan. Berikut adalah contoh yang menambahkan dua angka menggunakan Python.
Pertama, buat alat sebagai skrip Python:
import sys
a = int(sys.argv[1])
b = int(sys.argv[2])
print(a + b)
Kemudian buat definisi alat yang memanggilnya:
import { tool } from "@blankline/dropstone-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, ".dropstone/tools/add.py")
const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
return result.trim()
},
})
Di sini kami menggunakan utilitas Bun.$ untuk menjalankan skrip Python.