\n\n\n\n Confronto entre os SDKs dos agentes – Um guia avançada com exemplos práticos - AgntKit \n

Confronto entre os SDKs dos agentes – Um guia avançada com exemplos práticos

📖 9 min read1,699 wordsUpdated Apr 5, 2026

“`html

Introdução aos SDK dos Agentes

A ascensão dos agentes autônomos alimentados por IA transformou nossa maneira de conceber aplicações de software. Esses agentes, capazes de compreender, raciocinar e agir de forma independente ou semi-independente, prometem um futuro de sistemas altamente inteligentes e automatizados. No centro da construção de tais agentes estão os Kits de Desenvolvimento de Software para Agentes (SDK). Um SDK de Agentes fornece as ferramentas, bibliotecas e frameworks básicos necessários para projetar, desenvolver, implementar e gerenciar agentes de IA. Este guia avançado explorará uma análise comparativa dos populares SDK para Agentes, destacando sua arquitetura, funcionalidades avançadas, casos de uso práticos e fornecendo exemplos de código para ilustrar pontos fortes e fracos. Exploraremos SDK renomados como LangChain, AutoGen, LlamaIndex, e discutiremos as alternativas emergentes.

Componentes Essenciais de um SDK de Agente

Antes de explorar SDKs específicos, é crucial compreender os componentes arquitetônicos comuns que oferecem:

  • Integração LLM: Facilita a conexão fluida com diferentes Modelos de Linguagem de Grande Escala (LLMs) (por exemplo, OpenAI, Anthropic, modelos Hugging Face).
  • Gestão de Prompts: Ferramentas para construir, modelar e gerenciar os prompts para uma interação ideal com os LLM.
  • Chamada de Ferramentas/Funções: Mecanismos que permitem aos agentes interagir com APIs externas, bancos de dados ou funções personalizadas para expandir suas capacidades.
  • Gestão da Memória: Sistemas que permitem aos agentes manter o contexto, o histórico das conversas e as informações adquiridas durante as interações.
  • Planejamento e Raciocínio: Frameworks para permitir que os agentes decomponham tarefas complexas, planejem as fases de execução e raciocinem sobre os resultados (por exemplo, ReAct, CoT).
  • Orquestração dos Agentes: Ferramentas para definir sistemas multi-agente, gerenciar a comunicação e coordenar as tarefas entre os agentes.
  • Observabilidade e Depuração: Funcionalidades para monitorar o comportamento dos agentes, rastrear os caminhos de execução e resolver problemas.
  • Implementação e Escalabilidade: Considerações e ferramentas para implementar agentes em ambientes de produção e escalá-los.

LangChain: O Canivete Suíço para o Desenvolvimento de Agentes

LangChain é sem dúvida o SDK de Agentes mais amplamente adotado e completo. É conhecido por sua modularidade e suas integrações extensas, tornando-o uma escolha poderosa para fluxos de trabalho de agentes complexos.

Arquitetura e Conceitos Básicos

A arquitetura do LangChain é construída em torno de diversas abstrações fundamentais:

  • LLMs/ChatModels: Interfaces para interagir com vários provedores de LLM.
  • Prompts: Modelos para gerar entradas para LLM.
  • Chains: Sequências de chamadas para LLM ou outras ferramentas.
  • Agentes: LLMs potenciados com ferramentas para interagir com seu ambiente. Eles usam um “ciclo de raciocínio” (por exemplo, ReAct) para decidir qual ferramenta utilizar.
  • Ferramentas: Funções que um agente pode chamar para executar ações específicas.
  • Memória: Armazena interações passadas para fornecer contexto.
  • Recuperadores: Componentes para recuperar documentos de uma base de conhecimento.
  • VectorStores: Bancos de dados para armazenar embeddings vetoriais.

Funcionalidades Avançadas e Exemplo Prático (Agente ReAct com Ferramenta Personalizada)

LangChain se destaca na criação de agentes sofisticados que utilizam ferramentas personalizadas e raciocínio complexo. Vamos construir um agente LangChain que pode responder a perguntas sobre os preços das ações atuais usando uma ferramenta personalizada e, em seguida, resumir as notícias relacionadas à empresa.

Exemplo: Agente de Preço das Ações e Notícias

A primeira coisa que fazemos é definir uma ferramenta personalizada para recuperar os preços das ações:

“`


from langchain.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
import yfinance as yf

