Agente de matchmaking serverless com memória real, construído com LangGraph, AWS Lambda, DynamoDB e Amazon OpenSearch Serverless.
Apresentado na live: "Agentes serverless com memória real: LangGraph, Step Functions e DynamoDB na AWS"
Usuário → API (Lambda Function URL)
↓
LangGraph StateGraph
↓
┌───────────────────────┐
│ chat │ ← conversa com a Lua (Gemini)
│ summarization │ ← extrai perfil estruturado
│ register_user │ ← gera UUID, salva DynamoDB + OpenSearch
│ rag_search │ ← kNN vetorial no OpenSearch (Gemini Embeddings)
│ present_matches │ ← gera explicações personalizadas (Gemini)
└───────────────────────┘
↓
DynamoDB (3 tabelas) OpenSearch Serverless
├── checkpoints └── user-profiles (kNN, 3072 dims)
├── memory store
└── chat history
| Camada | Tecnologia |
|---|---|
| Runtime | Node.js 20 + TypeScript |
| Orquestração | LangGraph JS (StateGraph) |
| LLM | Gemini 3.5 Flash (@langchain/google-genai) |
| Embeddings | gemini-embedding-001 (3072 dims) |
| Memória | DynamoDB — checkpointer, memory store, chat history |
| Busca vetorial | Amazon OpenSearch Serverless (kNN) |
| Deploy | Serverless Framework v4 + Lambda Function URL |
- Node.js 20+
- AWS CLI configurado (
aws configure) - Serverless Framework v4 (
npm i -g serverless) - Docker (para DynamoDB local)
- Conta Google AI Studio com API key
- Collection no Amazon OpenSearch Serverless
Crie um arquivo .env na raiz (ou exporte no shell antes do deploy):
export GOOGLE_API_KEY=sua_chave_aqui
export OPENSEARCH_ENDPOINT=https://<id>.aoss.us-east-1.on.awsO env.yml usa ${env:VARIAVEL} para ler do shell no momento do deploy.
# Sobe DynamoDB local e cria as tabelas
npm run start:dev
# Em outro terminal — popula perfis de teste no OpenSearch
node scripts/seed-profiles.mjsA UI fica em ui/index.html — abra direto no browser ou sirva com:
npx serve ui -p 3000serverless deployApós o deploy a saída mostra a URL:
endpoint: https://<id>.lambda-url.us-east-1.on.aws/
Atualize const API em ui/index.html com a nova URL.
START → chat
├── usuário retornando (userId + perfil) → rag_search → present_matches → END
├── novo usuário com perfil completo → summarization → register_user → rag_search → present_matches → END
└── ainda coletando dados → END
| Tabela | Finalidade |
|---|---|
live-rag-match-echo-checkpoints |
LangGraph checkpointer (estado da conversa por thread_id) |
live-rag-match-echo-writes |
LangGraph writes (pendências do checkpointer) |
live-rag-match-echo-memory |
Memory store — perfil do usuário por user_id |
live-rag-match-echo-chat-history |
Histórico de mensagens por userId + sessionId |
- Collection tipo Vector Search no Amazon OpenSearch Serverless
- Index
user-profilescom mapeamento kNN (3072 dims,gemini-embedding-001) - Scale-to-zero automático — custo zero quando ocioso
- Política de acesso:
aoss:APIAccessAllpara o role do Lambda
O objetivo é demonstrar que não precisamos de infraestrutura complexa para construir um agente de IA com RAG e memória real. Lambda + DynamoDB + OpenSearch Serverless escalam a zero — custo praticamente zero quando em repouso.