mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-23 23:28:15 +00:00
Some checks are pending
Build uv cache / build-cache (3.10) (push) Waiting to run
Build uv cache / build-cache (3.11) (push) Waiting to run
Build uv cache / build-cache (3.12) (push) Waiting to run
Build uv cache / build-cache (3.13) (push) Waiting to run
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (python) (push) Waiting to run
Check Documentation Broken Links / Check broken links (push) Waiting to run
Notify Downstream / notify-downstream (push) Waiting to run
268 lines
8.0 KiB
Plaintext
268 lines
8.0 KiB
Plaintext
---
|
|
title: Arquivos
|
|
description: Passe imagens, PDFs, áudio, vídeo e arquivos de texto para seus agentes para processamento multimodal.
|
|
icon: file-image
|
|
---
|
|
|
|
## Visão Geral
|
|
|
|
O CrewAI suporta entradas de arquivos multimodais nativos, permitindo que você passe imagens, PDFs, áudio, vídeo e arquivos de texto diretamente para seus agentes. Os arquivos são formatados automaticamente para os requisitos da API de cada provedor LLM.
|
|
|
|
<Note type="info" title="Dependência Opcional">
|
|
O suporte a arquivos requer o pacote opcional `crewai-files`. Instale com:
|
|
|
|
```bash
|
|
uv add 'crewai[file-processing]'
|
|
```
|
|
</Note>
|
|
|
|
<Note type="warning" title="Acesso Antecipado">
|
|
A API de processamento de arquivos está atualmente em acesso antecipado.
|
|
</Note>
|
|
|
|
## Tipos de Arquivo
|
|
|
|
O CrewAI suporta cinco tipos de arquivo específicos mais uma classe genérica `File` que detecta automaticamente o tipo:
|
|
|
|
| Tipo | Classe | Casos de Uso |
|
|
|:-----|:------|:----------|
|
|
| **Imagem** | `ImageFile` | Fotos, capturas de tela, diagramas, gráficos |
|
|
| **PDF** | `PDFFile` | Documentos, relatórios, artigos |
|
|
| **Áudio** | `AudioFile` | Gravações de voz, podcasts, reuniões |
|
|
| **Vídeo** | `VideoFile` | Gravações de tela, apresentações |
|
|
| **Texto** | `TextFile` | Arquivos de código, logs, arquivos de dados |
|
|
| **Genérico** | `File` | Detecta automaticamente o tipo do conteúdo |
|
|
|
|
```python
|
|
from crewai_files import File, ImageFile, PDFFile, AudioFile, VideoFile, TextFile
|
|
|
|
image = ImageFile(source="screenshot.png")
|
|
pdf = PDFFile(source="report.pdf")
|
|
audio = AudioFile(source="meeting.mp3")
|
|
video = VideoFile(source="demo.mp4")
|
|
text = TextFile(source="data.csv")
|
|
|
|
file = File(source="document.pdf")
|
|
```
|
|
|
|
## Fontes de Arquivo
|
|
|
|
O parâmetro `source` aceita múltiplos tipos de entrada e detecta automaticamente o handler apropriado:
|
|
|
|
### De Caminho
|
|
|
|
```python
|
|
from crewai_files import ImageFile
|
|
|
|
image = ImageFile(source="./images/chart.png")
|
|
```
|
|
|
|
### De URL
|
|
|
|
```python
|
|
from crewai_files import ImageFile
|
|
|
|
image = ImageFile(source="https://example.com/image.png")
|
|
```
|
|
|
|
### De Bytes
|
|
|
|
```python
|
|
from crewai_files import ImageFile, FileBytes
|
|
|
|
image_bytes = download_image_from_api()
|
|
image = ImageFile(source=FileBytes(data=image_bytes, filename="downloaded.png"))
|
|
image = ImageFile(source=image_bytes)
|
|
```
|
|
|
|
## Usando Arquivos
|
|
|
|
Arquivos podem ser passados em múltiplos níveis, com níveis mais específicos tendo precedência.
|
|
|
|
### Com Crews
|
|
|
|
Passe arquivos ao iniciar uma crew:
|
|
|
|
```python
|
|
from crewai import Crew
|
|
from crewai_files import ImageFile
|
|
|
|
crew = Crew(agents=[analyst], tasks=[analysis_task])
|
|
|
|
result = crew.kickoff(
|
|
inputs={"topic": "Q4 Sales"},
|
|
input_files={
|
|
"chart": ImageFile(source="sales_chart.png"),
|
|
"report": PDFFile(source="quarterly_report.pdf"),
|
|
}
|
|
)
|
|
```
|
|
|
|
### Com Tasks
|
|
|
|
Anexe arquivos a tasks específicas:
|
|
|
|
```python
|
|
from crewai import Task
|
|
from crewai_files import ImageFile
|
|
|
|
task = Task(
|
|
description="Analise o gráfico de vendas e identifique tendências em {chart}",
|
|
expected_output="Um resumo das principais tendências",
|
|
input_files={
|
|
"chart": ImageFile(source="sales_chart.png"),
|
|
}
|
|
)
|
|
```
|
|
|
|
### Com Flows
|
|
|
|
Passe arquivos para flows, que automaticamente herdam para crews:
|
|
|
|
```python
|
|
from crewai.flow.flow import Flow, start
|
|
from crewai_files import ImageFile
|
|
|
|
class AnalysisFlow(Flow):
|
|
@start()
|
|
def analyze(self):
|
|
return self.analysis_crew.kickoff()
|
|
|
|
flow = AnalysisFlow()
|
|
result = flow.kickoff(
|
|
input_files={"image": ImageFile(source="data.png")}
|
|
)
|
|
```
|
|
|
|
### Com Agentes Standalone
|
|
|
|
Passe arquivos diretamente no kickoff do agente:
|
|
|
|
```python
|
|
from crewai import Agent
|
|
from crewai_files import ImageFile
|
|
|
|
agent = Agent(
|
|
role="Image Analyst",
|
|
goal="Analyze images",
|
|
backstory="Expert at visual analysis",
|
|
llm="gpt-4o",
|
|
)
|
|
|
|
result = agent.kickoff(
|
|
messages="What's in this image?",
|
|
input_files={"photo": ImageFile(source="photo.jpg")},
|
|
)
|
|
```
|
|
|
|
## Precedência de Arquivos
|
|
|
|
Quando arquivos são passados em múltiplos níveis, níveis mais específicos sobrescrevem os mais amplos:
|
|
|
|
```
|
|
Flow input_files < Crew input_files < Task input_files
|
|
```
|
|
|
|
Por exemplo, se tanto Flow quanto Task definem um arquivo chamado `"chart"`, a versão da Task é usada.
|
|
|
|
## Suporte por Provedor
|
|
|
|
Diferentes provedores suportam diferentes tipos de arquivo. O CrewAI formata automaticamente os arquivos para a API de cada provedor.
|
|
|
|
| Provedor | Imagem | PDF | Áudio | Vídeo | Texto |
|
|
|:---------|:-----:|:---:|:-----:|:-----:|:----:|
|
|
| **OpenAI** (API completions) | ✓ | | | | |
|
|
| **OpenAI** (API responses) | ✓ | ✓ | ✓ | | |
|
|
| **Anthropic** (claude-3.x) | ✓ | ✓ | | | |
|
|
| **Google Gemini** (gemini-1.5, 2.0, 2.5) | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| **AWS Bedrock** (claude-3) | ✓ | ✓ | | | |
|
|
| **Azure OpenAI** (gpt-4o) | ✓ | | ✓ | | |
|
|
|
|
<Note type="info" title="Gemini para Máximo Suporte de Arquivos">
|
|
Os modelos Google Gemini suportam todos os tipos de arquivo incluindo vídeo (até 1 hora, 2GB). Use Gemini quando precisar processar conteúdo de vídeo.
|
|
</Note>
|
|
|
|
<Note type="warning" title="Tipos de Arquivo Não Suportados">
|
|
Se você passar um tipo de arquivo que o provedor não suporta (ex: vídeo para OpenAI), você receberá um `UnsupportedFileTypeError`. Escolha seu provedor baseado nos tipos de arquivo que você precisa processar.
|
|
</Note>
|
|
|
|
## Como os Arquivos São Enviados
|
|
|
|
O CrewAI escolhe automaticamente o método ideal para enviar arquivos para cada provedor:
|
|
|
|
| Método | Descrição | Usado Quando |
|
|
|:-------|:------------|:----------|
|
|
| **Base64 Inline** | Arquivo embutido diretamente na requisição | Arquivos pequenos (< 5MB tipicamente) |
|
|
| **API de Upload de Arquivo** | Arquivo enviado separadamente, referenciado por ID | Arquivos grandes que excedem o limite |
|
|
| **Referência por URL** | URL direta passada para o modelo | Fonte do arquivo já é uma URL |
|
|
|
|
### Métodos de Transmissão por Provedor
|
|
|
|
| Provedor | Base64 Inline | API de Upload | Referências URL |
|
|
|:---------|:-------------:|:---------------:|:--------------:|
|
|
| **OpenAI** | ✓ | ✓ (> 5 MB) | ✓ |
|
|
| **Anthropic** | ✓ | ✓ (> 5 MB) | ✓ |
|
|
| **Google Gemini** | ✓ | ✓ (> 20 MB) | ✓ |
|
|
| **AWS Bedrock** | ✓ | | ✓ (S3 URIs) |
|
|
| **Azure OpenAI** | ✓ | | ✓ |
|
|
|
|
<Note type="info" title="Otimização Automática">
|
|
Você não precisa gerenciar isso. O CrewAI usa automaticamente o método mais eficiente baseado no tamanho do arquivo e nas capacidades do provedor. Provedores sem APIs de upload de arquivo usam base64 inline para todos os arquivos.
|
|
</Note>
|
|
|
|
## Modos de Tratamento de Arquivo
|
|
|
|
Controle como os arquivos são processados quando excedem os limites do provedor:
|
|
|
|
```python
|
|
from crewai_files import ImageFile, PDFFile
|
|
|
|
image = ImageFile(source="large.png", mode="strict")
|
|
image = ImageFile(source="large.png", mode="auto")
|
|
image = ImageFile(source="large.png", mode="warn")
|
|
pdf = PDFFile(source="large.pdf", mode="chunk")
|
|
```
|
|
|
|
## Restrições por Provedor
|
|
|
|
Cada provedor tem limites específicos para tamanhos e dimensões de arquivo:
|
|
|
|
### OpenAI
|
|
- **Imagens**: Máx 20 MB, até 10 imagens por requisição
|
|
- **PDFs**: Máx 32 MB, até 100 páginas
|
|
- **Áudio**: Máx 25 MB, até 25 minutos
|
|
|
|
### Anthropic
|
|
- **Imagens**: Máx 5 MB, máx 8000x8000 pixels, até 100 imagens
|
|
- **PDFs**: Máx 32 MB, até 100 páginas
|
|
|
|
### Google Gemini
|
|
- **Imagens**: Máx 100 MB
|
|
- **PDFs**: Máx 50 MB
|
|
- **Áudio**: Máx 100 MB, até 9,5 horas
|
|
- **Vídeo**: Máx 2 GB, até 1 hora
|
|
|
|
### AWS Bedrock
|
|
- **Imagens**: Máx 4,5 MB, máx 8000x8000 pixels
|
|
- **PDFs**: Máx 3,75 MB, até 100 páginas
|
|
|
|
## Referenciando Arquivos em Prompts
|
|
|
|
Use o nome da chave do arquivo nas descrições das suas tasks para referenciar arquivos:
|
|
|
|
```python
|
|
task = Task(
|
|
description="""
|
|
Analise os materiais fornecidos:
|
|
1. Revise o gráfico em {sales_chart}
|
|
2. Faça referência cruzada com dados em {quarterly_report}
|
|
3. Resuma as principais descobertas
|
|
""",
|
|
expected_output="Resumo da análise com insights principais",
|
|
input_files={
|
|
"sales_chart": ImageFile(source="chart.png"),
|
|
"quarterly_report": PDFFile(source="report.pdf"),
|
|
}
|
|
)
|
|
```
|