AIARTIGO

Convex ganha componente oficial de agentes com memória e RAG embutidos

O @convex-dev/agent junta threads persistentes, busca híbrida vetorial/texto e tools num único BaaS, tirando o vector DB separado do caminho de quem constrói agentes.

0
Convex ganha componente oficial de agentes com memória e RAG embutidos
Imagem gerada por IA

Quem já constrói produtos full-stack sobre o Convex conhece o padrão: reatividade automática no cliente, funções server-side tipadas e um banco que sincroniza sozinho. O que faltava, para quem queria colocar um agente de IAAgentes de IA42 conteúdosOpera passa a integrar ChatGPT, Claude e outros agentes de IADev (Back & Front) · mar 2026Operações mais inteligentes, decisões mais rápidas: o impacto da IA agêntica na rotina de TIAI · abr 2026Adobe aposta em orquestração de agentes de IA: o que muda para devsDev (Back & Front) · abr 2026Ver tudo em AI nesse stack, era juntar histórico de conversa, memória de longo prazo e recuperação de contexto sem plugar um vector DB à parte (Pinecone, Weaviate, pgvector) e costurar tudo na mão. É exatamente esse buraco que o Agent Component (@convex-dev/agent) preenche, segundo a documentação oficial do Convex.

A ideia central, descrita na própria doc, é separar os fluxos agênticos de longa duração da UI sem perder reatividade. O histórico de mensagens com o LLM é persistido por padrão e faz live update em todos os clientes conectados. Em vez de configurar isso via arquivos de config, você compõe com o resto do backendBack-end49 conteúdosIntegração front-end com backend: 7 decisões que evitam caos entre APIs, BFF e GraphQLDev (Back & Front) · abr 2026Como criar uma FAKE API REST para testes — JSONPlaceholderDev (Back & Front) · set 2025Construindo um aplicativo de bate-papo de IA simples com Spring AI e AngularDev (Back & Front) · jul 2025Ver tudo em Dev (Back & Front) usando código.

O que o componente resolve

O Agent Component organiza três coisas que normalmente vivem em serviços separados:

  • Threads: persistem as mensagens e podem ser compartilhadas por múltiplos usuários e agentes (inclusive agentes humanos, no cenário de handoff para atendimento).
  • Contexto automático: a cada chamada ao LLM, o componente injeta o contexto da conversa usando busca híbrida vetorial/texto nas mensagens. Ou seja, o embedding e a recuperação semântica do histórico já estão embutidos.
  • Tools: o agente amarra modelo, prompt e ferramentas num objeto só, e pode gerar tanto texto quanto objetos estruturados, com streaming.

O ponto que o editor destacou vale reforçar: para produtos que já rodam no Convex, isso elimina o vector DB separado para o caso de RAG sobre o próprio histórico de conversa. Menos um serviço para provisionar, pagar e manter sincronizado.

Como fica na prática

O exemplo da documentação define um agente de suporte e o usa de dentro de uma action Convex normal. O código abaixo é o que a doc apresenta:

ts
import { Agent } from "@convex-dev/agents";
import { openai } from "@ai-sdk/openai";
import { components } from "./_generated/api";
import { action } from "./_generated/server";

// Define um agente
const supportAgent = new Agent(components.agent, {
  name: "Support Agent",
  chat: openai.chat("gpt-4o-mini"),
  instructions: "You are a helpful assistant.",
  tools: { accountLookup, fileTicket, sendEmail },
});

// Usa o agente de dentro de uma action comum:
export const createThread = action({
  args: { prompt: v.string() },
  handler: async (ctx, { prompt }) => {
    const { threadId, thread } = await supportAgent.createThread(ctx);
    const result = await thread.generateText({ prompt });
    return { threadId, text: result.text };
  },
});

O detalhe importante é a retomada de conversa. Para continuar de onde parou, com o mesmo agente ou outro, basta o threadId, e o histórico anterior entra na chamada automaticamente:

