Criação de agentes com Langchain, Langgraph e CrewAI

Conceitos básicos

editar

A maioria das definições colocam Agentes como Inteligências Artificiais que possuem autonomia suficiente para tomar ações sem supervisão de um ser humano. Há poucos anos, isso era improvável, mas hoje, com as evoluções semanais de GenAI, é realidade. Com agentes, é possível um novo mundo de automações e novas tecnologias. Naturalmente, este se tornou o "queridinho" das grandes empresas, que constantemente têm buscado reduzir seus custos através da implantação de múltiplos agentes em tarefas automatizáveis. De fato, para se ter uma noção, mesmo empresas brasileiras como Magalu, Steffanini, Petlove e Pipefy já somam dezenas (senão centenas) de milhares de agentes em produção.

No fundo, agentes não passam de chamadas para alguma LLM (como OpenAI ou Llama) com um system prompt específico. O system prompt define, na chamada para a IA, o que esperamos para a resposta, de maneira que tenhamos uma maior probabilidade de obter o que esperamos. Tome como exemplo o seguinte prompt:

Você é um assistente alegre, engraçado e que gosta de piadas.

A seguir, você conversará com uma pessoa que quer ouvir as suas piadas. Conte as melhores piadas que tiver!

Ao que, ao chamar a API da OpenAI, temos:

Claro! Estou aqui para espalhar risadas! Vamos começar com algumas piadas:

1. Por que o carteiro não entrega cartas na chuva?

  Porque ele tem que se proteger das correspondências molhadas! 🌧️📬

2. Qual é o peixe mais engraçado dos oceanos?

  O peixe palhasssooo! 🤡🐟

3. O que acontece quando uma galinha fica com raiva?

  Ela grita "Piu-iu-iu! Vou botar um ovo bomba!" 💣🐔

4. Por que o laptop foi ao médico?

  Porque estava com muitos vírus! 🤒💻

5. E aí, o que o tomate disse para o outro?

  "Se você não ketchup, também não mostarda!" 🍅

Se precisar de mais risadas, estou à disposição! 😄

Para a maioria das LLM's, o system prompt deve ser enviado a cada pedido. Por conta disso, quanto maior o seu tamanho, maior é o preço (em dólar) que se paga por Pedido. O contexto pode ser simples como o exemplo acima, ou complexo a ponto de tornar o uso da LLM inviável. Claro, tudo isso também depende do seu uso.

Para gerar o output mostrado, foi executado o seguinte código:

client = OpenAI()

load_dotenv()

system_prompt = """

Você é um assistente alegre, engraçado e que gosta de piadas.

A seguir, você conversará com uma pessoa que quer ouvir as suas piadas. Conte as melhores piadas que tiver!:

"""

completion = client.chat.completions.create(

   model="gpt-4o",

   messages=[

       {"role": "system", "content": system_prompt},

   ],

)

print(completion.choices[0].message.content)

Note que não usamos libs adicionais senão a biblioteca disponibilizada pela própria OpenAI. A seguir, veremos outras formas de interação mais refinadas.

Ferramentas atuais

editar

Atualmente, destacam-se algumas ferramentas para a criação de agentes: Langchain, Langgraph e CrewAI. Cada uma delas aborda o problema de diferentes maneiras. De forma simplificada:

  • O Langchain permite criar interações com LLM's através de Chains, que nada mais são que DAGs (Directed Acyclic Graphs) de códigos com chamadas para LLM's no meio.
  • O Langgraph é uma extensão do Langchain, permitindo criar agentes com grafos direcionados possivelmente cíclicos, de maneira que podemos criar loops nos agentes.
  • O CrewAI possibilita criar grupos de agentes (com ReAct) que comunicam entre si.

Langchain e Langgraph

editar

Agentes podem chamar tools (ou funções) como bem entenderem. No Langchain ou Langraph, é possível configurar formas de execução de agentes pré-definidas, como o ReAct. Em específico, esta é uma técnica recente, publicada nesta pesquisa, que força o agente a executar o ciclo "Pensar -> Agir -> Observar resultados da ação -> Pensar", sendo portanto uma soma de Reasoning e Act (e por isso ReAct). As ações que podemos definir para o agente são bastante diversas. No exemplo a seguir, o agente recebeu uma search tool (Tavily), que ele poderá usar para buscar informações na internet.

from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent

search = TavilySearchResults(max_results=2)

tools = [search]

model = ChatOpenAI(model="gpt-4o")
agent_executor = create_react_agent(model, tools)

response = agent_executor.invoke(
    {"messages": HumanMessage("Qual é temperatura de São Paulo?")}
)
print(response["messages"][-1].content)

Resposta:

A temperatura atual em São Paulo é de aproximadamente 24°C.

O que aconteceu no meio do caminho, foi que ele de fato pesquisou na internet pela temperatura de São paulo. Encontrando a resposta, ele imediatamente respondeu ao pedido. Aqui, já aproveito para introduzir uma ferramenta interessante quando trabalhamos com agentes: o LangSmith. Esta é uma plataforma que permite o desenvolvedor visualizar ou debugar a execução do agente. Infelizmente, não foi possível posicionar uma printscreen aqui, mas saiba que foi possível saber que o agente realmente fez uma pesquisa pelo LangSmith.

CrewAI

editar

