Agentes de observação criados com o LangGraph

LangGraph é uma estrutura para a criação de fluxos de trabalho com estado e multiagentes utilizando o ` LangChain `. Permite a criação de sistemas de agentes complexos com fluxos de execução cíclicos, gerenciamento de estados e roteamento condicional entre agentes.

Instana oferece observabilidade para aplicações de inteligência artificial ( LangGraph ), permitindo o monitoramento em tempo real de fluxos de trabalho com múltiplos agentes, transições de estado e interações com modelos de linguagem de grande escala (LLM).

Pré-requisitos

Certifique-se de que os seguintes pré-requisitos estejam atendidos.

  • Python 3.8 ou uma versão posterior esteja instalada.

  • Uma chave de LLM do tipo API, como a da Anthropic, OpenAI, ou qualquer outro provedor de LLM compatível com LangGraph.

  • Uma chave de pesquisa API (opcional, para a funcionalidade da ferramenta de pesquisa — Tavily ou DuckDuckGo ).

  • Instana está configurado para sua aplicação, consulte a seção “Introdução ”.

Implementação de monitoramento em aplicações do tipo “ LangGraph ”

Para integrar o Instana à sua aplicação do LangGraph, siga estas etapas:

  1. Instale os pacotes necessários para LangGraph e OpenLLMetry.

    pip install langgraph langchain-anthropic duckduckgo-search traceloop-sdk
  2. Defina as credenciais do seu provedor de LLM e da ferramenta de pesquisa.

    export ANTHROPIC_API_KEY="<your-api-key>"
    export TAVILY_API_KEY="<your-tavily-api-key>"
    Nota:

    Substitua pela variável de ambiente do seu provedor de LLM caso utilize um provedor diferente (por exemplo, OPENAI_API_KEY para OpenAI ). A chave ` API ` do Tavily é opcional caso você esteja usando outra ferramenta de pesquisa.

  3. Crie seu aplicativo LangGraph.

    O exemplo a seguir mostra um fluxo de trabalho com vários participantes, envolvendo um pesquisador e um redator:

    import os
    from typing import Literal
    from langchain_anthropic import ChatAnthropic
    from langchain_community.tools import DuckDuckGoSearchRun
    from langchain_core.messages import BaseMessage, HumanMessage
    from langgraph.prebuilt import create_react_agent
    from langgraph.graph import MessagesState, StateGraph, START, END
    from langgraph.types import Command
    from traceloop.sdk import Traceloop
    from traceloop.sdk.decorators import workflow
    
    # Initialize OpenLLMetry
    Traceloop.init(app_name="langgraph_demo")
    
    # Define search tool
    search_tool = DuckDuckGoSearchRun()
    
    # Define LLM
    llm = ChatAnthropic(
        model="claude-3-5-sonnet-20241022",
        temperature=0.7,
        max_tokens=600
    )
    
    def get_next_node(last_message: BaseMessage, goto: str):
        if not last_message.content:
            return END
        return goto
    
    # Research agent and node
    research_agent = create_react_agent(
        llm,
        tools=[search_tool],
        state_modifier="You are a research assistant. Your job is to conduct thorough research."
    )
    
    def research_node(state: MessagesState) -> Command[Literal["writer", END]]:
        result = research_agent.invoke(state)
        goto = get_next_node(result["messages"][-1], "writer")
        result["messages"][-1] = HumanMessage(
            content=result["messages"][-1].content,
            name="researcher"
        )
        return Command(
            update={"messages": result["messages"]},
            goto=goto
        )
    
    # Writer agent and node
    writer_agent = create_react_agent(
        llm,
        tools=[search_tool],
        state_modifier="You are a blog writer. Your task is to create a well-structured blog post."
    )
    
    def writer_node(state: MessagesState) -> Command[Literal[END]]:
        result = writer_agent.invoke(state)
        result["messages"][-1] = HumanMessage(
            content=result["messages"][-1].content,
            name="writer"
        )
        return Command(
            update={"messages": result["messages"]},
            goto=END
        )
    
    # Define workflow graph
    workflow = StateGraph(MessagesState)
    workflow.add_node("researcher", research_node)
    workflow.add_node("writer", writer_node)
    workflow.add_edge(START, "researcher")
    graph = workflow.compile()
    
    # Execute workflow
    @workflow(name="langgraph_multi_agent_workflow")
    def run_workflow():
        events = graph.stream(
            {
                "messages": [
                    (
                        "user",
                        "First, research AI trends in 2025. "
                        "Then, based on that research, create a well-structured blog post."
                    )
                ]
            },
            {"recursion_limit": 150}
        )
    
        # Print workflow execution steps
        for event in events:
            print(event)
            print("----")
    
    if __name__ == "__main__":
        run_workflow()
  4. Execute seu aplicativo LangGraph.

    python langgraph_app.py

    O aplicativo executa o fluxo de trabalho multiagente e exibe as etapas de execução:

    Figura 1. LangGraph saída
    LangGraph saída
  5. Visualize os dados no site Instana.

    Após executar sua aplicação, os dados aparecerão no painel de observabilidade da Gen AI do Instana :

    Figura 2. LangGraph vestígios em Instana
    LangGraph vestígios em Instana

    O painel mostra:

    • Execução de fluxos de trabalho com múltiplos agentes

    • Transições de estado entre agentes

    • Chamadas de ferramentas (operações de pesquisa)

    • Interações do LLM com latência e uso de tokens

    • Decisões de roteamento condicionais

Resolução de problemas

Para problemas comuns, como traços que não aparecem ou erros de conexão, consulte a seção "Solução de problemas".

Erros de importação com `create_react_agent`

Problema : As métricas ou os rastreamentos ficam incompletos ao usar create_react_agent.

Possível causa : os dados foram importados do pacote errado.

Para resolver esse problema, tente importar create_react_agent de langgraph.prebuilt:

# Correct import
from langgraph.prebuilt import create_react_agent

# Don't use this
from langchain.agents import create_react_agent

Erros na execução do fluxo de trabalho

Problema : O fluxo de trabalho falha devido a erros de limite de recursão.

Para resolver esse problema, tente ajustar o recursion_limit parâmetro na stream() chamada de acordo com a complexidade do seu fluxo de trabalho. Para fluxos de trabalho complexos com múltiplos agentes, talvez seja necessário aumentar esse valor além do padrão.