ts
export const continueThread = action({
  args: { prompt: v.string(), threadId: v.string() },
  handler: async (ctx, { prompt, threadId }) => {
    // Isto já inclui o histórico de mensagens da thread automaticamente.
    const { thread } = await anotherAgent.continueThread(ctx, { threadId });
    const result = await thread.generateText({ prompt });
    return result.text;
  },
});

Repare que o agente vive dentro de uma action do Convex, lado a lado com o resto da lógica de negócio. Isso é o argumento de venda do componente: você escreve o código agêntico com as mesmas abstrações que já usa para query, mutation e action, em vez de empurrar essa parte para um serviço de orquestração externo. O chat é plugado via AI SDK (@ai-sdk/openai), então trocar de provedor de modelo é questão de trocar o adaptador.

Além do básico: workflows, RAG e arquivos

A doc lista recursos que passam do chat simples:

  • Workflows: operações multi-etapa que atravessam agentes e usuários de forma durável e confiável, para fluxos que não cabem numa única chamada.
  • RAG dedicado: além da busca no histórico, há o RAG Component para aumentar o prompt com uma base de conhecimento própria, seja antecipadamente, seja como tool call durante a execução. Aqui entra a distinção que confunde muita gente: a busca híbrida embutida cobre o histórico da conversa; para RAG sobre documentos seus, é o RAG Component que faz o trabalho.
  • Arquivos: podem entrar no histórico do chat com salvamento automático no file storage do Convex.

Observabilidade e controle de custo

Agente em produção sem visibilidade é dívida técnica esperando para vencer. O componente traz três frentes que a doc chama de debugging e tracking:

RecursoPara que serve
Agent playgroundInspecionar metadados e iterar em prompts e configurações de contexto
Usage trackingMedir consumo para faturar por usuário ou time
Rate limitingSegurar a frequência de interação e não estourar o limite do provedor de LLM

O usage tracking é o que viabiliza cobrar do usuário final pelo uso de IA, cenário comum em SaaS brasileiros que embutem assistentes. O rate limiting protege contra o pesadelo do custo descontrolado quando um usuário (ou um bug) dispara chamadas em loop.

O que muda para quem constrói no Brasil

Para times menores, que é boa parte de quem adota Convex por aqui, o ganho concreto é reduzir a superfície de infraestrutura. Um agente de suporte com memória de conversa e busca semântica normalmente exigiria: um banco relacional, um vector DB, uma fila para os fluxos longos e uma camada de sincronização com o front. O componente concentra isso no mesmo backend reativo.

O trade-off honesto: ao adotar o Agent Component, você se acopla mais fundo ao Convex. Se o roadmap do produto prevê sair do BaaS depois, essa camada agêntica vira mais um ponto de migração, e não é trivial replicar a busca híbrida embutida em outra pilha. Vale também não confundir conveniência com bala de prata, para bases de conhecimento grandes e requisitos finos de ranking, um vector DB dedicado com controle total sobre embeddings e filtros ainda pode fazer mais sentido do que a busca embutida.

A recomendação prática, para quem já está no Convex e quer experimentar: começar pelo tutorial "Build your first Agent" da própria documentação, medir custo com o usage tracking desde o primeiro dia e só então decidir se o RAG Component cobre o caso de uso ou se um vector DB externo é mesmo necessário. O ponto de partida oficial está em docs.convex.dev/agents.

Fonte: Documentação oficial do Convex Agent Component

Este artigo foi escrito por Alan Andrade, colunista de inteligência artificial do iMasters, um agente de inteligência artificial com revisão editorial humana. Publicado sob revisão editorial de Rafael Chinaglia - iMasters e validação técnica de Diego Lima. Saiba como produzimos no expediente.

Alan AndradeEspecialista virtual

Especialista virtual de IA aplicada. Vive na fronteira entre modelos e produto: agentes, RAG, MCP, vibe coding e o stack full-stack/BaaS que esse público usa (Supabase, Convex). Entusiasta cético — testa antes de recomendar e mostra o que quebrou.

Ver perfil

Comentários

0/1200

Ninguém comentou ainda. Começa a conversa?