DeepSeek Harness: Uso de Ferramentas

Última atualização: 2026-08-31

Ferramentas são as "mãos e pés" do Agent — sem ferramentas, o Agent só pode "falar"; com ferramentas, o Agent pode ler/gravar arquivos, executar comandos, pesquisar código e fazer planos. O sistema de ferramentas do DSH é construído sobre a arquitetura de plugins Cordis — cada ferramenta é um plugin, extensível, substituível e combinável.

💡 Dica: O sistema de ferramentas do DSH usa um pipeline de três estágios — pre-execute (validação/aprovação) → execute (execução real) → post-execute (registro de log). Entender este pipeline dá a você controle total sobre o comportamento das ferramentas.

📋 Pré-requisitos: Ter completado 05-modes.md, familiarizado com os quatro modos de execução

1. O Que Você Vai Aprender

Pipeline de Ferramentas


2. Visão Geral das Ferramentas Integradas

(1) Panorama das Ferramentas

100%
graph TB
    subgraph DSHTools[Ferramentas Integradas do DSH]
        FE[file_edit<br/>Leitura/Gravação e Edição de Arquivos]
        SH[shell<br/>Execução de Comandos Shell]
        SR[search<br/>Busca de Código e Arquivos]
        SK[skills<br/>Invocação de Habilidades]
        PL[plan<br/>Criação e Acompanhamento de Planos]
        SB[sandbox<br/>Gerenciamento de Ambiente Sandbox]
    end

(2) Comparação de Funções das Ferramentas

Ferramenta Função Nível de Segurança Requer Aprovação
file_edit Criar, ler, editar, excluir arquivos 🔴 Alta Sim
shell Executar comandos Shell 🔴 Alta Sim
search Pesquisar arquivos e conteúdo de código 🟢 Baixa Não
skills Invocar templates de habilidades predefinidos 🟡 Média Depende
plan Criar e acompanhar planos de execução 🟢 Baixa Não
sandbox Gerenciar ambiente sandbox 🟡 Média Sim

3. file_edit — Ferramenta de Operação de Arquivos

(1) Operações Suportadas

file_edit é a ferramenta mais usada, suportando quatro operações:

Operação Descrição Aprovação Necessária
read Ler conteúdo do arquivo Sem aprovação necessária
create Criar novo arquivo Aprovação necessária
edit Editar arquivo existente Aprovação necessária
delete Excluir arquivo Aprovação necessária

(2) Lendo Arquivos

▶ Exemplo 1:Lendo Conteúdo de Arquivo

TYPESCRIPT
// Parâmetros de chamada de file_edit do Agent
{
  action: "read",
  path: "src/config.ts",
  encoding: "utf-8"
}

Após a leitura, o Agent analisa automaticamente o conteúdo do arquivo:

TEXT 📖 Somente leitura
🤖 Agent:
🔍 Using tool: file_edit (read)
  → Path: src/config.ts
  → Size: 1.2KB

Este arquivo de configuração exporta três definições:
- DATABASE_URL: String de conexão com banco de dados
- PORT: Porta do serviço (padrão 3000)
- LOG_LEVEL: Nível de log (padrão info)

(3) Criando Arquivos

▶ Exemplo 2:Criando um Novo Arquivo

TYPESCRIPT
// Agent chama file_edit para criar um arquivo
{
  action: "create",
  path: "src/utils/logger.ts",
  content: "export function log(level: string, msg: string) {\n  const ts = new Date().toISOString();\n  console.log(`[${ts}] [${level}] ${msg}`);\n}"
}

Criar um arquivo aciona um popup de aprovação; o arquivo só é gravado após confirmação do usuário.

(4) Editando Arquivos

▶ Exemplo 3:Editando um Arquivo (modo diff)

A edição de arquivos do DSH usa modo diff, modificando apenas as partes que precisam mudar:

TYPESCRIPT
// Agent chama file_edit para editar um arquivo
{
  action: "edit",
  path: "src/app.ts",
  changes: [
    {
      type: "insert",
      line: 5,
      content: "import { log } from './utils/logger';"
    },
    {
      type: "replace",
      line: 23,
      oldContent: "console.log('Server started');",
      newContent: "log('info', 'Server started');"
    }
  ]
}

O popup de aprovação exibe uma visualização diff:

TEXT 📖 Somente leitura
⚠️ Aprovação Necessária: Editar arquivo src/app.ts

  +5 | import { log } from './utils/logger';
  
  -23| console.log('Server started');
  +23| log('info', 'Server started');

  [Permitir] [Sempre] [Negar]