class StockPriceInput(BaseModel):
 ticker: str = Field(description="O símbolo da ação (por exemplo, MSFT para Microsoft).")

class StockPriceTool(BaseTool):
 name = "get_stock_price"
 description = "Útil para obter o preço atual das ações de uma empresa."
 args_schema: Type[BaseModel] = StockPriceInput

 def _run(self, ticker: str) -> str:
 try:
 stock = yf.Ticker(ticker)
 current_price = stock.history(period="1d")["Close"].iloc[-1]
 return f"O preço atual de {ticker} é de R${current_price:.2f}"
 except Exception as e:
 return f"Não foi possível recuperar o preço da ação para {ticker} : {e}"

 async def _arun(self, ticker: str) -> str:
 raise NotImplementedError("Async não implementado para StockPriceTool")

Depois, integramos com uma API de notícias (por exemplo, NewsAPI.org – certifique-se de ter uma chave API) como outra ferramenta. Para fins de brevidade, usaremos uma função fictícia para a recuperação de notícias:


from langchain.tools import tool

@tool
def get_company_news(company_name: str) -> str:
 """Útil para obter as manchetes recentes de notícias sobre um nome de empresa dado."""
 # Em um cenário real, isso chamaria uma API de notícias
 if "Microsoft" in company_name:
 return "Notícias recentes da Microsoft: Anúncio de uma nova parceria em IA, lucros superiores às expectativas."
 elif "Apple" in company_name:
 return "Notícias recentes da Apple: Vendas do Vision Pro sólidas, rumores de lançamento de um novo iPhone."
 else:
 return f"Nenhuma notícia recente encontrada para {company_name}."

Agora, vamos criar o agente:


from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub

# Inicializar LLM
llm = ChatOpenAI(temperature=0, model="gpt-4-turbo-preview") # ou gpt-3.5-turbo

# Definir as ferramentas que o agente pode usar
tools = [StockPriceTool(), get_company_news]

# Obter o modelo de prompt ReAct do LangChain Hub
prompt = hub.pull("hwchase17/react")

# Criar o agente ReAct
agent = create_react_agent(llm, tools, prompt)

# Criar o Agent Executor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)

# Executar o agente
print(agent_executor.invoke({"input": "Qual é o preço atual da ação da Apple e quais são as últimas notícias sobre eles?"}))
# Saída Esperada (truncada por brevidade):
# > Inserindo em um novo agente AgentExecutor...
# Pensamento: Primeiro devo encontrar o preço das ações da Apple, depois buscar as notícias sobre eles.
# Ação: get_stock_price
# Entrada da Ação: AAPL
# Observação: O preço atual de AAPL é de R$xxx.xx
# Pensamento: Agora tenho o preço das ações. Devo obter as notícias para a Apple.
# Ação: get_company_news
# Entrada da Ação: Apple
# Observação: Notícias recentes da Apple: Vendas do Vision Pro sólidas, rumores de lançamento de um novo iPhone.
# Pensamento: Tenho tanto o preço das ações quanto as notícias sobre a Apple. Agora posso fornecer uma resposta detalhada.
# Resposta Final: O preço atual da ação da Apple é de R$xxx.xx. As notícias recentes sobre a Apple incluem vendas sólidas do Vision Pro e rumores sobre o lançamento de um novo iPhone.

Este exemplo demonstra a capacidade do LangChain de orquestrar várias ferramentas dentro de um ciclo de raciocínio sofisticado (ReAct), tornando-o ideal para tarefas que requerem decisões dinâmicas.

Pontos Fortes e Fracos

  • Pontos Fortes: Extremamente flexível e modular, vasto ecossistema de integrações (LLMs, lojas de vetores, ferramentas), forte suporte da comunidade, excelente para raciocínios complexos em múltiplas etapas.
  • Pontos Fracos: Pode ter uma curva de aprendizado acentuada, o código padrão pode acumular, a depuração de desempenho pode ser difícil em cadeias complexas.

AutoGen: Conversas Multi-Agente e Orquestração

O AutoGen da Microsoft foca nas conversas entre múltiplos agentes, permitindo que programadores criem sistemas onde múltiplos agentes colaboram para resolver tarefas. Enfatiza a flexibilidade na definição de papéis dos agentes e modelos de comunicação.

Arquitetura e Conceitos Básicos

Os conceitos fundamentais do AutoGen giram em torno de:

