Utilizzando LLM con LangChain per l’analisi della supply chain – Una Torre di Controllo potenziata da GPT

GPT potenzia la Torre di Controllo della supply chain con l'uso di LLM tramite LangChain

Costruisci una torre di controllo dell’approvvigionamento automatica con un agente di LangChain SQL connesso al database di un sistema di gestione dei trasporti

(Immagine dell'autore)

Una torre di controllo dell’approvvigionamento può essere definita come una soluzione centralizzata che fornisce capacità di visibilità e monitoraggio per gestire in modo efficiente le operazioni dell’intera catena di approvvigionamento.

Questo strumento analitico consente al dipartimento di gestione della catena di approvvigionamento di tracciare, comprendere e risolvere tempestivamente le problematiche critiche.

Torre di controllo della catena di approvvigionamento con Python [Link] — (Immagine dell'autore)

In un articolo precedente, ho presentato una soluzione per una torre di controllo analitica (sviluppata con Python) in grado di generare autonomamente rapporti sugli incidenti.

Tuttavia, questo approccio ha delle limitazioni nell’ambito degli indicatori e dei rapporti forniti.

Come possiamo migliorare questo modello per una migliore esperienza utente?

Questa osservazione mi ha portato al potenziale promettente dei Large Language Models (LLMs) come GPT di OpenAI nel fornire analisi personalizzate basate su ogni richiesta dell’utente.

Concetto generale della soluzione — (Immagine dell'autore)

In questo articolo, condividerò i primi passi del mio viaggio per padroneggiare Langchain con i modelli GPT di OpenAI e costruire la torre di controllo dell’approvvigionamento definitiva.

💌 Nuovi articoli direttamente nella tua casella di posta gratuitamente: Newsletter📘 La tua guida completa per l’Analisi della Catena di Approvvigionamento: Cheat Sheet di Analisi

SINTESII. LLMs con Langchain per l'Analisi della Catena di ApprovvigionamentoUn'analisi di come LangChain e i LLMs possono rivoluzionare l'analisi nella gestione della catena di approvvigionamento.1. Scenario: Processo di Distribuzione di un Rivenditore di ModaLe complesse operazioni di distribuzione in un contesto di vendita al dettaglio di moda globale.2. Preparare il Terreno per l'E sperimentazioneIntroduci il setup sperimentale per testare un agente di LangChain SQL.3. Protocollo Sperimentale: Iniziare in Modo SempliceInizia con una query semplice per valutare le capacità di base dell'agente.II. Sperimentazioni e Insight Chiave1. Test 1Prompt Semplice senza Template2. Test 2Prompt Template con un Contesto3. Test 3Prompt Template con un Contesto Migliorato4. Test 4Analisi Avanzata con un Contesto Migliorato5. Test FinaleCreare una Catena per Scrivere un Rapporto via EmailIII. I LLMs Plasmano il Futuro della Catena di Approvvigionamento1. Un 'Proof-of-Concept' SemplicePossiamo utilizzare un agente per tracciare spedizioni con dati di TMS2. Continuare lo Sviluppo del PrototipoSfida l'agente con analisi complesse e altre tabelle.3. Esplorare Applicazioni Più Am pie nella Catena di ApprovvigionamentoI LLMs possono migliorare l'esperienza utente per Digital Twins, Ottimizzazione di Rete,Intelligence Aziendale, Reporting ESG e molte altre applicazioni

LLMs con LangChain per l’Analisi della Catena di Approvvigionamento

Scenario: Processo di Distribuzione di un Rivenditore di Moda

Immagina di essere un data scientist presso un gruppo di abbigliamento internazionale con una rete di negozi globale.

Il tuo progetto attuale prevede di aiutare il responsabile della pianificazione della distribuzione nel monitorare il processo di rifornimento dei negozi.

Rete della Catena di Approvvigionamento — (Immagine dell'autore)

Lei sta guidando un team di pianificatori che gestiscono l’inventario dei negozi in tutto il mondo.

Il processo è semplice, quando il livello dell’inventario raggiunge il livello minimo

Il fulcro indicatore di performance è la percentuale di ordini consegnati puntualmente.

Processi della catena di distribuzione tracciati con timestamp — (Immagine di Autore)

Dall’elaborazione dell’ordine alla consegna al negozio, diversi timestamp e booleani vengono registrati nel database.

  • Il tempo di trasmissione dell’ordine viene registrato come ‘Trasmissione‘. Se questo avviene dopo l’orario di chiusura, ‘Trasmissione_Puntale’ viene impostato su 0.
  • Il tempo di caricamento sul camion viene registrato come ‘Caricamento‘. Se questo avviene dopo l’orario di chiusura, ‘Caricamento_Puntuale’ viene impostato su 0.
  • L’arrivo del camion all’aeroporto viene registrato come ‘Arrivo_Aeroporto‘. Se questo avviene dopo l’orario di chiusura, ‘Aeroporto_Puntuale’ viene impostato su 0.
  • L’atterraggio dell’aereo all’aeroporto viene registrato come ‘Arrivo_Aeroporto‘. Se questo avviene dopo l’orario di chiusura, ‘Aeroporto_Puntuale’ viene impostato su 0.
  • L’arrivo del camion in città viene registrato come ‘Arrivo_Città‘. Se questo avviene al di fuori della finestra di apertura del negozio, ‘Negozio_Aperto’ viene impostato su 0.

Il timestamp più importante è ‘Ora_Consegna‘. Viene confrontato con ‘Orario_Consegna_Previsto’ per impostare il valore di ‘Consegna_Puntuale‘.

La soluzione iniziale che ho presentato nel mio articolo precedente è un insieme di visualizzazioni e report che rispondono a domande operative.

Domanda 1: Quanti invii sono stati consegnati in ritardo?

(Immagine di Autore)

Domanda 2: Dove si trovano attualmente gli invii in transito?

(Immagine di Autore)

La principale difficoltà nel progettare questo tipo di soluzione di analisi descrittiva è il bilanciamento tra complessità e completezza.

  • Se si desidera rispondere a tutte le possibili domande operative, il report può diventare rapidamente estremamente difficile da utilizzare.
  • Se si vuole mantenere il report conciso, non si coprirà l’intera portata operativa.

Stiamo raggiungendo i limiti degli strumenti tradizionali di Business Intelligence (BI) che si basano su visualizzazioni, tabelle e report per rispondere alle domande operative.

Per me, il futuro della reportistica risiede in report dinamicamente personalizzati, unici per ogni domanda e contesto dell’utente.

Possiamo utilizzare un modello GPT per migliorare l’esperienza dell’utente fornendo risultati personalizzati per ogni richiesta?

Questo è ciò che sto cercando di capire con un prototipo semplice sviluppato con Python.

Preparare il terreno per l’esperimento

La configurazione è semplice:

  • Un database locale ‘shipments.db’ con una singola tabella ‘shipments’
  • Langchain versione 0.0.325
  • Una chiave OpenAI per interrogare i modelli GPT
  • Un ambiente Python locale con le librerie LangChain, SQLite e Pandas
Panoramica generale della soluzione — (Immagine dell'autore)

Il database include i timestamp e i flag booleani insieme agli ID delle spedizioni, alle destinazioni e agli importi dell’ordine.

Pertanto, l’agente LangChain SQL (alimentato dal modello GPT di OpenAI) può accedere al database, scrivere query SQL e utilizzare gli output per rispondere alle domande degli utenti.

Protocollo sperimentale: Iniziare con qualcosa di semplice

Per valutare l’efficacia dell’agente, ho iniziato con una domanda semplice.

“Quante spedizioni sono state ritardate nei primi sette giorni di maggio?”

La risposta corretta è 6.816 spedizioni.

Comportamento desiderato dell'agente — (Immagine dell'autore)

Mi aspetto che l’agente crei una query SQL che conti tutte le spedizioni dal ‘2021-05-01’ al ‘2021-05-07’ con il flag booleano ‘On_Time_Delivery’ = False.

Nella prossima sezione, esploreremo diverse modalità di interazione con l’agente e cercheremo il metodo più efficace per fornire risposte accurate.

💡 Seguimi su VoAGI per ulteriori articoli relativi all’analytics della 🏭 supply chain, alla 🌳 sostenibilità e alla 🕜 produttività.

Esperimenti e risultati chiave

Ora che tutto è impostato, posso iniziare a creare l’agente LangChain che interagirà con il database.

Utilizzo il AgentType.ZERO_SHOT_REACT_DESCRIPTION,un tipo di agente progettato per operare in un contesto di “zero-shot” learning.

Questo agente è in grado di rispondere a query senza alcun addestramento specifico precedente.

Test 1: Domanda semplice senza modello

Il test iniziale coinvolge l’interrogazione dell’agente con una domanda diretta.

“Quante spedizioni sono state ritardate nei primi sette giorni di maggio?”

[Blocco 1]: L’agente inizia esplorando il database con la tabella unica ‘shipments’.

[Blocco 1]: Scoperta del database — (Immagine dell'autore)

L’agente collega il “spedizioni ritardate” della domanda con la tabella ‘shipments’ del database.

Questo blocco iniziale sarà esattamente lo stesso per tutte le altre iterazioni del nostro esperimento.

[Blocco 2]: L’agente scrive la query e fornisce una risposta errata.

[Blocco 2]: Interrogazione del database e fornitura di una risposta — (Immagine dell'autore)
Test 1: Risultato desiderato (Sinistra) / Output del test (Destra) — (Immagine di Autore)

👍 Un punto positivo è che l’agente ha utilizzato la data corretta (Data dell’ordine) per filtrare le spedizioni nell’ambito. 👎 Tuttavia, ha preso la bandiera sbagliata per definire una spedizione in ritardo.

Questo può essere accettato poiché non abbiamo definito esplicitamente cosa si intende per spedizione in ritardo.

Test 2: Modello di prompt con un contesto

Per migliorare la risposta, posso utilizzare un modello di prompt con un contesto.

Ho voluto mantenere il contesto minimo poiché potremmo non sempre sapere cosa gli utenti chiederanno.

context_explanation = """Come responsabile di una torre di controllo della catena di approvvigionamento, il mio ruolo consiste nel monitorare la rete logistica e garantire che le spedizioni vengano elaborate in modo efficiente e consegnate in tempo. La tabella 'spedizioni' nel nostro database è cruciale per monitorare questi processi. Contiene diverse colonne che tracciano il progresso e la tempestività di ogni spedizione durante diverse fasi:- 'Data_Ordine' e 'Data_Carico_Attesa' forniscono i timestamp per quando viene effettuato un ordine e quando si prevede che venga caricato per la partenza.- 'Ora_Consegna_Attesa' è un timestamp che definisce quando si prevede che la spedizione venga consegnata- 'Carico_In_Orario', 'Aeroporto_In_Orario', 'Atterraggio_In_Orario', 'Trasmissione_In_Orario' sono valori booleani che indicano se la spedizione è stata elaborata in tempo in varie fasi. Se uno di questi è Falso, significa che si è verificato un ritardo, che potrebbe causare la spedizione di essere posticipata al giorno successivo.- 'Negozio_Aperto' indica se il camion è arrivato al negozio prima dell'orario di chiusura. Un valore Falso qui significa che la consegna deve attendere fino al giorno successivo.- 'Consegna_In_Orario' è un indicatore critico del nostro livello di servizio, che mostra se una spedizione è arrivata entro l'orario di consegna richiesto.Comprendere i dati in queste colonne ci aiuta a identificare i punti critici nel processo di spedizione e ad adottare azioni correttive per migliorare le prestazioni di consegna."""input_question = "Quante spedizioni sono state ritardate nei primi sette giorni di maggio?"

💡 Osservazione: Il contesto è una presentazione di alto livello del ruolo di un responsabile di torre di controllo e del contenuto del database.

[Blocco 2]: L’agente scrive la query e fornisce una risposta errata.

[Blocco 2]: Esegui una query sul database e fornisci una risposta — (Immagine di Autore)
Test 2: Risultato desiderato (Sinistra) / Output del test (Destra) — (Immagine di Autore)

👎 L’agente ha una migliore comprensione delle bandiere intermedie ma ancora non capisce la questione.

Questa definizione di consegna ritardata non è illogica ma non corrisponde alla realtà operativa.

💡 Osservazione: Una spedizione può essere puntuale anche se ha una o più bandiere a zero. Solo la bandiera ‘Consegna_In_Orario’ può determinare se una spedizione è in ritardo.

Definizioni dei tempi limite collegati alle bandiere — (Immagine di Autore)

🙋‍♀️ Per essere equi con l’agente, non è una definizione che qualcuno potrebbe indovinare facilmente.

Pertanto, probabilmente dovrei includere una definizione esplicita di una ‘spedizione ritardata’ nel contesto.

Test 3: Modello di promemoria con un contesto migliorato

Ho migliorato il contesto con una frase aggiuntiva.

‘Una spedizione è considerata in ritardo se ‘On_Time_Delivery’ è falso.’

E come previsto, il risultato è buono

[Block 2]: Interroga il database e fornisce una risposta - (Immagine dell'autore)

👋 L’agente ha preso il giusto flag per definire le spedizioni in ritardo.

Cosa succede se richiediamo un’analisi avanzata?

Un ritardo può essere causato da vari motivi che vengono catturati dai diversi flag inclusi nel dataset.

Spedizioni consegnate (Parte superiore: Puntuali, Parte inferiore: In ritardo) - (Immagine dell'autore)

Il nostro team di controllo vorrebbe ottenere un codice di motivo per ogni spedizione che non è stata consegnata in tempo.

In questa azienda, il codice di motivo è definito dalla lista di tutti i flag intermedi che sono falsi.

Ad esempio, se una spedizione è in ritardo:

  1. ‘On_Time_Delivery’ è falso
  2. ‘Transmission_OnTime’ e ‘Loading_OnTime’ sono falsi.
  3. Il codice di motivo è quindi ‘Transmission_OnTime, Loading_OnTime’.

Test 4: Analisi avanzata con un contesto migliorato

Includiamo un’affermazione aggiuntiva

‘Il codice di motivo di una spedizione in ritardo è definito dalla lista di tutti i flag che sono 0 per questa spedizione.’

Quindi, posso sfidare l’agente con una nuova domanda:

Fornisci il numero totale di spedizioni in ritardo nei primi sette giorni di maggio e la loro suddivisione per codice di motivo.

Sfortunatamente, l’agente non è stato in grado di calcolare correttamente la definizione di un codice di motivo.

[Block 2]: Interroga il database e fornisce una risposta - (Immagine dell'autore)

Dopo diverse iterazioni, ho scoperto che l’agente aveva bisogno di qualche indicazione.

Pertanto, ho riformulato la domanda

Crea la colonna ‘Reason_Code’ basata sulla definizione. Quindi, fornisci il numero totale di spedizioni con consegna ritardata nei primi sette giorni di maggio e la suddivisione per codice di motivo.

[Block 2]: Interroga il database e fornisce una risposta - (Immagine dell'autore)

Ora l’output corrisponde alla definizione di un motivo con un’analisi completa della causa radice del ritardo nella consegna.

Possiamo utilizzare questo output per inviare un report via email?

Come esercizio finale, ho voluto creare una catena per chiedere all’agente di scrivere una email utilizzando questo output.

Test finale: Creare una catena per scrivere un report via email

Creare catene con LangChain comporta la combinazione di più agenti per eseguire una sequenza di compiti, con ogni compito che utilizza l’output del precedente.

  • Agente 1: Agente di Query SQL Questo agente interpreta la domanda dell’utente, formula una query SQL e recupera i dati dal database.
  • Agente 2: Agente per la composizione delle email Questo agente prende i dati processati dall’Agente di Query SQL e compone un’email coerente e informativa.

Abbiamo chiesto all’Agente 2 di scrivere una email per me (Samir Saci, Responsabile della Torre di Controllo) al direttore operativo Jay Pity.

[Blocco 3]: Utilizzare l'output dell'Agente 1 per scrivere una email — (Immagine dell'Autore)

💡 Osservazione: Per un motivo sconosciuto, l’agente ha deciso di suddividere il numero di spedizioni ritardate per giorno.

[Blocco 4] Output dell'email — (Immagine dell'Autore)

L’output è un’email che riassume i risultati della query.

  • L’agente include un’analisi aggiuntiva prima di concludere l’email.
  • Il tono è formale e si adatta al contesto della gestione delle operazioni logistiche.

L’output può essere utilizzato per inviare automaticamente un’email utilizzando la libreria SMTP di Python.

Ecco un esempio,

Automatizza la distribuzione dei report operativi in email HTML utilizzando Python

Automatizza la distribuzione dei report operativi della catena di approvvigionamento con visualizzazioni integrate in email HTML con Python.

towardsdatascience.com

💡 Cosa ho imparato?

Questo semplice esperimento con gli Agenti SQL di LangChain mi ha insegnato che…

  • Gli agenti non sono onniscienti. Pertanto, le definizioni aziendali specifiche devono essere spiegate nel contesto.
  • Anche con un buon contesto, l’agente potrebbe aver bisogno di indicazioni per fornire l’output corretto.
  • Può essere collegato un numero di agenti per svolgere compiti avanzati.
  • Dato che l’agente ha bisogno a volte di indicazioni, probabilmente dovremmo formare gli utenti per sollecitare il lavoro di ingegneria.

La sfida principale è fornire il contesto giusto per garantire che l’agente possa rispondere a tutte le domande generate dagli utenti.

📝Commento aggiuntivo: Sono rimasto piuttosto sorpreso nel vedermi utilizzare Chat GPT-4, che è stato molto d’aiuto, per aiutarmi a migliorare il contesto per il modello di prompt che stavo utilizzando con il suo ‘fratellino’ GPT-3.5 Turbo.

💡 Seguimi su VoAGI per ulteriori articoli correlati ad 🏭 Analisi della Catena di Approvvigionamento, 🌳 Sostenibilità e 🕜 Produttività.

LLMs Stanno Modellando il Futuro della Catena di Approvvigionamento

Una Semplice ‘Prova di Concetto’

Visto che sono appena all’inizio di questo entusiasmante percorso, cerco attivamente i vostri commenti e osservazioni sull’approccio che ho condiviso in questo articolo.

I risultati iniziali promettono un futuro trasformativo con database ‘self-service’ potenziati dalle capacità dei Large Language Models (LLMs).

Agenti LangChain Collegati a Diversi Prodotti di Dati — (Immagine dell'Autore)

Questa soluzione, particolarmente vantaggiosa per le aziende che implementano data mesh, può essere utilizzata per collegare direttamente gli utenti ai prodotti di dati attraverso un’interfaccia responsiva potenziata dalla potenza dell’intelligenza artificiale generativa.

Gli utenti non utilizzano i nostri cruscotti. Perché?

Consente agli utenti di effettuare analisi complesse attraverso il linguaggio naturale, sconvolgendo la nostra attuale interazione con i dati basata sui cruscotti.

Continua lo Sviluppo del Prototipo

La conclusione di questi test iniziali è molto positiva.

Tuttavia, ho ancora alcuni test da eseguire prima di finalizzare ufficialmente questa prova di concetto.

  • Arricchire il dataset con le spedizioni in transito e gli ordini cancellati
  • Testare come il modello sta gestendo i dati mancanti
  • Collegare l’agente a diversi database e testare come può gestire più fonti di dati per rispondere a una domanda

Non lo implementerei in produzione senza dei test di accettazione degli utenti per scoprire che tipo di domande gli utenti farebbero (e monitorare il comportamento dell’agente).

Condividerò i miei futuri esperimenti in prossimi articoli, sentiti libero di seguirmi su VoAGI se sei interessato.

Esplorazione di Applicazioni più Ample nella Supply Chain

Come Data Scientist della Supply Chain, le mie sperimentazioni non si fermano qui.

Sono desideroso di esplorare altre applicazioni di LLMs nel campo dell’analisi della Supply Chain.

Queste includono l’integrazione di LLMs con modelli di ottimizzazione:

  • 👬📈 Digital Twins della Supply ChainApplicazione: L’agente aiuterebbe gli utenti a scatenare simulazioni con scenari formulati utilizzando linguaggi naturali. (Gli utenti possono chiedere: “Cosa succederebbe se spostassimo il magazzino centrale in Italia?”)

Cos’è un Digital Twin della Supply Chain?

Scopri i digital twin con python: modella reti della supply chain, migliora la presa di decisioni ed ottimizza le operazioni.

towardsdatascience.com

  • 🔗🍃 Progettazione di una Rete Sostenibile della Supply ChainApplicazione: Gli utenti potrebbero creare modelli di ottimizzazione formulando l’obiettivo e i vincoli utilizzando linguaggi naturali. (Gli utenti possono chiedere: “Vorrei creare una rete di fabbriche per consegnare il mercato francese che soddisfi la domanda riducendo al minimo le emissioni di CO2.”)

Crea una Web App per l’Ottimizzazione di una Supply Chain Sostenibile

Aiuta la tua organizzazione a combinare l’approvvigionamento sostenibile e l’ottimizzazione della supply chain per ridurre i costi ed il… ambientale.

towardsdatascience.com

  • 🏭🍃 Approvvigionamento Sostenibile: Seleziona i Migliori Fornitori Applicazione: I team di acquisto potrebbero formulare le loro iniziative green utilizzando linguaggi naturali e vedere l’impatto sui costi. (Gli utenti possono chiedere: “Vorremmo stimare i costi di selezionare solo fabbriche neutrali dal punto di vista delle emissioni di carbonio per rifornire questo SKU.”)

Cos’è l’Approvvigionamento Sostenibile?

Come puoi utilizzare la Scienza dei Dati per selezionare i migliori fornitori considerando indicatori di sostenibilità e sociali…

s-saci95.medium.com

Potremmo anche utilizzare il nostro agente per migliorare la qualità dei dati o supportare l’audit dei dati utilizzati per i report strategici:

Cos’è il Reporting ESG?

Valorizzare l’Analisi dei Dati per un Report Ambientale, Sociale e di Governance Completo ed Efficace di un’azienda

towardsdatascience.com

  • 📉✅ Cos’è la Qualità dei Dati?Applicazione: Utilizzare il nostro agente per mettere alla prova o supportare metodologie che garantiscono l’Accuracy, la Consistenza e la Completezza dei dati. (Gli utenti possono chiedere: “Potresti analizzare il numero di spedizioni consegnate l’anno scorso con uno stato mancante?”)

Cos’è la qualità dei dati?

Scopri metodologie per garantire l’accuratezza, la coerenza e la completezza dei dati della catena di approvvigionamento

towardsdatascience.com

Ognuna di queste aree offre un enorme potenziale per sfruttare l’IA generativa al fine di implementare soluzioni di “analytics-as-a-service” nella tua azienda.

Se condividi questo entusiasmo, sentiti libero di dare qualche suggerimento nella sezione dei commenti!

Chi sono

Connettiamoci su Linkedin e Twitter, sono un Ingegnere della Catena di Approvvigionamento che utilizza l’analisi dei dati per migliorare le operazioni logistiche e ridurre i costi.

Se sei interessato all’analisi dei dati e alla catena di approvvigionamento, dai un’occhiata al mio sito web

Samir Saci | Data Science & Productivity

Un blog tecnico che si concentra su Data Science, Produttività Personale, Automazione, Ricerca Operativa e Sostenibilità…

samirsaci.com

💡 Seguimi su VoAGI per ulteriori articoli correlati all’analisi della catena di approvvigionamento, alla sostenibilità e alla produttività.