Neste tutorial, construímos um agente tutor pessoal totalmente com estado que vai além das interações de chat de curta duração e aprende continuamente ao longo do tempo. Projetamos o sistema para persistir as preferências do usuário, rastrear áreas de aprendizado fracas e recuperar seletivamente apenas o contexto passado relevante ao responder. Combinando armazenamento durável, recuperação semântica e prompting adaptativo, demonstramos como um agente pode se comportar mais como um tutor de longo prazo do que um chatbot sem estado. Além disso, nos concentramos em manter o agente auto-gerenciado, sensível ao contexto e capaz de melhorar sua orientação sem exigir que o usuário repita informações. Copiar Código Copiado Use um navegador diferente!pip -q install "langchain>=0.2.12" "langchain-openai>=0.1.20" "sentence-transformers>=3.0.1" "faiss-cpu>=1.8.0.post1" "pydantic>=2.7.0" import os, json, sqlite3, uuid from datetime import datetime, timezone from typing import List, Dict, Any import numpy as np import faiss from pydantic import BaseModel, Field from sentence_transformers import SentenceTransformer from langchain_core.messages import SystemMessage, HumanMessage, AIMessage from langchain_core.language_models.chat_models import BaseChatModel from langchain_core.outputs import ChatGeneration, ChatResult DB_PATH="/content/tutor_memory.db" STORE_DIR="/content/tutor_store" INDEX_PATH=f"{STORE_DIR}/mem.faiss" META_PATH=f"{STORE_DIR}/mem_meta.json" os.makedirs(STORE_DIR, exist_ok=True) def now(): return datetime.now(timezone.utc).isoformat() def db(): return sqlite3.connect(DB_PATH) def init_db(): c=db(); cur=c.cursor() cur.execute("""CREATE TABLE IF NOT EXISTS events( id TEXT PRIMARY KEY,user_id TEXT,session_id TEXT,role TEXT,content TEXT,ts TEXT)""") cur.execute("""CREATE TABLE IF NOT EXISTS memories( id TEXT PRIMARY KEY,user_id TEXT,kind TEXT,content TEXT,tags TEXT,importance REAL,ts TEXT)""") cur.execute("""CREATE TABLE IF NOT EXISTS weak_topics( user_id TEXT,topic TEXT,mastery REAL,last_seen TEXT,notes TEXT,PRIMARY KEY(user_id,topic))""") c.commit(); c.close() Configuramos o ambiente de execução e importamos todas as bibliotecas necessárias para construir um agente com estado. Também definimos caminhos centrais e funções utilitárias para manipulação de tempo e conexões de banco de dados. Isso estabelece a infraestrutura fundamental na qual o restante do sistema se baseia. Copiar Código Copiado Use um navegador diferente!class MemoryItem(BaseModel): kind:str content:str tags:List[str]=Field(default_factory=list) importance:float=Field(0.5,ge=0,le=1) class WeakTopicSigna
Fonte: MarkTechPost
Publicado em 2026-02-16