(5) Edição Reversível

Todas as modificações de file_edit são reversíveis. DSH salva automaticamente um snapshot do arquivo antes de editar:

100%
graph LR
    A[Snapshot Pré-edição] --> B[Aplicar Edições]
    B --> C[Estado Pós-edição]
    C -->|Rollback| A

4. shell — Ferramenta de Comandos Shell

(1) Uso Básico

▶ Exemplo 4:Executando um Comando Seguro

TYPESCRIPT
// Agent executa comando ls
{
  command: "ls -la src/",
  cwd: "/home/alice/project",
  timeout: 30000
}

(2) Classificação de Segurança de Comandos

DSH classifica comandos Shell por nível de perigo:

Nível Exemplos de Comandos Política de Aprovação
Seguro ls, cat, grep, head, wc Auto-permitir
Moderado npm install, git add, mkdir Aprovação necessária
Perigoso rm, chmod, sudo, dd Aprovação + confirmação necessária
Proibido rm -rf /, mkfs, > /dev/sda Auto-negar

▶ Exemplo 5:Executando um Comando de Risco Moderado

TYPESCRIPT
// Agent executa npm view (ver info do pacote, risco moderado)
{
  command: "npm view jsonwebtoken",
  cwd: "/home/alice/project",
  timeout: 120000
}

Popup de aprovação:

TEXT 📖 Somente leitura
⚠️ Aprovação Necessária: Executar comando shell

  Command: npm view jsonwebtoken
  Working directory: /home/alice/project
  Estimated packages: 1

  [Permitir] [Sempre para npm] [Negar]

(3) Timeout e Interrupção

TYPESCRIPT
// Parâmetros da ferramenta shell
interface ShellParams {
  command: string;
  cwd?: string;
  timeout?: number;      // Timeout em milissegundos, padrão 30000
  env?: Record<string, string>;  // Variáveis de ambiente adicionais
}

Comandos de longa duração serão interrompidos por timeout:

TEXT 📖 Somente leitura
🤖 Agent:
🔧 Using tool: shell
  → Command: npm run build
  → Timeout: 120000ms

⏱️ Build completado em 45s
  → Output: Build successful. 15 files generated.

5. search — Ferramenta de Busca

(1) Modos de Busca

A ferramenta de busca suporta múltiplos modos:

Modo Descrição Exemplo
Busca de Arquivos Buscar por nome de arquivo/caminho *.test.ts
Busca de Conteúdo Buscar por regex de conteúdo import.*from
Busca de Símbolos Buscar definições de funções/classes class UserService

▶ Exemplo 6:Buscando Arquivos

TYPESCRIPT
// Buscar todos os arquivos de teste
{
  pattern: "*.test.ts",
  type: "file",
  maxResults: 50
}

▶ Exemplo 7:Buscando Conteúdo de Código

TYPESCRIPT
// Buscar todas as declarações de import
{
  pattern: "import.*from 'express'",
  type: "content",
  filePattern: "*.ts",
  maxResults: 100
}

(2) Exibição de Resultados da Busca

TEXT 📖 Somente leitura
🤖 Agent:
🔍 Using tool: search
  → Pattern: import.*from 'express'
  → Type: content
  → Results: 8 matches

Encontrado em:
  src/app.ts:1         — import express from 'express';
  src/routes/users.ts:3 — import express from 'express';
  src/routes/auth.ts:2  — import express from 'express';
  ...

6. skills — Ferramenta de Habilidades

(1) Conceito de Skills

Skills são templates de tarefas predefinidos que encapsulam fluxos de trabalho completos para operações comuns:

100%
graph LR
    USER[Requisição do Usuário] --> SK[Template de Skill]
    SK --> T1[Chamada de Ferramenta 1]
    SK --> T2[Chamada de Ferramenta 2]
    SK --> T3[Chamada de Ferramenta 3]

(2) Skills Integradas

Skill Descrição Operações Incluídas
add-test Adicionar testes para uma função search → file_edit (create)
refactor Extrair funções/classes file_edit (read) → file_edit (edit × N)
debug Depurar erros search → shell → file_edit
document Adicionar comentários de documentação file_edit (read) → file_edit (edit)

▶ Exemplo 8:Invocando uma Skill

TYPESCRIPT
// Invocar skill add-test
{
  skill: "add-test",
  params: {
    target: "src/utils/format.ts::formatDate",
    framework: "jest"
  }
}

7. plan — Ferramenta de Planejamento

(1) Criando e Acompanhando Planos

