Neste tutorial, construímos um Agente Otimizador de Rotas estilo produção para um centro de despacho de logística usando as mais recentes APIs de agente LangChain. Projetamos um fluxo de trabalho orientado por ferramentas no qual o agente calcula de forma confiável distâncias, ETAs e rotas ótimas, em vez de adivinhar, e aplicamos saídas estruturadas para tornar os resultados diretamente utilizáveis em sistemas downstream. Integramos cálculos geográficos, perfis de velocidade configuráveis, buffers de tráfego e otimização de rotas com múltiplas paradas, garantindo que o agente se comporte de forma determinística enquanto ainda raciocina de forma flexível através de ferramentas. Copiar Código Copiado Use um navegador diferente !pip -q install -U langchain langchain-openai pydantic import os from getpass import getpass if not os.environ.get("OPENAI_API_KEY"): os.environ["OPENAI_API_KEY"] = getpass("Digite OPENAI_API_KEY (entrada oculta): ") from typing import Dict, List, Optional, Tuple, Any from math import radians, sin, cos, sqrt, atan2 from pydantic import BaseModel, Field, ValidationError from langchain_openai import ChatOpenAI from langchain.tools import tool from langchain.agents import create_agent Configuramos o ambiente de execução e garantimos que todas as bibliotecas necessárias estejam instaladas e importadas corretamente. Carregamos a chave da API OpenAI de forma segura para que o agente possa interagir com o modelo de linguagem sem codificar as credenciais. Também preparamos as dependências principais que alimentam ferramentas, agentes e saídas estruturadas. Copiar Código Copiado Use um navegador diferente SITES: Dict[str, Dict[str, Any]] = { "Rig_A": {"lat": 23.5880, "lon": 58.3829, "type": "rig"}, "Rig_B": {"lat": 23.6100, "lon": 58.5400, "type": "rig"}, "Rig_C": {"lat": 23.4500, "lon": 58.3000, "type": "rig"}, "Yard_Main": {"lat": 23.5700, "lon": 58.4100, "type": "yard"}, "Depot_1": {"lat": 23.5200, "lon": 58.4700, "type": "depot"}, "Depot_2": {"lat": 23.6400, "lon": 58.4300, "type": "depot"}, } SPEED_PROFILES: Dict[str, float] = { "highway": 90.0, "arterial": 65.0, "local": 45.0, } DEFAULT_TRAFFIC_MULTIPLIER = 1.10 def haversine_km(lat1: float, lon1: float, lat2: float, lon2: float) -> float: R = 6371.0 dlat = radians(lat2 - lat1) dlon = radians(lon2 - lon1) a = sin(dlat / 2) ** 2 + cos(radians(lat1)) * cos(radians(lat2)) * sin(dlon / 2) ** 2 return R * c Definimos os dados de domínio principais que representam sondas, pátios e depósitos, juntamente com suas coordenadas geográficas. Estabelecemos perfis de velocidade e um multiplicador de tráfego padrão para refletir condições de condução realistas.
Fonte: MarkTechPost
Publicado em 2026-02-21