Com CrewAI, podemos montar equipes de Agentes. Cada um dos agentes, tem um background, habilidades especificas e um trabalho particular a fazer. Por exemplo, um agente pode ser "Pesquisador", enquanto outro o "Escritor". Também, as equipes montadas têm tarefas (ou Tasks); elas encapsulam informações necessárias para a execução, incluindo uma descrição, agente designado, tools necessárias, oferecendo flexibilidade para várias tarefas mais complexidades. A seguir, veremos uma crew que pesquisa na internet e cria um blog post sobre Inteligência Artificial em 2024.

Aqui, você pode ver um dos resultados gerados. Ele parece bom e atualizado, não é?

# Tendências Revolucionárias na Indústria de IA em 2024

À medida que 2024 se aproxima, a indústria da Inteligência Artificial (IA) está passando por um período de transformação sem precedentes. As empresas estão cada vez mais se voltando para a IA não apenas como uma ferramenta, mas como um componente central de suas operações e estratégias. Este artigo explorará três tendências principais que estão moldando o futuro da IA, levando em consideração a evolução tecnológica e as necessidades emergentes dos negócios.

## Ecossistemas de Dados em Nuvem

A primeira tendência significativa é o crescimento dos ecossistemas de dados em nuvem. Com a constante geração de grandes volumes de dados, as empresas estão percebendo a importância de integrar suas informações em plataformas de nuvem. Essa mudança não só possibilita a escalabilidade e acessibilidade dos dados, mas também proporciona economia e segurança aprimoradas. Utilizando um sistema unificado na nuvem, as organizações conseguem alimentar algoritmos de IA de maneira mais eficiente, acelerando a inovação e transformando as decisões empresariais em um cenário cada vez mais competitivo.

## Automação de Processos: Liberdade e Eficiência

Outra tendência essencial é a automação de processos. Soluções baseadas em IA estão agilizando tarefas rotineiras, liberando os colaboradores para que possam se concentrar em atividades mais estratégicas e criativas. Por exemplo, em setores como compras e gestão de contratos, a automação está não apenas aumentando a eficiência operacional, mas também melhorando a experiência dos colaboradores. Essa nova dinâmica permite que os profissionais construam relações mais ricas e significativas com fornecedores e clientes, reforçando o valor humano nas interações comerciais.

## O Poder da IA Generativa

Por fim, a IA generativa está revolucionando a maneira como o conteúdo é criado. Seja na produção de textos, imagens ou até músicas, essa tecnologia possibilita que as empresas personalizem suas ofertas em escala, aumentando a produtividade e a inovação. Em um mercado onde a diferenciação é crucial, a habilidade de gerar conteúdos novos e relevantes rapidamente se torna uma vantagem competitiva significativa. À medida que as organizações adotam a IA generativa, elas não apenas se tornam mais ágeis, mas também mais alinhadas com as expectativas dos consumidores contemporâneos.

Em conclusão, as tendências emergentes em IA destacam a importância de adaptação e inovação no ambiente empresarial atual. Ao integrar tecnologias robustas como ecossistemas de dados em nuvem, automação de processos e IA generativa, as empresas representam um futuro mais promissor e adaptável. A implementação dessas tecnologias não é apenas uma questão de eficiência, mas uma clara aposta em proporcionar experiências superiores e personalizadas aos seus consumidores.

O código que o gerou foi o seguinte:

from crewai import Agent, Crew, Task
from crewai_tools import (DirectoryReadTool, FileReadTool, SerperDevTool,
                          WebsiteSearchTool)

# Instancia as ferramentas
docs_tool = DirectoryReadTool(directory="./blog-posts")
file_tool = FileReadTool()
search_tool = SerperDevTool()
web_rag_tool = WebsiteSearchTool()


# Define os agentes
researcher = Agent(
    role="Analista pesquisador de Mercado",
    goal="Fornece análises de mercado atualizadas da indústria de Inteligência Artificial",
    backstory="Um analista especializado com um olhar atento para as tendências do mercado.",
    tools=[search_tool, web_rag_tool],
    verbose=True,
)

writer = Agent(
    role="Escritor de blog posts",
    goal="Escrever postagens de blog envolventes sobre a indústria de IA",
    backstory="Um escritor habilidoso com paixão por tecnologia.",
    tools=[docs_tool, file_tool],
    verbose=True,
)

# Define as tarefas
research = Task(
    description="Pesquise as últimas tendências na indústria de IA em 2024 e forneça um resumo.",
    expected_output="Um resumo das 3 principais tendências em destaque na indústria de IA com uma perspectiva única sobre sua importância.",
    agent=researcher,
)

write = Task(
    description="Escreva uma postagem de blog envolvente sobre a indústria de IA, com base no resumo do analista de pesquisa. Se inspire nas últimas postagens de blog no diretório.",
    expected_output="Uma postagem de blog de 4 parágrafos formatada em markdown com conteúdo envolvente, informativo e acessível, evitando jargões complexos.",
    agent=writer,
    output_file="blog-posts/new_post.md",
)

# Cria a crew
crew = Crew(
    agents=[researcher, writer],
    tasks=[research, write],
    verbose=True,
)

# Executa a crew
crew.kickoff()

Conclusão

editar

Vale ressaltar que, nessa área, novas ferramentas surgem a todo momento. Podemos tomar como exemplo até mesmo o CrewAI, que surgiu há menos de um ano e, há poucos meses, arrecadou 100 milhões de reais de investimento.

De fato, elas não são muito estáveis, no sentido que elas se atualizam com muita frequência. Existem muitos desenvolvedores que defendem que esses frameworks não estão prontos por agora, e que devemos evitá-los. De qualquer forma,