Aprendizagem pessoal com IA
e orientação prática
Beanbag Marscode1

LangGraph: uma estrutura para construção e execução de agentes de IA com base na topologia de gráficos acíclicos direcionados

A Inteligência Artificial (IA) é um campo em rápido crescimento. Os modelos de linguagem evoluíram para permitir que os agentes de IA executem tarefas complexas e tomem decisões complexas. No entanto, à medida que as habilidades desses agentes continuam a crescer, a infraestrutura para dar suporte a eles tem dificuldades para acompanhar esse ritmo.

LangGraph, uma biblioteca revolucionária projetada para revolucionar a tecnologia de agente de IA Compilação e tempo de execução Implementação.


LangGraph apresenta um novo agenteCompilação e tempo de execuçãoParadigma construtivo, que vê os fluxos de trabalho do agente como estruturas baseadas em uma topologia de gráfico cíclico.

 

O que é o LangGraph?

Uma importante proposta de valor da LangChain é a capacidade de criar facilmente cadeias personalizadas. No entanto, a LangChain não tem uma maneira fácil de introduzir loops nessas cadeias. De fato, essas cadeias são gráficos acíclicos direcionados (DAG) - Como a maioria das estruturas de orquestração de dados.

Um padrão comum quando as pessoas criam aplicativos LLM complexos é introduzir loops no tempo de execução. Esses loops geralmente utilizam o LLM para raciocinar sobre a próxima ação no loop. Isso é essencialmente o equivalente a executar o LLM em um loop for. Esses sistemas são geralmente chamados de agentes.

A forma mais simples é um loop com duas etapas:

  1. Chame o LLM para determinar qual ação deve ser tomada ou qual resposta deve ser dada ao usuário
  2. Execute a operação fornecida e retorne à etapa 1.

Essas etapas são repetidas até que a resposta final seja gerada. Esse é o loop que aciona o AgentExecutor no coração do LangChain. É um loop muito simples, mas também é o mais importante, pois coloca quase todo o poder de decisão e raciocínio nas mãos do LLM.

É importante observar que esse processo geralmente requer mais controle. Por exemplo, forçar o agente a invocar uma ferramenta específica primeiro, mais controle sobre como a ferramenta é invocada, prompts diferentes dependendo do estado em que o agente se encontra etc.

Esses são processos controlados, que a LangChain chama de "máquinas de estado".

Essas máquinas de estado têm a capacidade de fazer um loop; no entanto, é necessária alguma intervenção humana na construção desse loop.

O LangGraph cria essas máquinas de estado especificando-as como gráficos.

O LangGraph foi desenvolvido com base no LangChain e é totalmente compatível com o ecossistema do LangChain.interoperabilidade. Ele agrega novo valor principalmente ao introduzir uma maneira fácil de criar diagramas de loop. Isso é muito útil na criação de tempos de execução de agentes.

Essa abordagem permite que os agentes apresentem comportamentos mais variáveis e diferenciados do que os modelos de execução linear de seus antecessores. Usando a teoria dos gráficos, o LangGraph oferece novas maneiras de desenvolver sistemas complexos de agentes em rede.

blank Figura: um LangGraph para geração de código

Um exemplo: sistema dinâmico de perguntas e respostas

tomar O usuário pode estar fornecendo informações ao modelo passo a passo, em vez de enviar todas as informações de uma só vez.

prescrição Use um diagrama cíclico:

  1. Permitir que o LLM gere respostas iniciais.
  2. Se a resposta estiver incompleta ou se forem necessárias mais informações, gere uma nova pergunta e continue a perguntar ao usuário.
  3. até que o usuário confirme que o problema foi resolvido.

Estrutura do diagrama de ciclo

  • NósCada nó representa uma tarefa ou operação específica, como geração de texto, resposta a perguntas, processamento de dados etc.
  • BordasConexões entre nós indicam a ordem de execução da tarefa, possivelmente com julgamentos condicionais.
  • Caminho de loopingLoops: Os loops são formados quando a saída de um nó precisa ser realimentada para o nó anterior ou quando precisa ser executada repetidamente.
  • Condição de paradaOs diagramas de loop estão sujeitos a algum tipo de condição de término, por exemplo, quando a qualidade do resultado atende aos requisitos, quando o limite do número de vezes definido é atingido ou quando um sinal de parada acionado externamente é ativado.

 

Por que usar o LangGraph?

  • destreza : À medida que os agentes de IA evoluem, os desenvolvedores precisam de mais controle sobre o tempo de execução do agente para permitir planos de ação personalizados e procedimentos de tomada de decisão.
  • A natureza circular do raciocínio de IA LangGraph: Muitos aplicativos LLM complexos dependem da execução cíclica ao usar estratégias como raciocínio encadeado. O LangGraph oferece uma estrutura natural para modelar esses processos cíclicos.
  • sistema de inteligência múltipla Inteligência múltipla: à medida que os fluxos de trabalho com várias inteligências se tornam mais comuns, aumenta a necessidade de sistemas que possam gerenciar e coordenar com eficiência várias inteligências autônomas.

 

Use o código para ver como o LangGraph funciona

A funcionalidade do LangGraph se baseia em alguns elementos básicos:

  • Nós. Essas são ferramentas para funções ou agentes.
  • Bordas. Definir caminhos para execução e fluxo de dados no sistema do agente, conectando os nós.
  • StateGraph. O LangGraph permite que os dados persistentes sejam mantidos entre os ciclos de execução por meio do gerenciamento e da atualização de objetos de estado, com o fluxo de dados entre os nós.

Figura: Fluxo de trabalho básico do LangGraph

StateGraph