“`html

  • Agentes : Os elementos básicos. Podem ser alimentados por LLM (ConversableAgent) ou funcionar como proxies humanos (UserProxyAgent).
  • Conversas : Os agentes se comunicam enviando mensagens entre si.
  • GroupChat : Facilita conversas entre vários agentes de forma estruturada.
  • Execução de Código : Os agentes podem executar código localmente ou em um contêiner Docker.

Funcionalidades Avançadas e Exemplo Prático (Geração e Revisão de Código)

AutoGen se destaca em cenários onde uma tarefa é naturalmente dividida em subtarefas que requerem diferentes competências, simuladas por diferentes agentes. Vamos criar um sistema simples de múltiplos agentes para a geração e revisão de código.

Exemplo: Gerador e Revisor de Código Python


import autogen

# Configura LLM (certifique-se de que OPENAI_API_KEY esteja definida nas variáveis de ambiente)
config_list = autogen.config_list_openai_aoai(exclude="aoai")

# Cria um UserProxyAgent para funcionar como interface humana
user_proxy = autogen.UserProxyAgent(
 name="User_Proxy",
 human_input_mode="NEVER", # Defina como "ALWAYS" para depuração interativa
 max_consecutive_auto_reply=10,
 is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
 code_execution_config={
 "work_dir": "coding", 
 "use_docker": False # Defina como True para uma execução isolada
 },
)

# Cria um AssistantAgent para a geração de código
coder = autogen.AssistantAgent(
 name="Coder",
 llm_config={"config_list": config_list},
 system_message="Você é um programador Python útil. Escreva um código Python limpo e eficiente."
)

# Cria outro AssistantAgent para a revisão e teste de código
reviewer = autogen.AssistantAgent(
 name="Reviewer",
 llm_config={"config_list": config_list},
 system_message="Você é um revisor de código. Examine o código Python fornecido para verificar sua precisão, eficiência e bugs. Sugira melhorias e escreva casos de teste se necessário."
)

# Cria um GroupChat para orquestrar a conversa
groupchat = autogen.GroupChat(
 agents=[user_proxy, coder, reviewer],
 messages=[],
 max_round=15,
 speaker_selection_method="auto" # Deixe que AutoGen decida quem fala a seguir
)

# Cria um GroupChatManager para gerenciar a conversa em grupo
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config={"config_list": config_list})

# Inicia a conversa
user_proxy.initiate_chat(
 manager,
 message="Escreva uma função Python que calcule de forma eficiente o número de Fibonacci n-ésimo. O revisor verificará e sugerirá testes."
)

# Saída esperada (simplificada e truncada):
# User_Proxy (para o gerente): Escreva uma função Python...
# Coder (para o gerente): Aqui está o código :
# ```python
# def fibonacci(n):
# if n <= 0: return 0
# elif n == 1: return 1
# else:
# a, b = 0, 1
# for _ in range(2, n + 1):
# a, b = b, a + b
# return b
# ```
# Reviewer (para o gerente): Parece bom, eficiente usando uma abordagem iterativa. Aqui está um caso de teste :
# ```python
# # test_fibonacci.py
# import pytest
# from your_module import fibonacci # Suponha que o código esteja registrado em um módulo

# def test_fibonacci_zero(): assert fibonacci(0) == 0
# def test_fibonacci_one(): assert fibonacci(1) == 1
# def test_fibonacci_small_numbers():
# assert fibonacci(2) == 1
# assert fibonacci(3) == 2
# assert fibonacci(5) == 5
# def test_fibonacci_large_number():
# assert fibonacci(10) == 55
# ```
# User_Proxy (para o gerente): TERMINATE

Este exemplo demonstra como AutoGen facilita um fluxo de trabalho colaborativo, com agentes assumindo papéis distintos e trocando mensagens para alcançar um objetivo comum. O UserProxyAgent pode até executar o código gerado se configurado dessa forma.

Pontos Fortes e Fracos

  • Pontos Fortes : Excelente para colaboração multi-agente, orquestração de tarefas baseadas em linguagem natural, boas capacidades de execução de código, intuitivo para criar agentes conversacionais.
  • Pontos Fracos : Menos ênfase no raciocínio interno complexo dos agentes (como ReAct para um único agente), pode ser menos evidente para fluxos de trabalho profundamente aninhados e sequenciais em comparação com as cadeias do LangChain, gerenciar fluxos de conversa complexos pode se tornar delicado.

LlamaIndex : Aumento dos Dados para os LLM

