--- title: "Atualizando o CrewAI" description: "Como atualizar o CrewAI no seu projeto e adaptar-se a breaking changes entre versões." icon: "arrow-up-circle" --- ## Visão Geral Os lançamentos do CrewAI trazem novos recursos regularmente. Este guia mostra os passos práticos para manter sua instalação atualizada — tanto a CLI quanto o ambiente virtual do seu projeto. Se você está começando do zero, veja [Instalação](/pt-BR/installation). Se está vindo de outro framework, veja [Migrando do LangGraph](/pt-BR/guides/migration/migrating-from-langgraph). --- ## As Duas Coisas Que Você Pode Querer Atualizar O CrewAI vive em dois lugares na sua máquina, e cada um se atualiza de forma independente: | O quê | Como é instalado | Como atualizar | |---|---|---| | A **CLI global `crewai`** | `uv tool install crewai` | `uv tool install crewai --upgrade` | | O **venv do projeto** (onde seu código roda) | `crewai install` / `uv sync` | `uv add "crewai[...]>=X.Y.Z"` e depois `crewai install` | Esses dois podem — e frequentemente ficam — fora de sincronia. Rodar `crewai --version` mostra a versão da CLI. Rodar `uv pip show crewai` dentro do seu projeto mostra a versão do venv. Se forem diferentes, isso é normal; o que importa para o código em execução é a versão do venv. ## Por Que `crewai install` Sozinho Não Atualiza `crewai install` é um wrapper fino em torno de `uv sync`. Ele instala exatamente o que o arquivo `uv.lock` atual diz — ele **não** muda nenhuma restrição de versão. Se seu `pyproject.toml` diz `crewai>=1.11.1` e o lock file resolveu para `1.11.1`, executar `crewai install` vai te manter em `1.11.1` para sempre, mesmo que `1.14.4` esteja disponível. Para realmente atualizar, você precisa: 1. Atualizar a restrição de versão em `pyproject.toml` 2. Re-resolver o lock file 3. Sincronizar o venv `uv add` faz os três de uma vez só. ## Como Atualizar Seu Projeto ```bash # Aumenta a restrição e re-resolve o lock em um único comando uv add "crewai[tools]>=1.14.4" # Sincroniza o venv (crewai install chama uv sync por baixo dos panos) crewai install # Verifica uv pip show crewai # → Version: 1.14.4 ``` Substitua `[tools]` por quaisquer extras que seu projeto utilize (ex.: `[tools,anthropic]`). Verifique a lista de `dependencies` do seu `pyproject.toml` se estiver em dúvida. `uv add` atualiza tanto `pyproject.toml` **quanto** `uv.lock` atomicamente. Se você editar `pyproject.toml` manualmente, ainda precisa rodar `uv lock --upgrade-package crewai` para re-resolver o lock file antes que `crewai install` pegue a nova versão. ## Atualizando a CLI Global A CLI global é separada do seu projeto. Atualize com: ```bash uv tool install crewai --upgrade ``` Se seu shell avisar sobre o `PATH` após a atualização, recarregue-o: ```bash uv tool update-shell ``` Isso **não** mexe no venv do seu projeto — você ainda precisa de `uv add` + `crewai install` dentro do projeto. ## Verifique Se Ambos Estão em Sincronia ```bash # Versão da CLI global crewai --version # Versão do venv do projeto uv pip show crewai | grep Version ``` Eles não precisam coincidir — mas a versão do venv do projeto é o que importa para o comportamento em runtime. CrewAI requer `Python >=3.10, <3.14`. Se o `uv` foi instalado contra um interpretador mais antigo, recrie o venv do projeto com uma versão suportada do Python antes de rodar `crewai install`. --- ## Breaking Changes e Notas de Migração A maioria das atualizações requer apenas pequenos ajustes. As áreas abaixo são as que quebram silenciosamente ou com tracebacks confusos. ### Caminhos de import: tools e `BaseTool` O caminho canônico para tools é `crewai.tools`. Caminhos antigos ainda aparecem em tutoriais, mas devem ser atualizados. ```python # Antes from crewai_tools import BaseTool from crewai.agents.tools import tool # Depois from crewai.tools import BaseTool, tool ``` O decorador `@tool` e a subclasse `BaseTool` ambos vivem em `crewai.tools`. `AgentFinish` e outros símbolos internos do agente não fazem mais parte da superfície pública — se você os estava importando, mude para event listeners ou callbacks de `Task`. ### Mudanças de parâmetros em `Agent` ```python from crewai import Agent agent = Agent( role="Researcher", goal="Find authoritative sources on {topic}", backstory="You are a careful, source-driven researcher.", llm="gpt-4o-mini", # nome do modelo como string OU um objeto LLM verbose=True, # bool, não um nível inteiro max_iter=15, # default mudou entre versões — defina explicitamente allow_delegation=False, ) ``` - `llm` aceita tanto um nome de modelo como string (resolvido pelo provedor configurado) quanto um objeto `LLM` para controle granular. - `verbose` é um `bool` puro. Passar um inteiro não alterna mais níveis de log. - Os defaults de `max_iter` mudaram entre releases. Se seu agente para silenciosamente de iterar após a primeira chamada de tool, defina `max_iter` explicitamente. ### Parâmetros de `Crew` ```python from crewai import Crew, Process crew = Crew( agents=[...], tasks=[...], process=Process.sequential, # ou Process.hierarchical memory=True, cache=True, embedder={"provider": "openai", "config": {"model": "text-embedding-3-small"}}, ) ``` - `process=Process.hierarchical` requer ou `manager_llm=` ou `manager_agent=`. Sem um deles, o kickoff lança erro na validação. - `memory=True` com um provedor de embedding não-default precisa de um dicionário `embedder` — veja [Configuração de memória e embedder](#memory-embedder-config) abaixo. ### Saída estruturada de `Task` Use `output_pydantic`, `output_json` ou `output_file` para forçar o resultado de uma task em um formato tipado: ```python from pydantic import BaseModel from crewai import Task class Article(BaseModel): title: str body: str write = Task( description="Write an article about {topic}", expected_output="A short article with a title and body", agent=writer, output_pydantic=Article, # a classe, NÃO uma instância output_file="output/article.md", ) ``` `output_pydantic` recebe a **classe** em si. Passar `Article(title="", body="")` é um erro comum e falha com um erro de validação confuso. ### Configuração de memória e embedder {#memory-embedder-config} Se `memory=True` e você não está usando os embeddings padrão da OpenAI, é preciso passar um `embedder`: ```python crew = Crew( agents=[...], tasks=[...], memory=True, embedder={ "provider": "ollama", "config": {"model": "nomic-embed-text"}, }, ) ``` Defina as credenciais do provedor relevante (`OPENAI_API_KEY`, `OLLAMA_HOST`, etc.) no seu arquivo `.env`. Os caminhos de armazenamento de memória são locais ao projeto por default — apague o diretório de memória do projeto se trocar de embedder, já que dimensões diferentes não se misturam.