Inteligência Artificial em Produção: LLMs, RAG, MCP e o Novo Stack de Sistemas Inteligentes
Os Large Language Models mudaram o que é possível construir. Mas colocar IA em produção com segurança, rastreabilidade e controle de qualidade exige uma engenharia profunda que vai muito além de chamar uma API.
A transição de IA como curiosidade acadêmica para IA como infraestrutura de produção aconteceu em menos de três anos. O que começou com ChatGPT como interface conversacional evoluiu para um ecossistema de componentes — LLMs, embeddings, vector stores, RAG pipelines, MCP servers — que exige engenharia rigorosa.
Large Language Models: O que Realmente São
LLMs são modelos de linguagem treinados em corpora massivos de texto através de predição de tokens. A arquitetura Transformer permite ao modelo capturar dependências de longo alcance que modelos recorrentes anteriores processavam com dificuldade.
Temperatura controla a entropia da amostragem: temperatura próxima de 0 seleciona sempre o token mais provável. Para sistemas de produção, temperatura entre 0.1 e 0.3 é típica.
RAG: Retrieval Augmented Generation
A arquitetura RAG tem duas fases. Indexação (offline): documentos são particionados em chunks, convertidos em embeddings e armazenados em um vector store. Query (online): a query do usuário é convertida em embedding, os chunks mais similares são recuperados e incluídos no contexto do LLM.
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_google_vertexai import VertexAIEmbeddings
from langchain_community.vectorstores import PGVector
text_splitter = RecursiveCharacterTextSplitter( chunk_size=1024, chunk_overlap=200, separators=["\n\n", "\n", ". ", " ", ""] )
embeddings = VertexAIEmbeddings(model_name="text-embedding-004") vector_store = PGVector( connection_string=DATABASE_URL, embedding_function=embeddings, collection_name="knowledge_base", use_jsonb=True )
Vector Search com HNSW
CREATE INDEX ON knowledge_base USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 200);
SET hnsw.ef_search = 100;
Model Context Protocol
MCP define um protocolo JSON-RPC que padroniza a integração de LLMs com fontes de dados externas:
from mcp.server import Server
from mcp.types import Tool, TextContent
app = Server("financial-data-server")
@app.list_tools() async def list_tools() -> list[Tool]: return [ Tool( name="query_transactions", description="Query financial transactions with filters", inputSchema={ "type": "object", "properties": { "customer_id": {"type": "string"}, "start_date": {"type": "string", "format": "date"}, "min_amount": {"type": "number"} }, "required": ["customer_id"] } ) ]
Guardrails e Segurança
Input validation: sanitizar e validar prompts antes de enviá-los ao LLM. Prompt injection é o vetor de ataque mais comum. Output validation: parsear e validar a saída estruturada antes de usar. Rate limiting: implementar token budgets por usuário e monitoramento de custo por request são práticas de produção não opcionais.
LLMs são componentes poderosos mas não confiáveis que precisam ser envolvidos por camadas de validação, monitoramento e fallback.