Embora não seja estritamente um 'Agent SDK' no mesmo sentido do LangChain ou AutoGen, LlamaIndex é indispensável para construir agentes que precisam interagir e raciocinar sobre enormes quantidades de dados privados ou específicos de um domínio. Ele se concentra no 'R' de RAG (Geração Aumentada por Recuperação).

Arquitetura e Conceitos Fundamentais

```

A arquitetura do LlamaIndex é centrada na ingestão de dados, indexação e consultas:

  • Carregamento: Conectores para diferentes fontes de dados (PDF, banco de dados, API, etc.).
  • Nós: Porções de dados ingeridos, frequentemente com metadados.
  • Índice: Representações estruturadas dos seus dados, otimizadas para recuperação (por exemplo, VectorStoreIndex, KeywordTableIndex).
  • Motores de consulta: Interfaces para interrogar os índices, frequentemente utilizando LLM para síntese.
  • Recuperadores: Componentes que extraem nós relevantes de um índice com base em uma consulta.
  • Agentes: O LlamaIndex também possui sua própria abstração de agente, frequentemente construída em torno de um motor de consulta e ferramentas, projetada para interagir com fontes de dados.

Funcionalidades Avançadas & Exemplo Prático (Interrogando Dados Não Estruturados)

O LlamaIndex se destaca na construção de agentes que podem 'falar' com seus dados. Vamos criar um agente que pode responder a perguntas baseadas em uma coleção de documentos.

Exemplo: Agente Q&R Documentos

Suponha que temos uma pasta data/ contendo vários arquivos de texto (por exemplo, anotações de reuniões, descrições de produtos).


import os
from llama_index.readers.simple import SimpleDirectoryReader
from llama_index.core import VectorStoreIndex, Settings
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core.agent import AgentRunner
from llama_index.core.tools import QueryEngineTool, ToolMetadata

# 1. Carrega os documentos de uma pasta
# Cria arquivos de dados fictícios para demonstração
if not os.path.exists("data"): os.makedirs("data")
with open("data/product_info.txt", "w") as f: f.write("O novo produto XYZ tem uma câmera de 12MP, uma tela OLED de 6,1 polegadas e 256 GB de armazenamento. Custa 999 $.")
with open("data/company_policy.txt", "w") as f: f.write("Os funcionários têm direito a 20 dias de férias remuneradas por ano. Todas as despesas de viagem devem ser aprovadas com antecedência.")

documents = SimpleDirectoryReader("data").load_data()

# 2. Configura o LLM e o modelo de integração (certifique-se de que OPENAI_API_KEY está definido)
Settings.llm = OpenAI(model="gpt-3.5-turbo", temperature=0)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-ada-002")

# 3. Cria um VectorStoreIndex a partir dos documentos
index = VectorStoreIndex.from_documents(documents)

# 4. Cria um motor de consulta a partir do índice
query_engine = index.as_query_engine()

# 5. Define o motor de consulta como uma ferramenta para o agente
query_engine_tool = QueryEngineTool(
 query_engine=query_engine,
 metadata=ToolMetadata(
 name="document_qa_tool",
 description="Pode responder a perguntas sobre documentos empresariais, informações de produtos e políticas."
 ),
)

# 6. Cria o agente LlamaIndex (usa por padrão o OpenAI LLM se configurado)
agent = AgentRunner(tools=[query_engine_tool], llm=Settings.llm, verbose=True)

# 7. Executa o agente
response = agent.chat("Quais são as especificações do novo produto XYZ?")
print(response)
# Saída esperada:
# > Entrou no ciclo do agente.
# Pensamento: O usuário solicita especificações do produto. Devo usar a ferramenta `document_qa_tool` para interrogar os documentos carregados.
# Chamada da ferramenta: document_qa_tool com os argumentos: {"query": "especificações do novo produto XYZ"}
# Resposta: O novo produto XYZ tem uma câmera de 12MP, uma tela OLED de 6,1 polegadas e 256 GB de armazenamento.
# > Ciclo do agente completo.
# O novo produto XYZ tem uma câmera de 12MP, uma tela OLED de 6,1 polegadas e 256 GB de armazenamento.

response = agent.chat("Quantos dias de férias remuneradas têm direito os funcionários?")
print(response)
# Saída esperada:
# > Entrou no ciclo do agente.
# Pensamento: O usuário solicita a política da empresa sobre férias remuneradas. Devo usar a ferramenta `document_qa_tool` para interrogar os documentos carregados.
# Chamada da ferramenta: document_qa_tool com os argumentos: {"query": "política de férias remuneradas"}
# Resposta: Os funcionários têm direito a 20 dias de férias remuneradas por ano.
# > Ciclo do agente completo.
# Os funcionários têm direito a 20 dias de férias remuneradas por ano.

Este exemplo destaca a capacidade do LlamaIndex de tornar dados não estruturados interrogáveis pelos LLMs. O agente decide dinamicamente usar o document_qa_tool quando confrontado com perguntas que podem ser respondidas pelos documentos ingeridos.

Pontos de Força e Fraqueza

```html

  • Forze : Incomparável para RAG, boas capacidades de ingestão e indexação de dados, um excelente suporte para diversas fontes de dados e arquivos de vetores, ideal para construir agentes potenciados pelo conhecimento.
  • Fraquezas : Menos focado em conversas complexas entre múltiplos agentes ou cadeias de raciocínio profundas e multi-etapas em comparação com LangChain/AutoGen (embora possa se integrar com eles), sua abstração de agente é principalmente destinada a interagir com os dados.

