1
resposta

para essa atividade necessario dividir 4 partes, com isso, integrando e interagindo, aplicação com LLM; com a função de transformar um chatbot em um serviço backend confiável e validação automática, armazenamento de conversas e proteção contra exposição de dados.

as 4 partes são:
API tipada com FastAPI + Pydantic
integração com provedores de LLM (GrokCloud e OpenRouter)
sanitização de resposta
persistência de histórico com SQLAlchemy + SQLite

1 . Esquemas com Pydantic
definem o corpo da API
validar os dados de entrada e saída
gerar documentos automaticamente no FastAPI
ajude a produzir mensagens de erro claras
Exemplo
from pydantic import BaseModel, Field
from typing import Optional, List

class ChatRequest(BaseModel):
question: str = Field(..., min_length=3, description="Pergunta enviada ao chatbot")
history: Optional[List[dict]] = []
model: Optional[str] = None

class ChatResponse(BaseModel):
response: str
model: Optional[str] = None

2. Endpoints tipados com FastAPI

mas tipados
validam automaticamente o corpo da requisição
retornam erros estruturados, como422 Unprocessable Entity
Exemplo
from fastapi import FastAPI

app = FastAPI()

@app.post("/chat", response_model=ChatResponse)
def chat_endpoint(payload: ChatRequest):
return ChatResponse(response=f"Você perguntou: {payload.question}", model=payload.model)

3. Testar mensagens de erro

Esse ponto é muito importante.

Se o usuário enviar:
{
"model": "llama3"
}
4. Integração com LLMs via API Key
A aplicação precisa chamar provedores externos, como:
GrokCloud
Roteador aberto
As credenciais devem ficar em variáveis de ambiente , não no código.
Exemplo
import os

GROQ_API_KEY = os.getenv("GROQ_API_KEY")
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
Fluxo típico
recebe pergunta
escolha o modelo
montar prompt/contexto
envia aoxo
recebe resposta
higienização
salva no banco
retorna ao usuário

  1. Higienização de respostas

Sanitizar significa limpar ou mascarar dados sensíveis antes de exibir ou salvar.

Exemplos de dados sensíveis
e-mails
cadeiras
CPF
CNPJ
URLs privadas
números de processo
Exemplo com regex
import re

EMAIL = re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}')

def sanitize_response(text: str) -> str:
return EMAIL.sub('[REDACTED_EMAIL]', text.strip())
6. Persistência com SQLAlchemy e SQLite

O chatbot precisa salvar o histórico de conversas.

Por que persistir?
manter contexto entre interações
permitir auditório
analisar comportamento do chatbot
· erros
Exemplo de modelo
from sqlalchemy import Column, Integer, String, DateTime, func
from sqlalchemy.orm import declarative_base

Base = declarative_base()

class ConversationHistory(Base):
tablename = "conversation_history"

id = Column(Integer, primary_key=True, index=True)
session_id = Column(String, index=True, nullable=False)
role = Column(String, nullable=False)
content = Column(String, nullable=False)
timestamp = Column(DateTime(timezone=True), server_default=func.now())
SQLite

É uma boa escolha para:

protótipo
desenvolvimento local
projeto pequeno
7. Sessão de conversa

O histórico deve ser associado a um identificador, por exemplo session_id.

Conceito de exemplo

Sessão abc123:

usuário: “Quanto custa a consultar?”
bot: “R$ 850,00”
usuário: “Vocês atendem online?”

Sem session_id, a conversa fica fragmentada.
Com session_id, a aplicação recupera o contexto certo.

  1. Fluxo completo do endpoint

A arquitetura mental correta é esta:

receber requisição
validar com Pydantic
recuperar histórico no banco
chamar o LLM
higienizar uma resposta
salvar pergunta e resposta
devolver JSON final

1 resposta

Oii Moacir, como você está?

Mandou muito bem nessa entrega. Dá pra ver que você não só entendeu a proposta, mas já está pensando como transformar isso em algo sólido pro mundo real.

A forma como você organizou tudo ficou bem clara, principalmente na validação com Pydantic, no cuidado com segurança usando variáveis de ambiente e na parte de persistência com session_id. Esses pontos já colocam seu projeto em um nível bem mais profissional.

Essa estrutura que você montou é uma base muito boa pra evoluir depois, inclusive com automações e testes mais avançados.

Obrigado por compartilhar aqui no fórum, isso ajuda bastante quem está seguindo o mesmo caminho.

Bons estudos!

Sucesso

Imagem da comunidade