Translating "introduction"
parent
9e66e7e98d
commit
2d1e2cd0ae
@ -0,0 +1,114 @@
|
||||
# Conceptes bàsics de la creació de prompts
|
||||
|
||||
## Prompts bàsics
|
||||
|
||||
Pots aconseguir molt amb prompts senzills, però la qualitat dels resultats depèn de la quantitat d'informació que proporciones i de com estiguin ben dissenyats. Un prompt pot contenir informació com ara *instruccions* o *preguntes* que passis al model i incloure altres detalls com *context*, *entrades* o *exemples*. Pots utilitzar aquests elements per instruir millor el model i, com a resultat, obtenir resultats millors.
|
||||
|
||||
Comencem repassant un exemple bàsic d'un prompt senzill:
|
||||
|
||||
*Prompt*
|
||||
```
|
||||
El cel és
|
||||
```
|
||||
|
||||
*Sortida:*
|
||||
```
|
||||
blau
|
||||
|
||||
El cel és blau en un dia clar. En un dia núvol, el cel pot ser gris o blanc.
|
||||
```
|
||||
|
||||
Com pots veure, el model de llenguatge ofereix una continuació de cadenes que té sentit donat el context `"El cel és"`. La sortida pot ser inesperada o lluny de la tasca que vols aconseguir.
|
||||
|
||||
Aquest exemple bàsic també destaca la necessitat de proporcionar més context o instruccions sobre què específicament vols aconseguir.
|
||||
|
||||
Provem de millorar-ho una mica:
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Completa la frase:
|
||||
|
||||
El cel és
|
||||
```
|
||||
|
||||
*Sortida:*
|
||||
|
||||
```
|
||||
tan bonic avui.
|
||||
```
|
||||
|
||||
És això millor? Bé, li has dit al model que completi la frase, així que el resultat sembla molt millor, ja que segueix exactament el que li has dit que faci ("completa la frase"). Aquest enfocament de dissenyar prompts òptims per instruir el model a realitzar una tasca és el que s'anomena **enginyeria de prompts**.
|
||||
|
||||
L'exemple anterior és una il·lustració bàsica del que és possible amb LLMs avui en dia. Els LLMs actuals poden realitzar tot tipus de tasques avançades que van des de la resum de text fins al raonament matemàtic i la generació de codi.
|
||||
|
||||
## Format de prompts
|
||||
|
||||
Has provat un prompt molt senzill anteriorment. Un prompt estàndard té el següent format:
|
||||
|
||||
```
|
||||
<Pregunta>?
|
||||
```
|
||||
|
||||
o
|
||||
|
||||
```
|
||||
<Instrucció>
|
||||
```
|
||||
|
||||
Pots formatejar-ho en un format de pregunta-resposta (QA), que és estàndard en molts conjunts de dades de QA, de la següent manera:
|
||||
|
||||
```
|
||||
Q: <Pregunta>?
|
||||
A:
|
||||
```
|
||||
|
||||
Quan fas servir un prompt com el de dalt, també se li diu *zero-shot prompting*, és a dir, estàs demanant directament al model una resposta sense cap exemple ni demostració de la tasca que vols aconseguir. Alguns models de llenguatge grans tenen la capacitat de realitzar zero-shot prompting, però depèn de la complexitat i el coneixement de la tasca en qüestió.
|
||||
|
||||
Tenint en compte el format estàndard anterior, una tècnica popular i eficaç per crear prompts és la que s'anomena *few-shot prompting*, on proporciones exemplars (és a dir, demostracions). Pots formatejar prompts de few-shot de la següent manera:
|
||||
|
||||
```
|
||||
<Pregunta>?
|
||||
<Resposta>
|
||||
|
||||
<Pregunta>?
|
||||
<Resposta>
|
||||
|
||||
<Pregunta>?
|
||||
<Resposta>
|
||||
|
||||
<Pregunta>?
|
||||
|
||||
```
|
||||
|
||||
La versió en format QA es veuria així:
|
||||
|
||||
```
|
||||
Q: <Pregunta>?
|
||||
A: <Resposta>
|
||||
|
||||
Q: <Pregunta>?
|
||||
A: <Resposta>
|
||||
|
||||
Q: <Pregunta>?
|
||||
A: <Resposta>
|
||||
|
||||
Q: <Pregunta>?
|
||||
A:
|
||||
```
|
||||
|
||||
Tingues en compte que no cal utilitzar el format QA. El format del prompt depèn de la tasca que es vulgui realitzar. Per exemple, pots fer una tasca de classificació senzilla i proporcionar exemples que demostrin la tasca de la següent manera:
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Això és genial! // Positiu
|
||||
Això és dolent! // Negatiu
|
||||
Vaja, quina pel·lícula més xula! // Positiu
|
||||
Quin espectacle més horrible! //
|
||||
```
|
||||
|
||||
*Sortida:*
|
||||
```
|
||||
Negatiu
|
||||
```
|
||||
|
||||
Els prompts de few-shot permeten l'aprenentatge en context, que és la capacitat dels models de llenguatge d'aprendre tasques donades algunes demostracions.
|
@ -0,0 +1,15 @@
|
||||
# Elements d'un Prompt
|
||||
|
||||
A mesura que tractem més exemples i aplicacions amb l'enginyeria de prompts, notaràs que certs elements conformen un prompt.
|
||||
|
||||
Un prompt conté qualsevol dels següents elements:
|
||||
|
||||
**Instrucció** - una tasca específica o instrucció que vols que el model realitzi
|
||||
|
||||
**Context** - informació externa o context addicional que pot dirigir el model cap a respostes més adequades
|
||||
|
||||
**Dades d'entrada** - la pregunta o entrada per la qual estem interessats a trobar una resposta
|
||||
|
||||
**Indicador de sortida** - el tipus o format de la sortida.
|
||||
|
||||
No necessites tots els quatre elements per a un prompt i el format depèn de la tasca que es vulgui realitzar. Tractarem exemples més concrets en les guies pròximes.
|
@ -0,0 +1,263 @@
|
||||
# Exemples de Prompts
|
||||
|
||||
A la secció anterior, vam introduir i donar exemples bàsics de com fer prompts als MLL.
|
||||
|
||||
En aquesta secció, proporcionarem més exemples de com s'utilitzen els prompts per aconseguir diferents tasques i introduirem conceptes clau pel camí. Sovint, la millor manera d'aprendre conceptes és mitjançant exemples. A continuació, tractem alguns exemples de com els prompts ben elaborats es poden utilitzar per realitzar diferents tipus de tasques.
|
||||
|
||||
Temes:
|
||||
- [Resum de text](#resum-de-text)
|
||||
- [Extracció d'informació](#extracció-dinformació)
|
||||
- [Resposta a preguntes](#resposta-a-preguntes)
|
||||
- [Classificació de text](#classificació-de-text)
|
||||
- [Conversa](#conversa)
|
||||
- [Generació de codi](#generació-de-codi)
|
||||
- [Raonament](#raonament)
|
||||
|
||||
---
|
||||
|
||||
## Resum de text
|
||||
Una de les tasques estàndard en la generació de llenguatge natural és el resum de text. El resum de text pot incloure molts sabors i dominis diferents. De fet, una de les aplicacions més prometedores dels models de llenguatge és la capacitat de resumir articles i conceptes en resums ràpids i fàcils de llegir. Provem una tasca bàsica de resum utilitzant prompts.
|
||||
|
||||
Posem que estic interessat a aprendre sobre els antibiòtics, podria provar un prompt com aquest:
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Explica els antibiòtics
|
||||
|
||||
A:
|
||||
```
|
||||
|
||||
*Sortida:*
|
||||
```
|
||||
Els antibiòtics són un tipus de medicament utilitzat per tractar infeccions bacterianes. Funcionen matant les bacteris o prevenint-ne la reproducció, permetent al sistema immunitari del cos combatre la infecció. Els antibiòtics normalment es prenen per via oral en forma de pastilles, càpsules o solucions líquides, o en alguns casos s'administren per via intravenosa. No són efectius contra les infeccions virals, i utilitzar-los de manera inadequada pot portar a la resistència als antibiòtics.
|
||||
```
|
||||
|
||||
La "A:" és un format de prompt explícit que s'utilitza en la resposta a preguntes. L'he utilitzat aquí per indicar al model que hi ha una continuació esperada. En aquest exemple, no està clar com això és útil en comparació amb no utilitzar-lo, però deixarem això per als exemples posteriors. Suposem que això és massa informació i volem resumir-ho més. De fet, podem indicar al model que ho resumi en una sola frase com així:
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Els antibiòtics són un tipus de medicament utilitzat per tractar infeccions bacterianes. Funcionen matant les bacteris o prevenint-ne la reproducció, permetent al sistema immunitari del cos combatre la infecció. Els antibiòtics normalment es prenen per via oral en forma de pastilles, càpsules o solucions líquides, o en alguns casos s'administren per via intravenosa. No són efectius contra les infeccions virals, i utilitzar-los de manera inadequada pot portar a la resistència als antibiòtics.
|
||||
|
||||
Explica el que hi ha sobre en una sola frase:
|
||||
```
|
||||
|
||||
*Sortida:*
|
||||
```
|
||||
Els antibiòtics són medicaments utilitzats per tractar infeccions bacterianes matant les bactèries o prevenint-ne la reproducció, però no són efectius contra els virus i l'ús inadequat pot portar a la resistència als antibiòtics.
|
||||
|
||||
ada en el context següent. Mantingueu la resposta breu i concisa. Respongueu "Incert sobre la resposta" si no esteu segur de la resposta.
|
||||
|
||||
Context: Teplizumab té les seves arrels en una empresa farmacèutica de Nova Jersey anomenada Ortho Pharmaceutical. Allà, els científics van generar una versió primerenca de l'anticòs, anomenada OKT3. Originalment obtingut de ratolins, la molècula era capaç de unir-se a la superfície de les cèl·lules T i limitar el seu potencial de matar cèl·lules. El 1986, es va aprovar per ajudar a prevenir el rebuig d'òrgans després de trasplantaments de ronyó, convertint-se en el primer anticòs terapèutic permès per a ús humà.
|
||||
|
||||
Pregunta: D'on es va obtenir originalment OKT3?
|
||||
|
||||
Resposta:
|
||||
```
|
||||
Ratolins.
|
||||
```
|
||||
|
||||
Context obtingut de [Nature](https://www.nature.com/articles/d41586-023-00400-x).ada en el context següent. Mantingueu la resposta breu i concisa. Respongueu "Incert sobre la resposta" si no esteu segur de la resposta.
|
||||
|
||||
Context: Teplizumab té les seves arrels en una empresa farmacèutica de Nova Jersey anomenada Ortho Pharmaceutical. Allà, els científics van generar una versió primerenca de l'anticòs, anomenada OKT3. Originalment obtingut de ratolins, la molècula era capaç de unir-se a la superfície de les cèl·lules T i limitar el seu potencial de matar cèl·lules. El 1986, es va aprovar per ajudar a prevenir el rebuig d'òrgans després de trasplantaments de ronyó, convertint-se en el primer anticòs terapèutic permès per a ús humà.
|
||||
|
||||
Pregunta: D'on es va obtenir originalment OKT3?
|
||||
|
||||
Resposta:
|
||||
```
|
||||
Ratolins.
|
||||
```
|
||||
|
||||
Context obtingut de [Nature](https://www.nature.com/articles/d41586-023-00400-x).
|
||||
|
||||
---
|
||||
|
||||
## Classificació de textos
|
||||
Fins ara, hem utilitzat instruccions simples per realitzar una tasca. Com a enginyer de prompt, haureu de millorar en proporcionar instruccions més precisos. Però això no és tot! També haureu de veure que per a casos d'ús més complexos, només proporcionar instruccions no serà suficient. Aquí és on haureu de pensar més en el context i en els diferents elements que podeu utilitzar en un prompt. Altres elements que podeu proporcionar són `dades d'entrada` o `exemples`.
|
||||
|
||||
Provem de demostrar-ho proporcionant un exemple de classificació de textos.
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Classifiqueu el text en neutral, negatiu o positiu.
|
||||
|
||||
Text: Crec que el menjar va estar bé.
|
||||
Sentiment:
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
Neutral
|
||||
```
|
||||
|
||||
Hem donat la instrucció per classificar el text i el model ha respost amb `'Neutral'`, que és correcte. No hi ha res de malament amb això, però diguem que el que realment necessitem és que el model retorni l'etiqueta en el format exacte que volem. Així, en lloc de `Neutral`, volem que retorni `neutral`. Com ho aconseguim? Hi ha diferents maneres de fer-ho. Ens importa la especificitat aquí, així que com més informació puguem proporcionar al prompt, millors seran els resultats. Podem provar de proporcionar exemples per especificar el comportament correcte. Provem-ho de nou:
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Classifiqueu el text en neutral, negatiu o positiu.
|
||||
|
||||
Text: Crec que les vacances estan bé.
|
||||
Sentiment: neutral
|
||||
|
||||
Text: Crec que el menjar va estar bé.
|
||||
Sentiment:
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
neutral
|
||||
```
|
||||
|
||||
Perfecte! Aquesta vegada, el model ha retornat `neutral`, que és l'etiqueta específica que cercava. Sembla que l'exemple proporcionat en el prompt ha ajudat el model a ser específic en la seva sortida.
|
||||
|
||||
Per destacar per què a vegades és important ser específic, mirem l'exemple següent i detectem el problema:
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Classifiqueu el text en neutre, negatiu o positiu.
|
||||
|
||||
Text: Crec que les vacances estan bé.
|
||||
Sentiment:
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
Neutral
|
||||
```
|
||||
|
||||
Quin és el problema aquí? Com a pista, l'etiqueta inventada `nutral` és completament ignorada pel model. En lloc d'això, el model emet `Neutral`, ja que té cert biaix cap a aquesta etiqueta. Però suposem que el que realment volem és `nutral`. Com ho arreglaríeu? Potser podeu provar d'afegir descripcions a les etiquetes o afegir més exemples al prompt? Si no esteu segurs, discutirem algunes idees en les seccions següents.
|
||||
|
||||
---
|
||||
|
||||
## Conversa
|
||||
Potser una de les coses més interessants que es poden aconseguir amb la tècnica de prompt engineering és instruir el sistema LLM sobre com comportar-se, la seva intenció i la seva identitat. Això és particularment útil quan es construeixen sistemes de conversa com els chatbots de servei al client.
|
||||
|
||||
Per exemple, creem un sistema de conversa que sigui capaç de generar respostes més tècniques i científiques a les preguntes. Noteu com li estem dient explícitament com comportar-se a través de la instrucció. Això es coneix a vegades com a *role prompting*.
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
La següent és una conversa amb un assistent d'investigació en IA. El to de l'assistent és tècnic i científic.
|
||||
|
||||
Humà: Hola, qui ets?
|
||||
IA: Salutacions! Sóc un assistent d'investigació en IA. Com puc ajudar-te avui?
|
||||
Humà: Em pots explicar la creació dels forats negres?
|
||||
IA:
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
Claro! Els forats negres són regions de l'espai temps on la força gravitatòria és tan forta que res, ni tan sols la llum, pot escapar d'ella. Es creen quan una estrella molt massiva mor i el seu nucli col·lapsa cap a dins, formant una singularitat d'infinita densitat. La intensa gravetat de la singularitat atreu tota la matèria i la radiació que l'envolta, creant el forat negre.
|
||||
```
|
||||
|
||||
El nostre assistent d'investigació en IA sembla una mica massa tècnic, oi? Bé, canviem aquest comportament i instruïm el sistema per donar respostes més accessibles.
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
La següent és una conversa amb un assistent d'investigació en IA. Les respostes de l'assistent han de ser fàcils de comprendre fins i tot per als estudiants de primària.
|
||||
|
||||
Humà: Hola, qui ets?
|
||||
IA: Salutacions! Sóc un assistent d'investigació en IA. Com puc ajudar-te avui?
|
||||
Humà: Em pots explicar la creació dels forats negres?
|
||||
IA:
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
Clar! Els forats negres es creen quan una estrella molt massiva es queda sense combustible i col·lapsa cap a dins. La gravetat de l'estrella és tan forta que res, ni tan sols la llum, pot escapar del seu camp de gravetat. Això crea un punt en l'espai-temps amb una força gravitatòria intensa anomenada forat negre.
|
||||
```
|
||||
|
||||
Crec que hem fet algun progrés. Podeu continuar millorant-lo. Estic segur que si afegiu més exemples, podreu obtenir resultats encara millors.
|
||||
|
||||
---
|
||||
|
||||
## Generació de codi
|
||||
Una aplicació on els LLMs són bastant efectius és la generació de codi. Copilot és un gran exemple d'això. Hi ha una gran quantitat de tasques de generació de codi que es poden realitzar amb prompts intel·ligents. Vegem alguns exemples a continuació.
|
||||
|
||||
En primer lloc, provem un programa senzill que saluda l'usuari.
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
/*
|
||||
Preguntar a l'usuari pel seu nom i dir "Hola"
|
||||
*/
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
let nom = prompt("Com et dius?");
|
||||
console.log(`Hola, ${nom}!`);
|
||||
```
|
||||
|
||||
Podeu veure que ni tan sols vam haver d'especificar el llenguatge a usar.
|
||||
|
||||
Canviem una mica de nivell. Vull mostrar-vos com de potents poden ser els LLMs amb una mica més d'esforç en el disseny dels prompts.
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
"""
|
||||
Taula departaments, columnes = [DepartmentId, DepartmentName]
|
||||
Taula estudiants, columnes = [DepartmentId, StudentId, StudentName]
|
||||
Crea una consulta MySQL per a tots els estudiants del Departament d'Informàtica.
|
||||
"""
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
SELECT StudentId, StudentName
|
||||
FROM students
|
||||
WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = 'Informàtica');
|
||||
```
|
||||
|
||||
Això és molt impressionant. En aquest cas, vam proporcionar dades sobre l'esquema de la base de dades i li vam demanar que generés una consulta MySQL vàlida.
|
||||
|
||||
---
|
||||
|
||||
## Raonament
|
||||
Potser una de les tasques més difícils per a un LLM avui en dia és la que requereix alguna forma de raciocini. El raciocini és una de les àrees que m'entusiasma més a causa dels tipus d'aplicacions complexes que poden sorgir dels LLM.
|
||||
|
||||
S'han produït algunes millores en les tasques que involucren capacitats matemàtiques. Tanmateix, és important destacar que els LLM actuals tenen dificultats per realitzar tasques de raonament, la qual cosa requereix tècniques de prompt engineering encara més avançades. Cobrirem aquestes tècniques avançades en la propera guia. Per ara, cobrirem alguns exemples bàsics per mostrar les capacitats aritmètiques.
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Quin és el resultat de 9.000 * 9.000?
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
81.000.000
|
||||
```
|
||||
|
||||
Provem alguna cosa més difícil.
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Els números imparells d'aquest grup sumen un número parell: 15, 32, 5, 13, 82, 7, 1.
|
||||
|
||||
A:
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
No, els números imparells d'aquest grup sumen un número senar: 119.
|
||||
```
|
||||
|
||||
Això és incorrecte! Intentem millorar-ho millorant el prompt.
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Els números imparells d'aquest grup sumen un número parell: 15, 32, 5, 13, 82, 7, 1.
|
||||
|
||||
Resoleu-lo dividint el problema en etapes. Primer, identifiqueu els números imparells, sumeu-los i indiqueu si el resultat és parell o senar.
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
Nombres imparells: 15, 5, 13, 7, 1
|
||||
Suma: 41
|
||||
41 és un número senar.
|
||||
```
|
||||
|
||||
Molt millor, oi? Això sí, he provat això un parell de vegades i el sistema a vegades falla. Si proporcioneu instruccions millors combinades amb exemples, potser ajudaria a obtenir resultats més precisos.
|
||||
|
||||
Continuarem incluint més exemples d'aplicacions comunes en aquesta secció de la guia.
|
||||
|
||||
En la propera secció, cobrirem conceptes de prompt engineering encara més avançats i tècniques per millorar el rendiment en totes aquestes tasques i altres més difícils.
|
@ -0,0 +1,11 @@
|
||||
# Configuració del LLM
|
||||
|
||||
Quan treballeu amb prompts, interactueu amb el LLM a través d'una API o directament. Podeu configurar alguns paràmetres per obtenir diferents resultats per als vostres prompts.
|
||||
|
||||
**Temperatura** - En resum, com més baixa sigui la `temperatura`, més deterministes seran els resultats en el sentit que sempre es triarà el token següent més probable. Augmentar la temperatura pot conduir a més aleatorietat, el que fomenta resultats més diversos o creatius. Bàsicament, esteu augmentant els pesos dels altres tokens possibles. Pel que fa a l'aplicació, podeu usar un valor de temperatura més baix per a tasques com la QA basada en fets per fomentar respostes més concises i factuals. Per a la generació de poemes o altres tasques creatives, podria ser beneficiós augmentar el valor de la temperatura.
|
||||
|
||||
**Top_p** - De manera similar, amb `top_p`, una tècnica d'extracció de mostres amb temperatura anomenada nucleus sampling, podeu controlar quan determinista és el model en generar una resposta. Si busqueu respostes exactes i factuals, mantingueu-ho baix. Si busqueu respostes més diverses, augmenteu-lo a un valor més alt.
|
||||
|
||||
La recomanació general és modificar només un paràmetre, no tots dos.
|
||||
|
||||
Abans de començar amb alguns exemples bàsics, tingueu en compte que els vostres resultats poden variar en funció de la versió del LLM que utilitzeu.
|
@ -0,0 +1,106 @@
|
||||
### Consells generals per dissenyar prompts
|
||||
|
||||
Aquí teniu alguns consells a tenir en compte mentre dissenyeu els vostres prompts:
|
||||
|
||||
### Comenceu amb coses senzilles
|
||||
En començar a dissenyar prompts, heu de tenir en compte que és un procés iteratiu que requereix molta experimentació per obtenir resultats òptims. Utilitzar un terreny de joc senzill d'OpenAI o Cohere és un bon punt de partida.
|
||||
|
||||
Podeu començar amb prompts senzills i anar afegint més elements i context a mesura que busqueu resultats millors. La iteració del vostre prompt és vital per aquesta raó. A mesura que llegiu la guia, veureu molts exemples on la especificitat, la simplicitat i la concisió us donaran sovint millors resultats.
|
||||
|
||||
Quan teniu una tasca gran que implica moltes subtasques diferents, podeu intentar descompondre la tasca en subtasques més senzilles i anar construint a mesura que obteniu resultats millors. Això evita afegir massa complexitat al procés de disseny de prompts al principi.
|
||||
|
||||
### La instrucció
|
||||
Podeu dissenyar prompts efectius per a diferents tasques senzilles utilitzant ordres per indicar al model què voleu aconseguir, com ara "Escriviu", "Classifiqueu", "Resumiu", "Traduïu", "Ordeneu", etc.
|
||||
|
||||
Tingueu en compte que també heu de fer moltes proves per veure què funciona millor. Proveu diferents instruccions amb diferents paraules clau, contextos i dades i vegeu què funciona millor per al vostre cas d'ús i tasca en particular. Normalment, com més específic i rellevant sigui el context per a la tasca que esteu intentant realitzar, millor. Parlar de la importància de la selecció i afegir més context en les guies que vindran.
|
||||
|
||||
Altres recomanen que col·loqueu les instruccions al principi del prompt. Una altra recomanació és utilitzar algun separador clar com "###" per separar la instrucció i el context.
|
||||
|
||||
Per exemple:
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
### Instrucció ###
|
||||
Traduïu el text següent a l'espanyol:
|
||||
|
||||
Text: "hola!"
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
¡Hola!
|
||||
```
|
||||
|
||||
### Especificitat
|
||||
Sigues molt específic sobre la instrucció i la tasca que vols que el model realitzi. Com més descriptiu i detallat sigui el prompt, millors seran els resultats. Això és particularment important quan teniu un resultat o estil de generació desitjat que esteu cercant. No hi ha tokens o paraules clau específiques que portin a millors resultats. És més important tenir un bon format i prompt descriptiu. De fet, proporcionar exemples al prompt és molt eficaç per obtenir sortida desitjada en formats específics.
|
||||
|
||||
En dissenyar prompts, també haureu de tenir en compte la longitud del prompt, ja que hi ha limitacions pel que fa a la quantitat de text que podeu proporcionar. Penseu en què tan específic i detallat heu de ser. Incloent massa detalls innecessaris no és necessàriament una bona aproximació. Els detalls haurien de ser rellevants i contribuir a la tasca en qüestió. Això és alguna cosa amb el qual haureu de fer moltes proves. Us animem a experimentar i iterar molt per optimitzar els prompts per a les vostres aplicacions.
|
||||
|
||||
Com a exemple, provem un prompt senzill per extreure informació específica d'un fragment de text.
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
Extreu el nom dels llocs en el següent text.
|
||||
|
||||
Format desitjat:
|
||||
Lloc: <llista_separada_per_comes_de_noms_de_companies>
|
||||
|
||||
Entrada: "Although these developments are encouraging to researchers, much is still a mystery. “We often have a black box between the brain and the effect we see in the periphery,” says Henrique Veiga-Fernandes, a neuroimmunologist at the Champalimaud Centre for the Unknown in Lisbon. “If we want to use it in the therapeutic context, we actually need to understand the mechanism.""
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
Lloc: Champalimaud Centre for the Unknown, Lisboa
|
||||
```
|
||||
|
||||
El text d'entrada s'ha obtingut d'aquest [article de Nature](https://www.nature.com/articles/d41586-023-00509-z).
|
||||
|
||||
### Eviteu la imprecisió
|
||||
|
||||
Donats els consells anteriors sobre ser detallat i millorar el format, és fàcil caure en la trampa de voler ser massa enginyós amb els prompts i potencialment crear descripcions imprecises. Sovint és millor ser específic i directe. L'analogia aquí és molt similar a la comunicació efectiva: com més directa, més efectiva serà la transmissió del missatge.
|
||||
|
||||
Per exemple, potser esteu interessat a aprendre el concepte d'enginyeria de prompts. Podríeu provar alguna cosa com:
|
||||
|
||||
```
|
||||
Explica el concepte d'enginyeria de prompts. Mantingueu l'explicació breu, només unes quantes frases, i no siguis massa descriptiu.
|
||||
```
|
||||
|
||||
No és clar des del prompt anterior quantes frases s'han d'utilitzar i quin estil. Podreu obtenir respostes prou bones amb els prompts anteriors, però el millor prompt seria aquell que és molt específic, concís i directe. Alguna cosa com:
|
||||
|
||||
```
|
||||
Utilitzeu 2-3 frases per explicar el concepte d'enginyeria de prompts a un estudiant de secundària.
|
||||
```
|
||||
|
||||
### Fer o no fer?
|
||||
Un altre consell comú en el disseny de prompts és evitar dir el que no s'ha de fer, sinó dir el que s'ha de fer en lloc d'això. Això fomenta més especificitat i es centra en els detalls que porten a bones respostes del model.
|
||||
|
||||
Aquí teniu un exemple d'un xatbot de recomanació de pel·lícules que falla exactament en el que no vull que faci a causa de com vaig escriure la instrucció, centrant-se en el que no s'ha de fer.
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
El següent és un agent que recomana pel·lícules a un client. NO DEMANI INTERESSOS. NO DEMANI INFORMACIÓ PERSONAL.
|
||||
|
||||
Client: Si us plau, recomaneu-me una pel·lícula basada en els meus interessos.
|
||||
Agent:
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
Clar, puc recomanar una pel·lícula basada en els teus interessos. Quin tipus de pel·lícula t'agradaria veure? Prefereixes acció, comèdia, romance o alguna cosa diferent?
|
||||
```
|
||||
|
||||
Aquí teniu un prompt millor:
|
||||
|
||||
*Prompt:*
|
||||
```
|
||||
El següent és un agent que recomana pel·lícules a un client. L'agent és responsable de recomanar una pel·lícula a partir de les pel·lícules més populars en tendència a nivell mundial. Ha d'abstenir-se de preguntar als usuaris sobre les seves preferències i evitar demanar informació personal. Si l'agent no té cap pel·lícula per recomanar, hauria de respondre "Ho sento, no he pogut trobar cap pel·lícula per recomanar avui".
|
||||
|
||||
Client: Si us plau, recomaneu-me una pel·lícula basada en els meus interessos.
|
||||
Agent:
|
||||
```
|
||||
|
||||
*Output:*
|
||||
```
|
||||
Ho sent, no tinc cap informació sobre els teus interessos. No obstant, aquí tens una llista de les pel·lícules més populars en tendència a nivell mundial ara mateix: [llista de pel·lícules]. Espero que trobis alguna cosa que t'agradi!```
|
||||
|
||||
Alguns dels exemples anteriors s'han adoptat de l'article ["Best practices for prompt engineering with OpenAI API"](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api).
|
Loading…
Reference in New Issue