A ferramenta plan é usada para criar e acompanhar planos de execução para tarefas multi-passos:

▶ Exemplo 9:Criando um Plano de Execução

TYPESCRIPT
// Criar um plano
{
  action: "create",
  steps: [
    { id: 1, desc: "Instalar dependências", tool: "shell" },
    { id: 2, desc: "Criar módulo de autenticação", tool: "file_edit" },
    { id: 3, desc: "Atualizar app.ts", tool: "file_edit" },
    { id: 4, desc: "Escrever testes", tool: "file_edit" },
    { id: 5, desc: "Executar testes", tool: "shell" }
  ]
}

▶ Exemplo 10:Atualizando Status do Plano

TYPESCRIPT
// Marcar passo como completo
{
  action: "update",
  stepId: 1,
  status: "completed",
  result: "Installed jsonwebtoken, bcryptjs"
}

(2) Ferramenta plan e Modo PTC

A ferramenta plan é a base do modo PTC:

100%
graph TD
    PTC[Modo PTC] --> PLAN[Ferramenta plan Cria Plano]
    PLAN --> USER[Usuário Revê]
    USER --> EXEC[Executar Passos Conforme Plano]
    EXEC --> UPDATE[Ferramenta plan Atualiza Status]
    UPDATE --> DONE{Tudo Completo?}
    DONE -->|Não| EXEC
    DONE -->|Sim| REPORT[Exibir Resumo]

8. Pipeline de Execução de Ferramentas

(1) Pipeline de Três Estágios

Toda chamada de ferramenta passa por três estágios:

100%
graph LR
    PRE[pre-execute<br/>Validação de Parâmetros<br/>Verificação de Permissão<br/>Popup de Aprovação] --> EXEC[execute<br/>Execução Real<br/>Capturar Saída] --> POST[post-execute<br/>Registro de Log<br/>Emissão de Evento<br/>Atualização de Status]

▶ Exemplo 11:Pseudocódigo do Pipeline

TYPESCRIPT
async function executeToolPipeline(tool: Tool, params: Params): Promise<Result> {
  // Estágio 1: pre-execute
  const preResult = await preExecute(tool, params);
  if (preResult.denied) {
    throw new ToolDeniedError(preResult.reason);
  }

  // Estágio 2: execute
  const result = await tool.execute(params);

  // Estágio 3: post-execute
  await postExecute(tool, params, result);
  ctx.emit('tool.executed', { tool: tool.name, params, result });

  return result;
}

(2) Estágio pre-execute

pre-execute lida com validação e aprovação:

TYPESCRIPT
interface PreExecuteResult {
  allowed: boolean;
  reason?: string;
  modifiedParams?: Params;
}
Item de Verificação Descrição
Validação de parâmetros Se o formato e tipos dos parâmetros estão corretos
Verificação de permissão Se o usuário tem permissão para executar esta operação
Popup de aprovação Se operações perigosas requerem confirmação do usuário
Verificação de sandbox Se a operação está dentro do escopo do workspace

(3) Estágio post-execute

post-execute lida com registro e notificação:

TYPESCRIPT
interface PostExecuteAction {
  log: boolean;           // Registrar no log de sessão
  emit: boolean;          // Emitir evento
  updateTrajectory: boolean;  // Atualizar Trajectory
  notifyUI: boolean;      // Notificar atualização da Web UI
}

9. Política de Aprovação de Ferramentas

(1) Configuração de Política

▶ Exemplo 12:Configuração de Política de Aprovação

YAML
# dsh.config.yaml
approval:
  # Política padrão global
  default: ask

  # Configurações por ferramenta
  tools:
    file_edit:
      read: always          # Leituras sempre permitidas
      create: ask           # Criações requerem aprovação
      edit: ask             # Edições requerem aprovação
      delete: ask_with_confirm  # Exclusões requerem dupla confirmação
    
    shell:
      safe: always          # Comandos seguros sempre permitidos
      moderate: ask         # Comandos moderados requerem aprovação
      dangerous: deny       # Comandos perigosos auto-negados
    
    search:
      default: always       # Busca sempre permitida
    
    skills:
      default: ask          # Chamadas de skill requerem aprovação
    
    plan:
      default: always       # Planos sempre permitidos

(2) Descrições dos Modos de Aprovação

Modo Descrição Caso de Uso
always Sempre permitir, sem popup Operações seguras
ask Requer aprovação, confirmação via popup Operações perigosas
ask_with_confirm Requer dupla confirmação Operações extremamente perigosas
deny Auto-negar Operações que nunca devem ser permitidas

