> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crewai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Arquivos

> Passe imagens, PDFs, áudio, vídeo e arquivos de texto para seus agentes para processamento multimodal.

## 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 theme={null}
  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 theme={null}
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 theme={null}
from crewai_files import ImageFile

image = ImageFile(source="./images/chart.png")
```

### De URL

```python theme={null}
from crewai_files import ImageFile

image = ImageFile(source="https://example.com/image.png")
```

### De Bytes

```python theme={null}
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 theme={null}
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 theme={null}
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 theme={null}
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 theme={null}
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 theme={null}
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 theme={null}
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"),
    }
)
```
