Como Projetar um Agente de Raciocínio Multi-Ramificado ToT Avançado com Beam Search, Pontuação Heur…

Neste tutorial, construímos um agente de raciocínio multi-ramificado Tree-of-Thoughts (ToT) avançado do zero. Em vez de depender do raciocínio linear em cadeia de pensamento, projetamos um sistema que gera múltiplas ramificações de raciocínio, pontua cada ramificação usando uma função de avaliação heurística, remove candidatos fracos e continua expandindo apenas os caminhos mais fortes. Combinamos um modelo transformer ajustado por instrução com uma estrutura de árvore personalizada e implementamos uma seleção no estilo beam-search com busca de profundidade limitada. Ao fundamentar o sistema no domínio do jogo '24', criamos um benchmark claro e objetivo para o raciocínio, onde podemos observar a expansão de ramificações, poda, pontuação e detecção de objetivos em ação. Copiar Código Copiado Use um navegador diferente!pip -q install -U transformers accelerate sentencepiece import re import math from dataclasses import dataclass, field from typing import List, Optional, Tuple, Dict, Any import torch from transformers import AutoTokenizer, AutoModelForSeq2SeqLM MODEL_NAME = "google/flan-t5-base" tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME) device = "cuda" if torch.cuda.is_available() else "cpu" model = model.to(device) print("Device:", device) print("Model loaded:", MODEL_NAME) @dataclass class Node: depth: int numbers: List[float] exprs: List[str] thought: str = "" score: float = -1e9 is_goal: bool = False parent: Optional["Node"] = None meta: Dict[str, Any] = field(default_factory=dict) def pretty_state(nums: List[float], exprs: List[str]) -> str: pairs = [f"{e}={n:g}" for e, n in zip(exprs, nums)] return " | ".join(pairs) Instalamos as bibliotecas necessárias e carregamos o modelo FLAN-T5 usando a arquitetura Seq2Seq correta. Definimos nossa estrutura de dados Node central que representa cada estado de raciocínio na busca Tree-of-Thoughts. Também inicializamos a configuração do dispositivo e utilitários auxiliares que nos permitem imprimir e inspecionar claramente o estado do raciocínio. Copiar Código Copiado Use um navegador diferente! OPS = ["+", "-", "*", "/"] def safe_apply(a: float, b: float, op: str) -> Optional[float]: if op == "+": return a + b if op == "-": return a - b if op == "*": return a * b if op == "/": if abs(b) str: return f"({ea} {op} {eb})" def is_24(x: float, tol: float = 1e-6) -> bool: return abs(x - 24.0) float: if len(

Fonte: MarkTechPost

Publicado em 2026-03-05

Notícias relacionadas

Continue explorando