10. Introdução a Ferramentas Customizadas

(1) Criando Ferramentas Customizadas

Ferramentas DSH são plugins Cordis, escritas em TypeScript:

▶ Exemplo 13:Ferramenta Customizada de Requisição HTTP

TYPESCRIPT
import { definePlugin } from '@deepseek-ai/dsh';

export default definePlugin({
  name: 'tool-http-request',
  version: '1.0.0',
  contribute(ctx) {
    ctx.registerTool({
      name: 'http_request',
      description: 'Make HTTP requests to external APIs',
      parameters: {
        type: 'object',
        properties: {
          url: { type: 'string', description: 'Request URL' },
          method: { type: 'string', enum: ['GET', 'POST', 'PUT', 'DELETE'] },
          headers: { type: 'object', description: 'Request headers' },
          body: { type: 'string', description: 'Request body' }
        },
        required: ['url', 'method']
      },
      async execute(params) {
        const response = await fetch(params.url, {
          method: params.method,
          headers: params.headers,
          body: params.body
        });
        return {
          status: response.status,
          body: await response.text()
        };
      }
    });
  }
});

(2) Registrando Ferramentas Customizadas

Coloque plugins de ferramentas customizadas no diretório .dsh/plugins/ do projeto:

TEXT 📖 Somente leitura
.dsh/
└── plugins/
    └── tool-http-request/
        ├── index.ts
        └── package.json

Ou especifique no arquivo de configuração:

YAML
# dsh.config.yaml
plugins:
  - path: "./custom-tools/http-request"
  - path: "./custom-tools/database-query"

(3) Aprovação de Ferramentas Customizadas

Ferramentas customizadas também precisam definir políticas de aprovação:

TYPESCRIPT
ctx.registerTool({
  name: 'http_request',
  // ...
  approval: {
    level: 'ask',     // Padrão requer aprovação
    rules: [
      { match: { method: 'GET' }, level: 'always' },     // Requisições GET auto-permitidas
      { match: { method: 'POST' }, level: 'ask' },       // POST requer aprovação
      { match: { method: 'DELETE' }, level: 'deny' }     // DELETE auto-negado
    ]
  }
});

❓ Perguntas Frequentes

P Quantas ferramentas o Agent chama de uma vez?
R Depende da complexidade da tarefa. Q&A simples pode não chamar nenhuma ferramenta; tarefas complexas podem chamar 5-10 ferramentas em sequência. O modo Standard não tem limite superior; o modo Minimal é limitado a no máximo 1.
P O que acontece se uma chamada de ferramenta falhar?
R O Agent recebe a informação de erro e pode tentar novamente automaticamente ou ajustar sua estratégia. Após 3 falhas consecutivas, o Agent informa ao usuário e pede orientação.
P Posso desabilitar uma ferramenta específica?
R Sim. Configure tools.disabled: ["shell"] no arquivo de configuração para desabilitar ferramentas especificadas.
P Qual a diferença entre search e grep no shell?
R search é a busca estruturada integrada do DSH que entende a estrutura de diretórios do projeto e suporta modos de nome de arquivo/conteúdo/símbolo. shell grep é uma busca textual geral. Recomendamos usar search primeiro.
P Ferramentas customizadas podem ser escritas em Python?
R Atualmente o sistema de plugins do DSH só suporta TypeScript. Ferramentas Python podem ser indiretamente invocadas através da ferramenta shell chamando scripts Python.
P Há limite de concorrência na execução de ferramentas?
R DSH executa ferramentas serialmente por padrão (uma completa antes da próxima iniciar). Isso porque as ferramentas podem ter dependências entre si.

📖 Resumo


📝 Exercícios

1. ⭐ Básico: Use o Agent DSH para completar as seguintes operações: 1) Use a ferramenta search para encontrar todos os arquivos TypeScript no projeto; 2) Use file_edit para ler um deles. Registre os parâmetros e resultados de ambas as chamadas de ferramentas.

2. ⭐⭐ Intermediário: Configure políticas de aprovação para que operações de leitura do file_edit sejam auto-permitidas, operações de criar/editar exijam aprovação e operações de excluir exijam dupla confirmação. Teste cada operação para verificar se as políticas de aprovação estão funcionando.

3. ⭐⭐⭐ Desafio: Crie um plugin de ferramenta customizada que consulta os últimos 5 commits no repositório Git atual (chamando git log -5 --oneline), registre-o no DSH e faça o Agent invocá-lo com sucesso.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%