DeepSeek Harness: Suporte Multimodal
Última atualização: 2026-08-31
Texto é apenas uma forma do Agent entender o mundo — imagens, áudio e vídeo são a linguagem do mundo real. O suporte multimodal do DSH permite que o Agent não apenas "leia código", mas também "veja interfaces", "ouça feedback" e "assista vídeos", expandindo enormemente os limites de percepção do Agent.
📋 Pré-requisitos: Ter completado 06-tools.md, familiarizado com noções básicas do sistema de ferramentas
1. O Que Você Vai Aprender
- Visão geral da arquitetura multimodal do DSH
- Métodos de processamento de entrada de imagem
- Status do suporte a entrada de áudio/vídeo
- Integração de ferramentas multimodais
- Mecanismos de anexação e análise de arquivos
2. Visão Geral da Arquitetura Multimodal
(1) Fluxo de Dados Multimodal
graph TB
subgraph Fontes de Entrada
IMG[Imagem<br/>PNG/JPG/WebP]
AUD[Áudio<br/>MP3/WAV]
VID[Vídeo<br/>MP4/WebM]
DOC[Documentos<br/>PDF/CSV]
end
subgraph Processamento DSH
PARSE[Analisador de Anexos]
ENCODE[Codificação Multimodal]
LLM[Raciocínio Multimodal LLM]
end
subgraph Saída
TEXT[Resposta de Texto]
TOOL[Chamadas de Ferramentas]
end
IMG --> PARSE
AUD --> PARSE
VID --> PARSE
DOC --> PARSE
PARSE --> ENCODE
ENCODE --> LLM
LLM --> TEXT
LLM --> TOOL
(2) Matriz de Suporte Multimodal
| Tipo de Entrada | Formato Suportado | Estabilidade | Tamanho Máx | Observações |
|---|---|---|---|---|
| Imagem | PNG, JPG, WebP, GIF | ✅ Estável | 20MB/imagem | Capacidade multimodal mais madura |
| Áudio | MP3, WAV, OGG | ⚠️ Experimental | 50MB | Requer modelo com capacidade de áudio |
| Vídeo | MP4, WebM | ⚠️ Experimental | 100MB | Análise por extração quadro a quadro |
| Documento | PDF, CSV, XLSX | ✅ Estável | 50MB | Extração de texto + estruturação |
(3) Requisitos de Modelo
Recursos multimodais dependem das capacidades multimodais do LLM:
| Modelo | Imagem | Áudio | Vídeo | Documento |
|---|---|---|---|---|
| deepseek-chat | ✅ | ❌ | ❌ | ✅ |
| gpt-4o | ✅ | ✅ | ✅ | ✅ |
| gpt-4-vision | ✅ | ❌ | ❌ | ✅ |
| claude-3.5-sonnet | ✅ | ❌ | ❌ | ✅ |
3. Processamento de Entrada de Imagem
(1) Adicionando Imagens na Web UI
Na área de chat da Web UI, você pode adicionar imagens arrastando ou colando:
┌─ Área de Chat ──────────────────────────────┐
│ │
│ 👤 Alice: │
│ 📎 [screenshot.png] [ui-mockup.jpg] │
│ Qual destes dois designs de UI é melhor? │
│ │
│ [Enviar] │
└───────────────────────────────────────────┘
Operações suportadas:
- Arrastar e soltar imagens na área de chat
- Colar imagens da área de transferência (Ctrl+V)
- Clicar no botão de anexo para selecionar arquivos
- Máximo de 5 imagens por mensagem
(2) Adicionando Imagens no Modo CLI
▶ Exemplo 1:Anexando Imagens no Modo CLI
# Iniciar CLI com imagem anexada
dsh cli --attach ./screenshot.png
# Usar comando /attach durante a conversa
> /attach ./ui-mockup.jpg
> O que há de errado com esta UI?
# Anexar múltiplas imagens
> /attach ./before.png ./after.png
> Qual a diferença entre estas duas versões?
(3) Anexando Imagens via SDK
▶ Exemplo 2:Enviando Imagens com Python SDK
from dsh import DSHClient
client = DSHClient(base_url="http://127.0.0.1:3080")
session = client.create_session(workspace="/home/alice/project")
# Anexar uma única imagem
response = session.send(
"O que há de errado com esta captura de tela da UI?",
images=["./screenshot.png"]
)
print(response.content)
# Anexar múltiplas imagens para comparação
response = session.send(
"Compare estes dois designs, qual é melhor?",
images=["./design-a.png", "./design-b.png"]
)
(4) Análise de Imagem na Prática
▶ Exemplo 3:Análise de Bug de UI
👤 Alice: [anexa error-page-screenshot.png]
O que há de errado com esta página de erro? Me ajude a corrigir
🤖 Agent:
🔍 Analisando imagem...
Vejo os seguintes problemas:
1. O texto da mensagem de erro transborda o limite do contêiner
2. O botão "Retry" está truncado, mostrando apenas metade
3. A cor de fundo é inconsistente com a especificação de design (deveria ser #f5f5f5, não branco)
📝 Usando ferramenta: file_edit (edit)
→ Caminho: src/pages/ErrorPage.tsx
→ Correção 1: Adicionar text-overflow: ellipsis
→ Correção 2: Ajustar margem do botão
→ Correção 3: Alterar cor de fundo
⚠️ Aprovação Necessária: Editar arquivo src/pages/ErrorPage.tsx
(5) Limitações do Processamento de Imagem
| Limitação | Descrição |
|---|---|
| Máximo por imagem | 20MB |
| Máximo por mensagem | 5 imagens |
| Resolução | Recomendada não superior a 4096×4096 |
| GIF animado | Apenas o primeiro quadro é usado |
| Conversão de formato | Automaticamente convertida para o formato suportado pelo modelo |
4. Entrada de Áudio/Vídeo
(1) Entrada de Áudio (Experimental)
A entrada de áudio requer um modelo que suporte compreensão de áudio (ex.: GPT-4o):
▶ Exemplo 4:Enviando Áudio via SDK
# Enviar um arquivo de áudio
response = session.send(
"Transcreva este áudio e resuma os pontos principais",
audio=["./meeting-recording.mp3"]
)
print(response.content)
# Resultados da transcrição de áudio e resumo...
(2) Entrada de Vídeo (Experimental)
O processamento de vídeo usa uma estratégia de extração de quadros:
graph LR
VID[Arquivo de Vídeo] --> EXTRACT[Extração de Quadros<br/>1 quadro/segundo] --> SELECT[Seleção de Quadros-Chave<br/>Detecção de Mudança de Cena] --> ENCODE[Codificação Multi-quadro] --> LLM[Análise LLM]
▶ Exemplo 5:Enviando Vídeo via SDK
# Enviar um arquivo de vídeo
response = session.send(
"Analise este vídeo de demonstração, liste os recursos mostrados",
video=["./demo.mp4"]
)
print(response.content)
# 1. Funcionalidade de login do usuário (0:00-0:15)
# 2. Exibição do dashboard (0:15-0:45)
# ...
(3) Limitações Atuais
Recursos de áudio e vídeo ainda estão em fase experimental:
| Limitação | Áudio | Vídeo |
|---|---|---|
| Duração máxima | 10 minutos | 5 minutos |
| Tamanho máximo do arquivo | 50MB | 100MB |
| Requisito de modelo | GPT-4o etc. | GPT-4o etc. |
| Extração de quadros | — | 1 quadro/segundo, máx. 300 quadros |
| Estabilidade | ⚠️ Pode causar timeout | ⚠️ Pode causar timeout |
5. Anexação e Análise de Documentos
(1) Formatos de Documento Suportados
| Formato | Método de Análise | Saída |
|---|---|---|
| Extração de texto + OCR | Texto estruturado | |
| CSV | Análise de linhas e colunas | Dados tabulares |
| XLSX | Análise de planilhas | Dados tabulares |
| DOCX | Extração de texto | Texto estruturado |
| Markdown | Leitura direta | Texto bruto |
▶ Exemplo 6:Anexando um Arquivo PDF
# Analisar um documento PDF
response = session.send(
"Resuma os pontos principais deste documento técnico",
files=["./api-specification.pdf"]
)
print(response.content)
(2) Análise de Dados CSV
▶ Exemplo 7:Analisando Dados CSV
# Analisar dados CSV
response = session.send(
"Analise estes dados de vendas, encontre tendências e anomalias",
files=["./sales-2026.csv"]
)
print(response.content)
# Resultados da análise de dados...
O Agent também pode processar posteriormente com ferramentas:
🤖 Agent:
📊 Analisando dados CSV...
→ Linhas: 12.450
→ Colunas: 8
→ Período: 2026-01 a 2026-08
Principais descobertas:
1. Crescimento médio mensal de 12%, mas março caiu 8% (suspeita de sazonalidade)
2. Top 3 produtos representam 65% da receita total
3. Taxa de retenção de clientes caiu de 72% para 68%
🔧 Usando ferramenta: shell
→ Comando: python3 -c "import pandas; ..."
→ Gerando visualização...
6. Integração de Ferramentas Multimodais
(1) Coordenação Multimodal e Ferramentas
O Agent pode combinar entrada multimodal com chamadas de ferramentas:
graph TB
INPUT[Entrada Multimodal] --> AGENT[Análise do Agent]
AGENT -->|Imagem → Código| FE[file_edit]
AGENT -->|Vídeo → Script| SH[shell]
AGENT -->|Documento → Banco de Dados| DB[database.query]
▶ Exemplo 8:Coordenação Imagem + Ferramenta
👤 Bob: [anexa api-response-screenshot.png]
O formato desta resposta da API está errado, me ajude a verificar o código
🤖 Agent:
🔍 Analisando captura de tela...
→ Formato esperado: { data: [...], meta: {...} }
→ Formato atual: { results: [...] }
🔍 Usando ferramenta: search
→ Padrão: "results"
→ Tipo: conteúdo
→ Encontrado em: src/api/handlers.ts:45
📝 Usando ferramenta: file_edit (read)
→ Lendo src/api/handlers.ts
📝 Usando ferramenta: file_edit (edit)
→ Corrigindo formato da resposta nas linhas 45-52
→ Alterando "results" para "data", adicionando campo "meta"
(2) Processamento em Lote de Imagens
▶ Exemplo 9:Imagens em Lote + Edição de Arquivos
import glob
screenshots = glob.glob("./screenshots/*.png")
response = session.send(
"Revise todas as capturas de tela, encontre páginas com problemas de UI e corrija uma a uma",
images=screenshots[:5] # Máx. 5 imagens
)
(3) Raciocínio em Cadeia Multimodal
👤 Alice: [anexa architecture-diagram.png]
Gere uma configuração Docker Compose baseada neste diagrama de arquitetura
🤖 Agent:
🔍 Analisando diagrama de arquitetura...
→ Identificados 4 serviços: API, Worker, Database, Cache
→ Conexões: API → Database, API → Cache, Worker → Database
📝 Usando ferramenta: file_edit (create)
→ Criando docker-compose.yml
→ 4 serviços com rede adequada
✅ Configuração Docker Compose gerada, incluindo:
- api-service (Express.js, porta 3000)
- worker-service (Node.js, jobs em segundo plano)
- postgres (PostgreSQL 16, volume montado)
- redis (Redis 7, camada de cache)
7. Configuração e Otimização
(1) Configuração Multimodal
# dsh.config.yaml
multimodal:
# Configurações de imagem
images:
max_size_mb: 20
max_per_message: 5
resize_large: true # Redimensionar automaticamente imagens muito grandes
max_resolution: [4096, 4096]
# Configurações de áudio
audio:
max_duration_minutes: 10
max_size_mb: 50
transcription_model: "whisper-1"
# Configurações de vídeo
video:
max_duration_minutes: 5
max_size_mb: 100
frame_rate: 1 # Quadros por segundo para extrair
max_frames: 300
# Configurações de documento
documents:
max_size_mb: 50
pdf_ocr_enabled: true
csv_max_rows: 100000
(2) Otimização de Desempenho
Entrada multimodal aumenta o consumo de tokens e o tempo de resposta:
| Estratégia de Otimização | Descrição | Efeito |
|---|---|---|
| Compressão de imagem | Comprimir para resolução adequada antes do upload | 50-80% de redução de tokens de imagem |
| Seleção de quadros-chave | Enviar apenas quadros-chave para vídeo | 90% de redução de quadros de vídeo |
| Extração de texto | Preferir extração de texto em vez de OCR para PDFs | Mais rápido e preciso |
| Envio em lote | Enviar grandes quantidades de imagens em lotes | Evita timeout |
❓ Perguntas Frequentes
📖 Resumo
- O multimodal do DSH suporta imagens (estável), áudio/vídeo (experimental), documentos (estável)
- Entrada de imagem: arrastar/colar na Web UI,
/attachno CLI, parâmetroimagesno SDK - Áudio/vídeo requer modelos LLM com capacidade multimodal
- Análise de documentos suporta PDF, CSV, XLSX, etc.
- Coordenação multimodal + ferramentas: imagem→correção de código, documento→análise de dados
- O arquivo de configuração pode ajustar limites de tamanho, taxa de quadros, ativação de OCR, etc.
- Multimodal aumenta o consumo de tokens; atenção às estratégias de otimização
📝 Exercícios
1. ⭐ Básico: Faça upload de uma captura de tela de UI na Web UI e peça ao Agent para descrever o conteúdo da captura. Registre os resultados da análise do Agent e as ferramentas usadas.
2. ⭐⭐ Intermediário: Faça upload de um arquivo de dados CSV e peça ao Agent para analisar os dados e sugerir visualizações. Use o SDK para escrever um script para esta operação.
3. ⭐⭐⭐ Desafio: Projete um fluxo de trabalho multimodal — faça upload de uma imagem de design de UI, peça ao Agent para gerar código frontend correspondente baseado no design, depois tire uma captura de tela para comparar o resultado gerado com o design original. Registre a cadeia completa de chamadas de ferramentas.