Merge pull request #354 from giornaledisistema/giornaledisistema-patch-3
Updated Italian translationpull/357/head
commit
d6449e7f35
@ -1,5 +1,91 @@
|
||||
# Tecniche di Prompting
|
||||
# Tecniche di Prompting
|
||||
|
||||
A questo punto, dovrebbe essere ovvio che è utile migliorare i prompt per ottenere risultati migliori su compiti diversi. Questa è l'idea alla base dell'ingegneria dei prompt.
|
||||
import {Cards, Card} from 'nextra-theme-docs'
|
||||
import { CardsIcon, OneIcon, WarningIcon, FilesIcon} from 'components/icons'
|
||||
|
||||
Se gli esempi di base sono stati divertenti, in questa sezione tratteremo tecniche più avanzate di ingegneria dei prompt, che ci permettono di realizzare compiti più complessi e interessanti.
|
||||
L'ingegneria dei prompt aiuta a progettare e migliorare efficacemente i prompt per ottenere risultati migliori in diversi compiti con gli LLM.
|
||||
|
||||
Se gli esempi di base sono stati divertenti, in questa sezione tratteremo tecniche più avanzate di ingegneria dei prompt, che ci permettono di realizzare compiti più complessi e di migliorare l'affidabilità e le prestazioni degli LLM.
|
||||
|
||||
<Cards>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Zero-Shot Prompting"
|
||||
href="/techniques/zeroshot"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Few-Shot Prompting"
|
||||
href="/techniques/fewshot"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Chain-of-Thought Prompting"
|
||||
href="/techniques/cot"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Self-Consistency"
|
||||
href="/techniques/consistency"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="General Knowledge Prompting"
|
||||
href="/techniques/knowledge"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Prompt Chaining"
|
||||
href="/techniques/prompt_chaining"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Tree of Thoughts Prompting"
|
||||
href="/techniques/tot"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Retrieval Augmented Generation"
|
||||
href="/techniques/rag"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Automatic Reasoning and Tool-Use"
|
||||
href="/techniques/art"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Automatic Prompt Engineer"
|
||||
href="/techniques/ape"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Active-Prompt"
|
||||
href="/techniques/activeprompt"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Direct Stimulus Prompting"
|
||||
href="/techniques/dsp"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Program-Aided Language"
|
||||
href="/techniques/pal"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="ReAct"
|
||||
href="/techniques/react"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Multimodal CoT"
|
||||
href="/techniques/multimodalcot"
|
||||
/>
|
||||
<Card
|
||||
icon={<FilesIcon />}
|
||||
title="Graph Prompting"
|
||||
href="/techniques/graph"
|
||||
/>
|
||||
</Cards>
|
||||
|
@ -1,3 +1,105 @@
|
||||
# Prompt Chaining
|
||||
|
||||
This page needs a translation! Feel free to contribute a translation by clicking the `Edit this page` button on the right side.
|
||||
import {Screenshot} from 'components/screenshot'
|
||||
import PC1 from '../../img/prompt_chaining/prompt-chaining-1.png'
|
||||
|
||||
## Introduzione al Prompt Chaining (concatenamento di prompt)
|
||||
|
||||
Per migliorare l'affidabilità e le prestazioni degli LLM, una delle principali tecniche di prompting consiste nel suddividere i compiti in sottocompiti. Una volta identificati i sottocompiti, all'LLM viene dato un prompt per il sottocompito e poi la sua risposta viene utilizzata come input per un altro prompt. Si tratta del cosiddetto prompt chaining (concatenamento di prompt), in cui un compito viene suddiviso in sottocompiti con l'idea di creare una catena di operazioni di prompt.
|
||||
|
||||
Il concatenamento dei prompt è utile per realizzare compiti complessi che un LLM potrebbe faticare ad affrontare se sollecitato con un prompt molto dettagliato. Nel concatenamento di prompt, i prompt della catena eseguono trasformazioni o processi aggiuntivi sulle risposte generate prima di raggiungere lo stato finale desiderato.
|
||||
|
||||
Oltre a ottenere prestazioni migliori, il concatenamento di prompt contribuisce a migliorare la trasparenza della vostra applicazione LLM, aumentando la controllabilità e l'affidabilità. Ciò significa che è possibile eseguire il debug dei problemi con le risposte del modello in modo molto più semplice e analizzare e migliorare le prestazioni nelle diverse fasi che necessitano di miglioramenti.
|
||||
|
||||
Il concatenamento dei prompt è particolarmente utile per la creazione di assistenti conversazionali basati su LLM e per migliorare la personalizzazione e l'esperienza utente delle applicazioni.
|
||||
|
||||
## Casi d'uso per il Prompt Chaining
|
||||
|
||||
### Prompt Chaining per domande/risposte su documenti (Document QA - Question Answering)
|
||||
|
||||
Il concatenamento dei prompt può essere utilizzato in diversi scenari che possono comportare diverse operazioni o trasformazioni. Ad esempio, un caso d'uso comune dei LLM prevede la risposta a domande su un documento di testo di grandi dimensioni. È utile progettare due prompt diversi, dove il primo prompt è responsabile dell'estrazione delle citazioni rilevanti per rispondere a una domanda, ed un secondo prompt prende in input le citazioni e il documento originale per rispondere a una determinata domanda. In altre parole, si creeranno due prompt diversi per eseguire il compito di rispondere a una domanda data da un documento.
|
||||
|
||||
Il primo prompt qui di seguito estrae le citazioni rilevanti dal documento oggetto della domanda. Si noti che per semplicità è stato aggiunto un segnaposto `{{document}}` al posto del documento. Per testare il prompt si può copiare e incollare un articolo da Wikipedia, come questa pagina per [prompt engineering](https://en.wikipedia.org/wiki/Prompt_engineering). A causa del contesto più ampio utilizzato per questo compito, stiamo utilizzando il modello `gpt-4-1106-preview` di OpenAI. È possibile utilizzare il prompt con altri LLM a contesto lungo come Claude.
|
||||
|
||||
Prompt 1:
|
||||
```
|
||||
Sei un assistente disponibile. Il tuo compito è aiutare a rispondere a una domanda posta in un documento. Il primo passo consiste nell'estrarre dal documento le citazioni rilevanti per la domanda, delimitate da ####. Per favore produci l'elenco delle citazioni utilizzando <quotes></quotes>. Rispondi con "Non sono state trovate citazioni pertinenti!" se non sono state trovate citazioni pertinenti.
|
||||
|
||||
|
||||
####
|
||||
{{document}}
|
||||
####
|
||||
```
|
||||
|
||||
Ecco una schermata dell'intero prompt, compresa la domanda che viene passata utilizzando il ruolo `user`.
|
||||
|
||||
<Screenshot src={PC1} alt="Prompt Chaining Parte 1" />
|
||||
|
||||
Output del Prompt 1:
|
||||
```
|
||||
<quotes>
|
||||
- Chain-of-thought (CoT) prompting[27]
|
||||
- Generated knowledge prompting[37]
|
||||
- Least-to-most prompting[38]
|
||||
- Self-consistency decoding[39]
|
||||
- Complexity-based prompting[41]
|
||||
- Self-refine[42]
|
||||
- Tree-of-thought prompting[43]
|
||||
- Maieutic prompting[45]
|
||||
- Directional-stimulus prompting[46]
|
||||
- Textual inversion and embeddings[59]
|
||||
- Using gradient descent to search for prompts[61][62][63][64]
|
||||
- Prompt injection[65][66][67]
|
||||
</quotes>
|
||||
```
|
||||
|
||||
Le citazioni restituite nel primo prompt possono ora essere utilizzate come input per il secondo prompt sotto. Si noti che è possibile ripulire ancora un po' le citazioni, cioè rimuoverle. Queste citazioni potrebbero essere rimosse o utilizzate come parte di un altro prompt della catena, ma per ora le si ignora. Il secondo prompt prende quindi le citazioni rilevanti estratte dal prompt 1 e prepara una risposta utile alla domanda, dato il documento e le citazioni estratte. Il secondo prompt può essere il seguente:
|
||||
|
||||
Prompt 2:
|
||||
```
|
||||
Dato un insieme di citazioni rilevanti (delimitate da <quotes></quotes>) estratte da un documento ed il documento originale (delimitato da ####), per favore componi una risposta alla domanda. Assicurati che la risposta sia accurata, abbia un tono amichevole e suoni utile.
|
||||
|
||||
####
|
||||
{{document}}
|
||||
####
|
||||
|
||||
<quotes>
|
||||
- Chain-of-thought (CoT) prompting[27]
|
||||
- Generated knowledge prompting[37]
|
||||
- Least-to-most prompting[38]
|
||||
- Self-consistency decoding[39]
|
||||
- Complexity-based prompting[41]
|
||||
- Self-refine[42]
|
||||
- Tree-of-thought prompting[43]
|
||||
- Maieutic prompting[45]
|
||||
- Directional-stimulus prompting[46]
|
||||
- Textual inversion and embeddings[59]
|
||||
- Using gradient descent to search for prompts[61][62][63][64]
|
||||
- Prompt injection[65][66][67]
|
||||
</quotes>
|
||||
```
|
||||
|
||||
Output of Prompt 2:
|
||||
|
||||
```
|
||||
Le tecniche di prompting menzionate nel documento includono:
|
||||
|
||||
1. Chain-of-thought (CoT) prompting[27]
|
||||
2. Generated knowledge prompting[37]
|
||||
3. Least-to-most prompting[38]
|
||||
4. Self-consistency decoding[39]
|
||||
5. Complexity-based prompting[41]
|
||||
6. Self-refine[42]
|
||||
7. Tree-of-thought prompting[43]
|
||||
8. Maieutic prompting[45]
|
||||
9. Directional-stimulus prompting[46]
|
||||
10. Textual inversion and embeddings[59]
|
||||
11. Using gradient descent to search for prompts[61][62][63][64]
|
||||
12. Prompt injection[65][66][67]
|
||||
|
||||
Ognuna di queste tecniche impiega strategie uniche per migliorare o specificare le interazioni con i modelli linguistici di grandi dimensioni per produrre i risultati desiderati.
|
||||
```
|
||||
|
||||
Come si può vedere, la semplificazione e la creazione di catene di prompt è un approccio utile quando le risposte devono subire diverse operazioni o trasformazioni. Come esercizio, provate a progettare un prompt che rimuova le citazioni (ad esempio, [27]) dalla risposta prima di inviarla come risposta finale all'utente della vostra applicazione.
|
||||
|
||||
Si possono trovare altri esempi di concatenamento di prompt in questa [documentazione](https://docs.anthropic.com/claude/docs/prompt-chaining) che sfrutta l'LLM di Claude. Il nostro esempio è ispirato ed adattato dai loro esempi.
|
||||
|
@ -1,25 +1,44 @@
|
||||
# Retrieval Augmented Generation (RAG)
|
||||
|
||||
import {Cards, Card} from 'nextra-theme-docs'
|
||||
import {TerminalIcon} from 'components/icons'
|
||||
import {CodeIcon} from 'components/icons'
|
||||
import {Screenshot} from 'components/screenshot'
|
||||
import RAG from '../../img/rag.png'
|
||||
import { Callout } from 'nextra/components'
|
||||
|
||||
I modelli di linguaggio di uso generale possono essere perfezionati per svolgere diversi compiti comuni come l'analisi del sentimento e il riconoscimento delle entità nominate. Questi compiti generalmente non richiedono ulteriori conoscenze di base.
|
||||
I modelli di linguaggio di uso generale possono essere messi a punto per svolgere diversi compiti comuni come l'analisi del sentimento e il riconoscimento delle entità denominate. Questi compiti generalmente non richiedono conoscenze di base aggiuntive.
|
||||
|
||||
Per compiti più complessi e che richiedono molte conoscenze, è possibile costruire un sistema basato su un modello di linguaggio che accede a fonti di conoscenza esterne per completare i compiti. Questo consente una maggiore coerenza dei fatti, migliora l'affidabilità delle risposte generate e aiuta a mitigare il problema dell'"allucinazione".
|
||||
Per compiti più complessi e che richiedono molte conoscenze, è possibile costruire un sistema basato su un modello di linguaggio che acceda a fonti di conoscenza esterne per completare i compiti. Questo consente una maggiore coerenza dei fatti, migliora l'affidabilità delle risposte generate e aiuta a mitigare il problema dell'"allucinazione".
|
||||
|
||||
I ricercatori di Meta AI hanno introdotto un metodo chiamato [Generazione aumentata dal recupero (RAG)](https://ai.facebook.com/blog/retrieval-augmented-generation-streamlining-the-creation-of-intelligent-natural-language-processing-models/) per affrontare tali compiti che richiedono molte conoscenze. RAG combina un componente di recupero delle informazioni con un modello generatore di testo. RAG può essere perfezionato e la sua conoscenza interna può essere modificata in modo efficiente e senza la necessità di riaddestrare l'intero modello.
|
||||
I ricercatori di Meta AI hanno introdotto un metodo chiamato [Generazione potenziata dal recupero (RAG)](https://ai.facebook.com/blog/retrieval-augmented-generation-streamlining-the-creation-of-intelligent-natural-language-processing-models/) per affrontare tali compiti che richiedono molte conoscenze. RAG combina una componente di recupero delle informazioni con un modello generatore di testo. RAG può essere perfezionato e la sua conoscenza interna può essere modificata in modo efficiente e senza la necessità di riaddestrare l'intero modello.
|
||||
|
||||
RAG prende un input e recupera un insieme di documenti rilevanti/supportativi dati una fonte (ad esempio, Wikipedia). I documenti vengono concatenati come contesto con il prompt di input originale e inviati al generatore di testo che produce l'output finale. Questo rende RAG adattivo per situazioni in cui i fatti potrebbero evolvere nel tempo. Questo è molto utile poiché la conoscenza parametrica dei LLM è statica. RAG consente ai modelli di linguaggio di bypassare la ri-formazione, consentendo l'accesso alle informazioni più recenti per generare output affidabili attraverso la generazione basata sul recupero.
|
||||
RAG prende un input e recupera un insieme di documenti rilevanti/supportanti dati da una fonte (ad esempio, Wikipedia). I documenti vengono concatenati come contesto con il prompt di input originale e inviati al generatore di testo che produce l'output finale. Questo rende RAG adattivo per situazioni in cui i fatti potrebbero evolvere nel tempo. Questo è molto utile poiché la conoscenza parametrica degli LLM è statica. RAG consente ai modelli di linguaggio di bypassare il riaddestramento, consentendo l'accesso alle informazioni più recenti per generare output affidabili attraverso la generazione basata sul recupero (delle informazioni).
|
||||
|
||||
Lewis et al., (2021) hanno proposto una ricetta generale per il perfezionamento di RAG. Un modello seq2seq pre-addestrato viene utilizzato come memoria parametrica e un indice vettoriale denso di Wikipedia viene utilizzato come memoria non parametrica (accessibile tramite un recupero pre-addestrato neurale). Di seguito è riportata una panoramica di come funziona l'approccio:
|
||||
Lewis et al., (2021) hanno proposto una ricetta generale per il perfezionamento di RAG. Un modello seq2seq pre-addestrato viene utilizzato come memoria parametrica e un indice vettoriale denso di Wikipedia viene utilizzato come memoria non parametrica (accessibile tramite un modulo di recupero neurale pre-addestrato). Di seguito è riportata una panoramica di come funziona l'approccio:
|
||||
|
||||
<Screenshot src={RAG} alt="RAG" />
|
||||
Fonte dell'immagine: [Lewis et al. (2021)](https://arxiv.org/pdf/2005.11401.pdf)
|
||||
Fonte immagine: [Lewis et al. (2021)](https://arxiv.org/pdf/2005.11401.pdf)
|
||||
|
||||
RAG si comporta in modo forte su diversi benchmark come [Natural Questions](https://ai.google.com/research/NaturalQuestions), [WebQuestions](https://paperswithcode.com/dataset/webquestions), e CuratedTrec. RAG genera risposte che sono più fattuali, specifiche e diverse quando testate su domande MS-MARCO e Jeopardy. RAG migliora anche i risultati sulla verifica dei fatti FEVER.
|
||||
RAG ha ottenuto ottimi risultati su diversi benchmark come [Natural Questions](https://ai.google.com/research/NaturalQuestions), [WebQuestions](https://paperswithcode.com/dataset/webquestions), e CuratedTrec. RAG genera risposte che sono più fattuali, specifiche e diversificate quando testate su domande MS-MARCO e Jeopardy. RAG migliora anche i risultati nella verifica dei fatti di FEVER.
|
||||
|
||||
Questo mostra il potenziale di RAG come opzione valida per migliorare gli output dei modelli di linguaggio nei compiti che richiedono molte conoscenze.
|
||||
|
||||
Più recentemente, questi approcci basati su recupero sono diventati più popolari e sono combinati con LLM popolari come ChatGPT per migliorare le capacità e la coerenza fattuale.
|
||||
|
||||
Puoi trovare un [esempio semplice di come usare i recuperatori e i LLM per rispondere alle domande con le fonti](https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_qa) dalla documentazione di LangChain.
|
||||
## Casi d'uso di RAG: generare titoli amichevoli per articoli ML
|
||||
|
||||
Di seguito, abbiamo preparato un tutorial che illustra l'uso di LLM open-source per costruire un sistema RAG per generare titoli brevi e concisi di articoli sull'apprendimento automatico:
|
||||
|
||||
<Cards>
|
||||
<Card
|
||||
icon={<CodeIcon />}
|
||||
title="Getting Started with RAG"
|
||||
href="https://github.com/dair-ai/Prompt-Engineering-Guide/blob/main/notebooks/pe-rag.ipynb"
|
||||
/>
|
||||
</Cards>
|
||||
|
||||
## Riferimenti
|
||||
|
||||
- [Retrieval-Augmented Generation for Large Language Models: A Survey](https://arxiv.org/abs/2312.10997) (Dec 2023)
|
||||
- [Retrieval Augmented Generation: Streamlining the creation of intelligent natural language processing models](https://ai.meta.com/blog/retrieval-augmented-generation-streamlining-the-creation-of-intelligent-natural-language-processing-models/) (Sep 2020)
|
||||
|
Loading…
Reference in New Issue