Pular para o conteúdo

Arquivos

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.

O CrewAI suporta cinco tipos de arquivo específicos mais uma classe genérica File que detecta automaticamente o tipo:

TipoClasseCasos de Uso
ImagemImageFileFotos, capturas de tela, diagramas, gráficos
PDFPDFFileDocumentos, relatórios, artigos
ÁudioAudioFileGravações de voz, podcasts, reuniões
VídeoVideoFileGravações de tela, apresentações
TextoTextFileArquivos de código, logs, arquivos de dados
GenéricoFileDetecta automaticamente o tipo do conteúdo
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")

O parâmetro source aceita múltiplos tipos de entrada e detecta automaticamente o handler apropriado:

from crewai_files import ImageFile
image = ImageFile(source="./images/chart.png")
from crewai_files import ImageFile
image = ImageFile(source="https://example.com/image.png")
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)

Arquivos podem ser passados em múltiplos níveis, com níveis mais específicos tendo precedência.

Passe arquivos ao iniciar uma crew:

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"),
}
)

Anexe arquivos a tasks específicas:

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"),
}
)

Passe arquivos para flows, que automaticamente herdam para crews:

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")}
)

Passe arquivos diretamente no kickoff do agente:

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")},
)

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.

Diferentes provedores suportam diferentes tipos de arquivo. O CrewAI formata automaticamente os arquivos para a API de cada provedor.

ProvedorImagemPDFÁudioVídeoTexto
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)

O CrewAI escolhe automaticamente o método ideal para enviar arquivos para cada provedor:

MétodoDescriçãoUsado Quando
Base64 InlineArquivo embutido diretamente na requisiçãoArquivos pequenos (< 5MB tipicamente)
API de Upload de ArquivoArquivo enviado separadamente, referenciado por IDArquivos grandes que excedem o limite
Referência por URLURL direta passada para o modeloFonte do arquivo já é uma URL
ProvedorBase64 InlineAPI de UploadReferências URL
OpenAI✓ (> 5 MB)
Anthropic✓ (> 5 MB)
Google Gemini✓ (> 20 MB)
AWS Bedrock✓ (S3 URIs)
Azure OpenAI

Controle como os arquivos são processados quando excedem os limites do provedor:

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")

Cada provedor tem limites específicos para tamanhos e dimensões de arquivo:

  • 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
  • Imagens: Máx 5 MB, máx 8000x8000 pixels, até 100 imagens
  • PDFs: Máx 32 MB, até 100 páginas
  • 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
  • Imagens: Máx 4,5 MB, máx 8000x8000 pixels
  • PDFs: Máx 3,75 MB, até 100 páginas

Use o nome da chave do arquivo nas descrições das suas tasks para referenciar arquivos:

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"),
}
)