diff options
Diffstat (limited to 'packages/web/src/content/docs/pt-br/custom-tools.mdx')
| -rw-r--r-- | packages/web/src/content/docs/pt-br/custom-tools.mdx | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/packages/web/src/content/docs/pt-br/custom-tools.mdx b/packages/web/src/content/docs/pt-br/custom-tools.mdx new file mode 100644 index 000000000..6d2ad163e --- /dev/null +++ b/packages/web/src/content/docs/pt-br/custom-tools.mdx @@ -0,0 +1,170 @@ +--- +title: Ferramentas Personalizadas +description: Crie ferramentas que o LLM pode chamar em opencode. +--- + +Ferramentas personalizadas são funções que você cria e que o LLM pode chamar durante as conversas. Elas funcionam junto com as [ferramentas integradas](/docs/tools) do opencode, como `read`, `write` e `bash`. + +--- + +## Criando uma ferramenta + +As ferramentas são definidas como arquivos **TypeScript** ou **JavaScript**. No entanto, a definição da ferramenta pode invocar scripts escritos em **qualquer linguagem** — TypeScript ou JavaScript é usado apenas para a definição da ferramenta em si. + +--- + +### Localização + +Elas podem ser definidas: + +- Localmente, colocando-as no diretório `.opencode/tools/` do seu projeto. +- Ou globalmente, colocando-as em `~/.config/opencode/tools/`. + +--- + +### Estrutura + +A maneira mais fácil de criar ferramentas é usando o helper `tool()`, que fornece segurança de tipo e validação. + +```ts title=".opencode/tools/database.ts" {1} +import { tool } from "@opencode-ai/plugin" + +export default tool({ + description: "Consultar o banco de dados do projeto", + args: { + query: tool.schema.string().describe("Consulta SQL a ser executada"), + }, + async execute(args) { + // Sua lógica de banco de dados aqui + return `Consulta executada: ${args.query}` + }, +}) +``` + +O **nome do arquivo** se torna o **nome da ferramenta**. O acima cria uma ferramenta `database`. + +--- + +#### Múltiplas ferramentas por arquivo + +Você também pode exportar várias ferramentas de um único arquivo. Cada exportação se torna **uma ferramenta separada** com o nome **`<filename>_<exportname>`**: + +```ts title=".opencode/tools/math.ts" +import { tool } from "@opencode-ai/plugin" + +export const add = tool({ + description: "Adicionar dois números", + args: { + a: tool.schema.number().describe("Primeiro número"), + b: tool.schema.number().describe("Segundo número"), + }, + async execute(args) { + return args.a + args.b + }, +}) + +export const multiply = tool({ + description: "Multiplicar dois números", + args: { + a: tool.schema.number().describe("Primeiro número"), + b: tool.schema.number().describe("Segundo número"), + }, + async execute(args) { + return args.a * args.b + }, +}) +``` + +Isso cria duas ferramentas: `math_add` e `math_multiply`. + +--- + +### Argumentos + +Você pode usar `tool.schema`, que é apenas [Zod](https://zod.dev), para definir tipos de argumentos. + +```ts "tool.schema" +args: { + query: tool.schema.string().describe("Consulta SQL a ser executada") +} +``` + +Você também pode importar [Zod](https://zod.dev) diretamente e retornar um objeto simples: + +```ts {6} +import { z } from "zod" + +export default { + description: "Descrição da ferramenta", + args: { + param: z.string().describe("Descrição do parâmetro"), + }, + async execute(args, context) { + // Implementação da ferramenta + return "resultado" + }, +} +``` + +--- + +### Contexto + +As ferramentas recebem contexto sobre a sessão atual: + +```ts title=".opencode/tools/project.ts" {8} +import { tool } from "@opencode-ai/plugin" + +export default tool({ + description: "Obter informações do projeto", + args: {}, + async execute(args, context) { + // Acessar informações do contexto + const { agent, sessionID, messageID, directory, worktree } = context + return `Agente: ${agent}, Sessão: ${sessionID}, Mensagem: ${messageID}, Diretório: ${directory}, Worktree: ${worktree}` + }, +}) +``` + +Use `context.directory` para o diretório de trabalho da sessão. +Use `context.worktree` para a raiz do worktree do git. + +--- + +## Exemplos + +### Escreva uma ferramenta em Python + +Você pode escrever suas ferramentas em qualquer linguagem que desejar. Aqui está um exemplo que adiciona dois números usando Python. + +Primeiro, crie a ferramenta como um script Python: + +```python title=".opencode/tools/add.py" +import sys + +a = int(sys.argv[1]) +b = int(sys.argv[2]) +print(a + b) +``` + +Em seguida, crie a definição da ferramenta que a invoca: + +```ts title=".opencode/tools/python-add.ts" {10} +import { tool } from "@opencode-ai/plugin" +import path from "path" + +export default tool({ + description: "Adicionar dois números usando Python", + args: { + a: tool.schema.number().describe("Primeiro número"), + b: tool.schema.number().describe("Segundo número"), + }, + 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() + }, +}) +``` + +Aqui estamos usando o utilitário [`Bun.$`](https://bun.com/docs/runtime/shell) para executar o script Python.
\ No newline at end of file |