Alternativas Emergentes e SDK de Nicho

O campo dos agentes evolui rapidamente, com novos SDK e frameworks que emergem constantemente:

  • CrewAI : Baseia-se nos conceitos de LangChain e AutoGen, fornecendo um framework mais orientado para definir papéis, tarefas e processos para equipes multi-agentes. Simplifica a orquestração de fluxos de trabalho complexos com foco em responsabilidades claras dos agentes.
  • Haystack (Deepset) : Embora seja principalmente um framework para construir sistemas de busca, Haystack também suporta RAG e capacidades de agentes. É conhecido por sua abordagem modular ao pipeline e seu forte foco na preparação para a produção.
  • Semantic Kernel (Microsoft) : Um SDK leve que permite aos desenvolvedores integrar LLM com linguagens de programação tradicionais. Foca em 'plugins' e 'habilidades' para estender as capacidades dos LLM, oferecendo uma abordagem mais centrada no código para o desenvolvimento de agentes.

Escolhendo o SDK de Agente Certo para Seu Projeto

O melhor SDK de agente depende fortemente das necessidades específicas do seu projeto:

  • Para raciocínio complexo com um único agente que utiliza ferramentas personalizadas e fluxos de trabalho flexíveis : LangChain é uma ótima escolha devido à sua modularidade e suas numerosas integrações. É a referência para construir agentes autônomos e sofisticados.
  • Para colaboração multi-agentes, interfaces conversacionais e execução automática de tarefas (especialmente envolvendo código) : AutoGen se destaca. Se o seu problema se divide naturalmente em papéis capazes de conversar e agir, AutoGen oferece um framework poderoso.
  • Para agentes que precisam interrogar e sintetizar eficazmente informações de vastos conjuntos de dados proprietários ou não estruturados : LlamaIndex é indispensável. É sua principal ferramenta para construir agentes alimentados por RAG. Muitas vezes, o LlamaIndex é usado em associação com LangChain ou AutoGen para fornecer capacidades de recuperação de dados aos seus agentes.
  • Para fluxos de trabalho multi-agentes estruturados com papéis e tarefas claras : Considere CrewAI para uma abordagem mais organizada aos agentes baseados em equipe.
  • Para integrar as capacidades LLM em aplicações existentes com foco em "habilidades" e plugins : Semantic Kernel pode ser uma escolha melhor, especialmente para desenvolvedores .NET.

Conclusão

O campo dos SDK para agentes é dinâmico e poderoso, oferecendo um conjunto diversificado de ferramentas para dar vida aos agentes de IA. LangChain, AutoGen e LlamaIndex representam a vanguarda, cada um com vantagens distintas adequadas a diferentes aspectos do desenvolvimento de agentes. Compreendendo suas arquiteturas fundamentais, funcionalidades avançadas e aplicações práticas, os desenvolvedores podem tomar decisões informadas, combinar suas forças e criar sistemas de agentes de IA altamente inteligentes, robustos e escaláveis, capazes de enfrentar desafios complexos do mundo real. O futuro da IA é cada vez mais agente, e dominar esses SDK é a chave para desbloquear seu pleno potencial.

```

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

Learn more →
Browse Topics: comparisons | libraries | open-source | reviews | toolkits
Scroll to Top