▼
➕ Adicionar conhecimento ao agente (demo RAG dinâmico)
⚡ Pipeline
🗺 Grafo
💻 Código
📖 Conceitos
💬
Envie uma pergunta e clique na resposta do bot para ver cada etapa aqui.
🗺
Carregando grafo...
🔗 chains/qa_chain.py — chain principal
# O operador | conecta os componentes em sequência def construir_chain(persona): return ( montar_prompt(persona) # PromptTemplate | Soberano() # BaseChatModel | StrOutputParser() # parser )
🗺 graph/agent_graph.py — grafo LangGraph
class Estado(TypedDict): pergunta: str # entrada do aluno contexto: str # resultado do RAG resposta: str # saída final tentativas: int # contador de retries grafo.add_node("recuperar", recuperar) grafo.add_node("buscar_mais", buscar_mais) grafo.add_node("responder", responder_no) grafo.add_conditional_edges("recuperar", decidir) grafo.add_edge("buscar_mais", "responder") grafo.add_edge("responder", END)
🛡 guardrails/rules.py — dois níveis
# Nível 1: instrução no prompt (guardrail interno) REGRA = "Só responda com base no Contexto..." # Nível 2: validação no código (guardrail externo) def validar(resposta, contexto): if not contexto: return FRASE_FALLBACK return resposta
📥 rag/retriever.py — ingestão dinâmica
def adicionar(self, texto, titulo): doc = Document( page_content=texto, metadata={"titulo": titulo, "fonte": "ingestão_manual"} ) self._vectorstore.add_documents([doc]) # O agente já responde sobre o novo conteúdo
🔍 RAG — Retrieval-Augmented Generation
Geração aumentada por recuperação
Em vez de o modelo "lembrar" os dados, ele consulta uma base a cada resposta. O texto recuperado entra no prompt como contexto — eliminando invenções sobre o domínio.
Pergunta → Embedding → Busca vetorial → Documentos relevantes
📝 PromptTemplate
chains/prompt.py
Template com variáveis (
{contexto}, {pergunta}, {persona}) preenchidas em tempo de execução. No LangChain, prompts são objetos combináveis com |.🧠 BaseChatModel — interface padrão de LLM
llm/soberano.py
O Soberano 1.1 implementa
BaseChatModel. Isso o torna compatível com qualquer chain ou ferramenta do ecossistema LangChain — mesmo sendo uma API personalizada na Mandu.🛡 Guardrails — dois níveis
guardrails/rules.py
Nível 1 (prompt): instrui o modelo a recusar quando não tiver informação.
Nível 2 (código): bloqueia a resposta se o contexto estiver vazio, independente do que o modelo disse.
Nível 2 (código): bloqueia a resposta se o contexto estiver vazio, independente do que o modelo disse.
🗺 StateGraph — LangGraph
graph/agent_graph.py
Fluxos com decisões condicionais e loops. O estado (
TypedDict) trafega entre os nós. Arestas condicionais decidem dinamicamente qual nó vem a seguir.📥 Ingestão Dinâmica
rag/retriever.py + /ingest
O método
add_documents() do FAISS adiciona vetores ao índice em memória sem reiniciar o servidor. É assim que sistemas RAG em produção incorporam novos documentos em tempo real.