Il concatenamento dei prompt è un concetto fondamentale nella creazione di workflow avanzati con modelli linguistici di grandi dimensioni (LLM). Implica il collegamento di più prompt in una sequenza logica, in cui l'output di un prompt funge da input per quello successivo. Questo approccio modulare è particolarmente potente per risolvere attività complesse come l'elaborazione di testi in più fasi, il riepilogo, la risposta alle domande e altro ancora.
LangChain è un framework versatile progettato per semplificare la creazione di workflow. Fornisce strumenti per gestire gli LLM come i modelli IBM® Granite o quelli di GPT (generative pre-training transformer) di OpenAI, per definire prompt personalizzati e collegarli in catene riutilizzabili. Riducendo la complessità della gestione dei prompt, LangChain consente agli sviluppatori di concentrarsi sulla risoluzione dei problemi piuttosto che sull'orcestrazione delle interazioni con gli LLM.
In questo tutorial, ci occuperemo di:
LangChain fornisce un potente framework per la creazione di workflow modulari in applicazioni chatbot. La combinazione di prompt, concatenamento dinamico e integrazione avanzata consente agli sviluppatori di creare pipeline scalabili e adattive che utilizzano le tecniche RAG e forniscono output come JSON. Ecco come LangChain gestisce efficacemente il concatenamento dei prompt:
Prompt: LangChain utilizza from_template per progettare workflow di input/output strutturati per ogni fase, facilitando la gestione delle operazioni di chatbot.
Integrazione LLM: il framework si integra perfettamente con vari LLM, come IBM Granite, OpenAI e Hugging Face, consentendone la messa a punto per attività personalizzate.
Gestione della catena: SequentialChain e SimpleSequentialChain di LangChain consentono workflow modulari per pipeline di chatbot, mentre stroutputparser garantisce output strutturati come JSON.
Flussi di lavoro dinamici: utilizzando strumenti come ConditionalChain e modelli di messaggistica di sistema, LangChain supporta workflow adattivi, in linea con i principi della RAG (retrieval-augmented generation) per la generazione dinamica di contenuti.
Al termine di questo tutorial, avrai maturato una solida conoscenza di come usare LangChain per creare workflow modulari ed estensibili per un'ampia gamma di applicazioni.
Il concatenamento dei prompt consente di progettare workflow in cui gli output di una fase vengono passati a quella successiva. I vari tipi di concatenamento supportano workflow diversi che vanno da semplici attività sequenziali a processi più complessi e dinamici. Ecco una breve panoramica dei tipi di concatenamento dei prompt:
Concatenamento sequenziale: il tipo di concatenamento più semplice, in cui l'output di un prompt viene passato direttamente come input al successivo. Questa opzione è ideale per attività con una progressione lineare.[1]
Branching chaining: nel branching chaining, un output viene suddiviso in più workflow paralleli. Ogni ramo elabora l'output in modo indipendente. [2]
Concatenamento iterativo: il concatenamento iterativo comporta l'esecuzione ripetuta di un prompt o di una catena fino a quando non viene soddisfatta una condizione specificata. Questa opzione è utile per perfezionare gli output.[3]
Concatenamento gerarchico: suddivide un'attività di grandi dimensioni in attività secondarie più piccole, che vengono eseguite in modo gerarchico. Gli output di livello inferiore alimentano attività di livello superiore. [4]
Concatenamento condizionale: il concatenamento condizionale sceglie in modo dinamico i passaggi successivi in base all'output di un prompt precedente. Abilita il processo decisionale all'interno dei workflow.
Concatenamento multimodale: il concatenamento multimodale integra prompt che gestiscono diversi tipi di dati (ad esempio, testo, immagini o audio). È adatto per applicazioni che combinano più modalità. [2]
Concatenamento dinamico: il concatenamento dinamico adatta il workflow in base agli output in tempo reale o a condizioni mutevoli. Aggiunge flessibilità al concatenamento dei prompt. [5]
Concatenamento ricorsivo: nel concatenamento ricorsivo, gli input di grandi dimensioni vengono suddivisi in blocchi più piccoli per l'elaborazione individuale e i risultati vengono quindi combinati. È utile per la gestione di documenti o set di dati particolarmente lunghi. [6]
Concatenamento inverso: il concatenamento inverso inizia con un output e lavora a ritroso per determinare gli input o i passaggi necessari per raggiungerlo. È ottimo per la risoluzione dei problemi e per il debug. [5]
Ogni tipo di concatenamento soddisfa casi d'uso unici, rendendo essenziale scegliere quello giusto in base alla complessità e ai requisiti dell'attività.
In questo workflow, elaboriamo il feedback con modelli di chat e prompt engineering per costruire una pipeline scalabile di elaborazione del testo. Le seguenti fasi del tutorial dimostrano tecniche di concatenamento sequenziale, ramificato e iterativo basate sull'AI generativa.
Estrazione di parole chiave (concatenamento sequenziale)
Generazione di un riepilogo del sentiment (branching chaining)
Perfezionamento del riepilogo del sentiment (concatenamento iterativo)
Output finale
Questo approccio combina il concatenamento sequenziale, ramificato e iterativo in Python con modelli di chat e prompt engineering. Garantisce una solida elaborazione del feedback, sfruttando l'AI generativa per l'estrazione delle parole chiave, l'analisi del sentiment e il perfezionamento.
Per creare un progetto watsonx.ai è necessario un account IBM Cloud .
Sebbene sia possibile scegliere tra diversi strumenti, questo tutorial illustra come configurare un account IBM per l'utilizzo di un Jupyter Notebook.
Questo passaggio apre un ambiente notebook in cui è possibile copiare il codice da questo tutorial. In alternativa, puoi scaricare questo notebook sul tuo sistema locale e caricarlo nel tuo progetto watsonx.ai come asset. Per visualizzare altri tutorial su Granite, visita l'IBM Granite Community. Questo tutorial è disponibile anche su GitHub.
Abbiamo bisogno di librerie che funzionino con il framework Langchain e WatsonxLLM. Installiamo prima i pacchetti richiesti.
Nota: se stai utilizzando una vecchia versione di 'pip', puoi utilizzare il comando pip install --upgrade pip' per aggiornarla. Questo passaggio consente di installare facilmente i pacchetti più recenti, che potrebbero non essere compatibili con una versione precedente. Se però stai già utilizzando l'ultima versione o hai aggiornato di recente i tuoi pacchetti, puoi saltare questo comando.
Questo blocco di codice importa le librerie e gli strumenti Python essenziali per creare e gestire un'applicazione LLM utilizzando LangChain e IBM Watson LLM.
Il modulo os viene utilizzato per accedere alle variabili di ambiente, come le credenziali di progetto o le chiavi API.
WatsonxLLM è un modulo di langchain_ibm che integra IBM Watson LLM per generare output da modelli di AI generativa.
PromptTemplate aiuta a creare modelli riutilizzabili per i prompt, garantendo la struttura degli input e la flessibilità nella prompt engineering.
LLMChain costruisce catene di attività individuali mentre
SequencialChain collega più passaggi in un unico workflow e `getpass` recupera in modo sicuro le informazioni sensibili (ad esempio, le chiavi API) senza esporle sullo schermo.
Questo codice configura le credenziali per l'accesso all'API IBM® watson Machine Learning (WML) e garantisce che il PROJECT_ID sia configurato correttamente.
Questo codice inizializza l'LLM di IBM® Watsonx perché venga utilizzato nell'applicazione:
Questo passaggio prepara l'LLM Watson per la generazione di risposte nel workflow.
Questo codice definisce i prompt per tre fasi del workflow di elaborazione del testo:
Queste istanze PromptTemplate consentono la progettazione riutilizzabile e strutturata di prompt engineering per l'applicazione LLM.
Questo codice definisce le catene LLM che collegano i prompt con l'LLM IBM Watson inizializzato, assegnando chiavi di output univoche per ogni fase:
Queste istanze LLMChain consentono l'esecuzione modulare delle attività, facilitando un flusso di lavoro passo a passo dell'applicazione degli LLM.
Questo codice combina le catene precedentemente definite in un workflow sequenziale, consentendo una procedura dettagliata per l'input di testo. SequentialChain collega keyword_chain, sentiment_chain e refine_chain in un ordine definito, assicurando che l'output di una catena serva da input per la successiva. Il workflow è configurato per accettare il testo come input iniziale, con l'output finale, un riepilogo raffinato del sentiment memorizzato sotto la chiave "refined_summary". Questa configurazione consente un'esecuzione semplificata ed efficiente dell'applicazione dell'LLM, garantendo una pipeline di elaborazione coerente e modulare.
In questo blocco di codice eseguiremo l'intero workflow. Innanzitutto, abbiamo una stringa di feedback multilinea definita feedback_text, contenente commenti positivi e negativi degli utenti su un'app. Il metodo workflow.run elabora il feedback attraverso le catene sequenziali (estrazione di parole chiave, analisi del sentiment e perfezionamento) utilizzando l'input fornito. Il riepilogo del sentiment affinato viene stampato direttamente come risultato finale.
OUTPUT
Riepilogo del sentiment perfezionato:
Il sentiment degli utenti è prevalentemente negativo a causa delle ricorrenti interruzioni dell'app e dei tempi di risposta lenti del supporto clienti, nonostante l'apprezzamento per le caratteristiche e l'occasionale utilità del l'assistenza. Per aumentare la soddisfazione degli utenti, il team di sviluppo dovrà concentrarsi sulla risoluzione delle interruzioni dell'app e sull'accelerazione delle risposte del supporto clienti.
Il riepilogo del sentiment raffinato è una valutazione concisa e chiara del feedback. Sottolinea l'apprezzamento dell'utente per le caratteristiche dell'app, ma esprime frustrazione per i frequenti crash e la lentezza del supporto clienti, riflettendo la capacità del workflow di distillare insight critici in modo efficace.
La selezione del tipo di concatenamento appropriato per l'applicazione LLM comporta la valutazione dei fattori chiave per garantire efficienza e coerenza:
Complessità delle attività: utilizza workflow eseguibili per attività con più passaggi. Esempi few-shot o modelli di chatprompt possono aiutare a strutturare attività complesse che richiedono prompt diversi.
Dipendenza: se gli output di un passaggio sono segnaposto per il prompt successivo, usi il concatenamento sequenziale. I parser di output assicurano una transizione fluida degli output in input strutturati.
Adattabilità: per i workflow dinamici, per esempio quelli che coinvolgono agenti langchain, il concatenamento iterativo consente regolazioni in tempo reale dei parametri e dei prompt successivi.
Modalità dati: scegliere workflow compatibili con vari tipi di dati. Usa metodi di embedding per dati di testo e vettoriali o LangChain Expression Language per operazioni flessibili.
Considerando questi fattori, puoi creare un'applicazione LLM robusta e adattabile con workflow coerenti.
Il concatenamento dei prompt è una tecnica versatile per costruire workflow sofisticati di elaborazione del linguaggio naturale (NLP). In questo tutorial, abbiamo esplorato vari tipi di concatenamento e dimostrato un esempio generico che integra più approcci di concatenamento. Sperimentando questi metodi, è possibile sbloccare il pieno potenziale dei modelli linguistici per applicazioni nel mondo reale.
[1] Roegiest, A., & Chitta, R. (2024). Answering Questions in Stages: Prompt Chaining for Contract QA.
[2] Ge, J., Luo, H., Qian, S., Gan, Y., Fu, J., & Zhang, S. (2023). Chain of Thought Prompt Tuning in Vision Language Models.
[3] Sun, S., Yuan, R., Cao, Z., Li, W., & Liu, P. (2024). Prompt Chaining or Stepwise Prompt? Refinement in Text Summarization. , 7551-7558. https://arxiv.org/abs/2406.00507.
[4] Huang, Q., Zhu, J., Li, Z., Xing, Z., Wang, C., & Xu, X. (2023). PCR-Chain: Partial Code Reuse Assisted by Hierarchical Chaining of Prompts on Frozen Copilot. 2023 IEEE/ACM 45th International Conference on Software Engineering: Companion Proceedings (ICSE-Companion), 1-5. https://ieeexplore.ieee.org/document/10172550.
[5] Wu, T., Jiang, E., Donsbach, A., Gray, J., Molina, A., Terry, M., & Cai, C. (2022). PromptChainer: Chaining Large Language Model Prompts through Visual Programming. CHI Conference on Human Factors in Computing Systems Extended Abstracts. https://dl.acm.org/doi/10.1145/3491101.3519729.
[6] Trautmann, D. (2023). Large Language Model Prompt Chaining for Long Legal Document Classification. ArXiv, abs/2308.04138. https://arxiv.org/abs/2308.04138.