Pular para o conteúdo
niadra
Integração · LangGraph

Memória para agentes LangGraph.

NiadraMiddleware embrulha cada chamada ao modelo do agente criado por langchain.agents.create_agent: o contexto entra na mensagem de sistema, os turnos são registrados e as ferramentas do histórico vêm junto. Nada é escrito no estado do grafo: o checkpointer nunca guarda um contexto.

O checkpointer do LangGraph persiste o estado de um thread: as mensagens deste grafo, para este thread. Uma store de memória de longo prazo guarda o que este agente decidiu lembrar, num namespace da sua aplicação. Nenhum dos dois sabe o que a cliente disse ao agente de voz de outro fornecedor nem o que o agente de cobrança fez no ERP.

A Niadra fica fora do grafo. O middleware acrescenta o contexto da cliente à mensagem de sistema, com as suas instruções primeiro, e o turn_block depois das mensagens, a cada chamada ao modelo. O estado continua só seu, e o checkpointer continua pequeno.

O exemplo mínimo, como está na documentação
pip install 'niadra[langgraph]'   # langgraph 1.2, langchain 1.4 and langchain-core 1.6 or newer, below 2
"""A LangGraph agent (langchain.agents.create_agent) with the customer's memory as middleware."""

import asyncio

from langchain.agents import create_agent

from niadra import AsyncNiadra, phone
from niadra.integrations.langgraph import NiadraMiddleware

niadra = AsyncNiadra(channel="chat")


async def main() -> None:
    async with niadra.conversation("thread-81", subject=phone("+5511912345678")) as conversation:
        agent = create_agent(
            "openai:gpt-4.1",
            system_prompt="You are Acme's agent.",
            middleware=[NiadraMiddleware(conversation)],
        )
        result = await agent.ainvoke(
            {"messages": [{"role": "user", "content": "Where is my replacement lid?"}]}
        )
        print(result["messages"][-1].content)
    await niadra.close()


asyncio.run(main())
  • Python

O mesmo código está em examples/langgraph_agent.py nos repositórios dos SDKs, onde roda na CI contra os tipos reais do framework e o emulador da Niadra. Para testar sem a nuvem da Niadra, niadra-mock e NIADRA_BASE_URL=http://127.0.0.1:8765.

Como o adaptador se liga

As cinco primitivas de toda integração da Niadra, nos pontos de extensão deste framework.

Contexto
O contexto é acrescentado à mensagem de sistema, o que deixa as suas instruções primeiro, e o turn_block vai depois das mensagens. Nada é escrito no estado do grafo. Para o create_react_agent mais antigo, pre_model_hook=pre_model_hook(conversation) entrega ao modelo as mesmas mensagens por llm_input_messages, também sem tocar no estado.
Turnos
As mensagens do cliente são registradas antes da chamada, chaveadas pela posição na conversa, então o histórico que o checkpointer repete nunca é registrado duas vezes; a resposta do modelo, com o usage_metadata, depois dela.
Ferramentas
O middleware traz as ferramentas do histórico, e as da memória do agente, como tools próprias, então create_agent as oferece sem você listar.
Verificação
conversation.verify() antes de invocar o agente.
Transbordo
transferred_to_agent() e transferred_to_human() registram a transferência; chame onde o grafo passa a conversa adiante.

O que o agente recebe

O contexto é compilado quando a memória muda e servido pronto, sem modelo de IA na leitura. O que outro canal disse durante a conversa chega como delta, no fim do prompt.

  • Quem é o cliente, pelo que a conversa já provou: o nível de verificação decide o que entra
  • Fatos, pendências e promessas, com a data e o canal de origem
  • O que outros agentes fizeram por dentro, confirmado pelo sistema de registro
  • Padrões calculados por regra, com as evidências e o prazo
  • As três ferramentas do histórico: buscar, linha do tempo e abrir um item, amarradas ao cliente no seu código
  • Comprovante de cada leitura, encadeado por SHA-256

O que o adaptador não faz

  • Sem BaseStore próprio: a Niadra não é o armazenamento de estado do grafo.
  • Sem nó próprio para o LangGraph.js: withNiadraContext() de @niadra/sdk/langchain já dá ao nó do modelo o contexto sem escrevê-lo no estado que o checkpointer guarda.
  • Nada aqui derruba o agente: com a Niadra lenta ou fora, a chamada ao modelo segue sem o contexto.
  • Testado contra langgraph 1.2 e langchain 1.4 com um chat model falso e a Niadra no emulador.

Perguntas frequentes

Posso continuar usando o checkpointer e a store que já tenho?

Pode, e deve. O middleware não toca no estado do grafo nem na store: o contexto entra na chamada ao modelo e sai dela. O que a Niadra guarda é a memória da empresa sobre o cliente, derivada dos eventos de todos os canais.

E no LangGraph.js?

withNiadraContext() de @niadra/sdk/langchain dá ao nó do modelo o contexto logo antes da chamada, sem escrever no estado; o NiadraCallbackHandler registra as respostas. O exemplo completo está na página do LangChain.

Cada execução do agente pode virar um registro de turno?

Pode, com a funcionalidade de registros de turno ligada no espaço: before_agent abre o turno, wrap_tool_call grava cada chamada de ferramenta e after_agent o fecha com as chamadas de modelo e os tokens. Num replay no seu CI, as ferramentas do grafo respondem do registro.

Preciso trocar de modelo, de prompt ou de fornecedor?

Não. O adaptador coloca o contexto depois das suas instruções e o delta no fim do prompt, nos pontos de extensão que o framework já tem. O seu modelo, o seu prompt e o seu fornecedor continuam os mesmos, e trocar qualquer um deles depois não apaga a memória.

Onde ficam os dados e quanto custa?

Os dados ficam numa região só, informada no contrato, cifrados com AES-256-GCM e chave exclusiva por empresa, protegida em HSM FIPS 140-3. O preço é por conversa ou tarefa em que um agente leu a memória: de US$ 2 a 3 a cada mil, conforme o volume, com leituras, buscas e eventos de sistema incluídos. A Niadra está abrindo para empresas por pedido, antes do lançamento.

Conte o que você está construindo.

E-mail corporativo e duas linhas sobre os seus agentes bastam. Quem responde é quem escreve o código, com uma proposta de acesso antecipado para o seu caso.

Prefere contar mais sobre a sua empresa? Use o formulário completo

Só aceitamos e-mail corporativo. Usamos estes dados apenas para responder ao seu pedido; para apagá-los, peça por este formulário.

O próximo agente já pode chegar sabendo.

A Niadra está abrindo para empresas por pedido, antes do lançamento. Conte o que você está construindo: quem responde é quem escreve o código.