StateGraph é uma classe que representa um gráfico. Você cria um gráfico passando a classe estado para inicializar essa classe. A definição de estado representa um objeto de estado central que é atualizado ao longo do tempo. Esse estado é atualizado por nós no gráfico, que retornam operações sobre os atributos desse estado na forma de armazenamentos de valores-chave.

import os # Importar o módulo do sistema operacional
os.environ['OpenAI_API_KEY'] = 'hk-iwtbi1e427'
from typing import Annotated
de typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
class State(TypedDict).
    # As mensagens são do tipo "list" e "add_messages" em Annotated define como as mensagens são atualizadas.
    # Nesse exemplo, as mensagens são anexadas à lista, não substituídas.
    messages: Annotated[list, add_messages]
# Crie uma instância de StateGraph, passando a classe State
graph_builder = StateGraph(State)

Nós

Criar um StateGraph Depois disso, você pode usar o graph.add_node(name, value) Sintaxe para adicionar nós. nome O argumento é uma cadeia de caracteres que é o nome do nó. valor O argumento é uma função ou um LCEL executável que será chamado.

Essa função /LCEL aceita uma função que é igual a estado tem um dicionário com o mesmo formato da entrada e gera um dicionário que usa o parâmetro estado para atualizar o dicionário.

from langchain_openai import ChatOpenAI # Importar ChatOpenAI from langchain_openai module
llm = ChatOpenAI( # Criar instância do ChatOpenAI
    model="gpt-4o-mini", # Especificar modelo
    temperature=0, # Definir a temperatura
    base_url="https://api.openai-hk.com/v1" # Definir a URL de base
)
def chatbot(state: State):# Defina a função de chatbot que aceita argumentos do tipo State
    """
    Processa uma solicitação de chatbot e retorna uma mensagem.
    Parâmetros.
    state (State): contém o estado da mensagem.
    Retorna.
    dict: dicionário de mensagens geradas pelo bot.
    """
    return {"messages": [llm.invoke(state["messages"])]} # Retorna o dicionário que contém as mensagens
# O primeiro argumento é o nome do nó
# O segundo argumento é a função ou o objeto que está sendo chamado
graph_builder.add_node("chatbot", chatbot) # Adiciona um nó ao gráfico com o nome "chatbot"

Bordas

Indica que um dos nós é sempre chamado após o outro

# Adicionando uma borda de START a "chatbot"
graph_builder.add_edge(START, "chatbot")
# Adicionar uma aresta de "chatbot" a END.
graph_builder.add_edge("chatbot", END)  

Compilar Compilar

Depois de definir nosso gráfico, podemos compilá-lo para que seja executável! Exponha os mesmos métodos da LangChain ( .invocar (matemática) gênero .stream (matemática) gênero .astream_log etc.), permitindo que ele seja chamado da mesma forma que uma cadeia.

graph = graph_builder.compile() # Compilar o gráfico

estar em movimento

def stream_graph_updates(user_input: str): # Define a função stream_graph_updates para aceitar a entrada do usuário
    """
    Use user_input para transmitir mensagens de atualização do gráfico.
    Parâmetros.
    user_input (str): mensagem de entrada do usuário.
    Retorna.
    Nenhum
    """
    # Itere pelos eventos de fluxo do gráfico, passando as mensagens do usuário para obter a resposta do modelo
    for event in graph.stream({"messages": [("user", user_input)]}): # Percorra os eventos de fluxo do gráfico
        for value in event.values(): # Percorre os valores do evento
            print("Assistant:", value["messages"][-1].content) # Imprima a última mensagem do assistente
whileTrue.
    Tente.
        user_input = input("User: ") # Obtenha a entrada do usuário
        if user_input.lower() in ["quit", "exit", "q"]: # Verifique se o usuário deseja sair.
            print("Goodbye!")
            break# Saia do loop
        # Chame a função stream_graph_updates para processar a entrada do usuário
        stream_graph_updates(user_input)
    except: # catch exception
        # fallback se input() não estiver disponível
        user_input = "What do you know about LangGraph? "# definir a entrada padrão do usuário
        print("User: " + user_input) # imprimir a entrada do usuário
        stream_graph_updates(user_input) # chamar a função stream_graph_updates para processar a entrada padrão
        break# Sair do loop

"Diagrama" de visualização (opcional)

Visualização de "diagramas" no ambiente do Jupyter Notebook

blank

efeito operacional

blank

Estruturas como a LangGraph estão se tornando cada vez mais importantes à medida que a IA evolui.

À medida que os desenvolvedores se familiarizam com os recursos do LangGraph, podemos esperar ver agentes de IA mais avançados, capazes de executar tarefas mais complexas.

Em resumo, o LangGraph é um avanço significativo no desenvolvimento de agentes de IA. Ele permite que os desenvolvedores ultrapassem os limites do que é possível com os agentes de IA, eliminando as deficiências dos sistemas anteriores e fornecendo uma estrutura flexível e baseada em gráficos para a construção e execução de agentes.

CDN1
Não pode ser reproduzido sem permissão:Chefe do Círculo de Compartilhamento de IA " LangGraph: uma estrutura para construção e execução de agentes de IA com base na topologia de gráficos acíclicos direcionados

Chefe do Círculo de Compartilhamento de IA

O Chief AI Sharing Circle se concentra no aprendizado de IA, fornecendo conteúdo abrangente de aprendizado de IA, ferramentas de IA e orientação prática. Nosso objetivo é ajudar os usuários a dominar a tecnologia de IA e explorar juntos o potencial ilimitado da IA por meio de conteúdo de alta qualidade e compartilhamento de experiências práticas. Seja você um iniciante em IA ou um especialista sênior, este é o lugar ideal para adquirir conhecimento, aprimorar suas habilidades e realizar inovações.

Entre em contato conosco
pt_BRPortuguês do Brasil