pithh
← Torna a pithh

Ogni prompt ha due versioni migliori

Una più snella e una più dettagliata. Ecco come le calcoliamo entrambe.

La maggior parte dei contatori di token si ferma al numero. pithh va oltre: nel momento in cui vedi il costo, vedi anche due riscritture del tuo prompt — Lean, che dice la stessa cosa con meno token, ed Extended, che investe più token in una struttura che un modello può effettivamente sfruttare. Entrambe sono deterministiche, senza campionamento e senza prompt nascosti: Extended viene eseguita interamente nel tuo browser, mentre Lean esegue lì due delle sue tre fasi, con la terza valutata da un piccolo modello linguistico che ospitiamo noi stessi — mai un servizio di riscrittura a pagamento.

Questo vincolo ha plasmato l'intero design: invece di chiedere a un modello di grandi dimensioni di riscrivere il tuo prompt (il che costa denaro ed è una scatola nera), abbiamo costruito due pipeline piccole e deterministiche basate direttamente su ricerche pubblicate in materia di compressione dei prompt e prompt engineering. Qui non c'è nulla di segreto o magico — ogni tecnica è citata qui sotto.

Motore Lean

Tre fasi, in ordine

Ogni fase elimina un diverso tipo di ridondanza. Vengono eseguite in sequenza, e ciascuna è progettata per essere prudente — preferiamo comprimere troppo poco piuttosto che restituire una frase che non ha più senso compiuto.

  1. Potatura cooperativa. Il Principio di Cooperazione di Grice afferma che un parlante non dovrebbe dire più di quanto lo scambio richieda — la Massima di Quantità [1]. Espressioni di cortesia e attenuazioni ("se possibile", "vorrei che tu", "gentilmente") trasmettono un'attenuazione sociale, non un'istruzione — a un modello non serve essere chiesto con garbo. Questa fase rimuove un elenco curato di queste espressioni.
  2. Riduzione della ridondanza. Le persone spesso ripetono la stessa richiesta in due frasi per enfasi. Suddividiamo il prompt in frasi e le confrontiamo con lo stesso segnale che LexRank [2] usa per classificare l'importanza delle frasi: la similarità del coseno tra vettori di frequenza dei termini. Quando due frasi si sovrappongono molto, manteniamo solo quella più informativa.
  3. Potatura per auto-informazione. LLMLingua [3] e Selective Context [4] comprimono i prompt eseguendo un piccolo modello linguistico causale sul testo ed eliminando i token che risultano più prevedibili — la minore auto-informazione, in senso teorico-informativo. Eseguiamo esattamente il modello leggero che il paper di LLMLingua stesso convalida per questo scopo — GPT2-small — sul nostro server, e valutiamo ogni parola in base a quanti bit di auto-informazione porta rispetto a ciò che la precede. L'output di LLMLingua viene letto da un altro modello, quindi può potare in modo aggressivo; il nostro viene mostrato a te, quindi lo limitiamo a circa il 12% delle parole con punteggio più basso e non tocchiamo mai la prima o l'ultima parola di una frase, mantenendo il risultato leggibile invece che telegrafico.

Il conteggio dei token che vedi per la versione Lean non è una stima del risparmio — è la stessa chiamata reale al tokenizzatore usata per il prompt originale, quindi la differenza è misurata, non stimata.

Motore Extended

Classifica, poi applica il pattern giusto

Un wrapper generico del tipo "agisci come un esperto e pensa con attenzione" aiuta un po', sempre. Un wrapper scelto in base a ciò che il tuo prompt sta effettivamente chiedendo aiuta molto di più. Per questo il motore Extended legge il tuo prompt, ne intuisce il tipo di compito da pattern superficiali — codice, scrittura creativa, ragionamento/analisi o generico — e inserisce solo i pattern adatti, tratti dal Prompt Pattern Catalog [6]:

  • Un pattern di persona adatto al compito (un ingegnere senior per il codice, un esperto di dominio per l'analisi, uno scrittore per il lavoro creativo) invece di un ruolo uguale per tutti.
  • Un pattern di formato dell'output che indica al modello come strutturare la risposta per quel tipo di compito.
  • Per i prompt che classifichiamo come ragionamento o analisi, un esplicito innesco di chain-of-thought — "pensa passo dopo passo prima di rispondere". Kojima et al. hanno dimostrato che questa singola riga, aggiunta a un prompt zero-shot, migliora in modo misurabile l'accuratezza del ragionamento senza alcun esempio svolto [7], basandosi sulla precedente scoperta di Wei et al. secondo cui esplicitare i passaggi intermedi è comunque utile [8]. Lo aggiungiamo solo dove il compito ne trae beneficio — un prompt di scrittura creativa non ne ha bisogno.

L'ultimo passaggio è la formattazione consapevole del modello: cambia il modello nel selettore e la struttura stessa del wrapper cambia. Anthropic pubblica indicazioni esplicite secondo cui i modelli Claude rispondono meglio a prompt strutturati con tag XML [9], quindi l'output Extended per un modello Claude viene racchiuso in <role>, <task>, <output_format>. La guida al prompting di OpenAI raccomanda invece intestazioni Markdown [10], quindi ogni altro modello riceve # Role, # Task, # Output format. Cambia il modello nel selettore e la scheda Extended si rigenera nella forma preferita da quel modello — provalo.

Perché questo approccio, e non semplicemente chiamare un LLM

Il modo ovvio per riscrivere un prompt è chiedere a un modello più grande di farlo. Non volevamo che pithh costasse denaro per farti risparmiare denaro, e non volevamo una scatola nera tra te e le tue stesse parole. Ogni fase descritta sopra è una semplice funzione che puoi leggere, rieseguire e da cui ottenere sempre lo stesso risultato — nessuna casualità di campionamento, nessun system prompt nascosto, nessun costo per richiesta. Il compromesso è onesto: un modello di riscrittura ottimizzato probabilmente comprimerebbe in modo più aggressivo ed espanderebbe in modo più intelligente di quanto possano fare regole curate. Quello che ottieni invece è un metodo che puoi verificare completamente, che viene eseguito in millisecondi e che non invia mai il tuo prompt da nessuna parte solo per riformattarlo.

Riferimenti

  1. H.P. Grice (1975). "Logic and Conversation." In Syntax and Semantics, Vol. 3: Speech Acts, Cole & Morgan (eds.).
  2. G. Erkan & D.R. Radev (2004). "LexRank: Graph-based Lexical Centrality as Salience in Text Summarization." Journal of Artificial Intelligence Research, 22, 457–479. Semantic Scholar
  3. H. Jiang, Q. Wu, C.-Y. Lin, Y. Yang, L. Qiu (2023). "LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models." EMNLP 2023. arXiv:2310.05736
  4. Y. Li, B. Dong, F. Guerin, C. Lin (2023). "Compressing Context to Enhance Inference Efficiency of Large Language Models." EMNLP 2023. arXiv:2310.06201
  5. Z. Pan et al. (2024). "LLMLingua-2: Data Distillation for Efficient and Faithful Task-Agnostic Prompt Compression." arXiv:2403.12968
  6. J. White, Q. Fu, S. Hays, M. Sandborn, C. Olea, H. Gilbert, A. Elnashar, J. Spencer-Smith, D.C. Schmidt (2023). "A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT." arXiv:2302.11382
  7. T. Kojima, S.S. Gu, M. Reid, Y. Matsuo, Y. Iwasawa (2022). "Large Language Models are Zero-Shot Reasoners." NeurIPS 2022. arXiv:2205.11916
  8. J. Wei, X. Wang, D. Schuurmans, M. Bosma, B. Ichter, F. Xia, E. Chi, Q. Le, D. Zhou (2022). "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models." NeurIPS 2022. arXiv:2201.11903
  9. Anthropic. "Use XML tags to structure your prompts," Claude Docs — prompt engineering guide. platform.claude.com
  10. OpenAI. "Prompt engineering," OpenAI API guide — Markdown structuring recommendation. developers.openai.com

Ogni tecnica sopra citata è riferita all'idea specifica che ha ispirato, non come affermazione che pithh riproduca l'intero metodo dell'articolo originale — dove abbiamo semplificato qualcosa (usando regole invece di un modello linguistico, similarità a coppie invece della centralità completa del grafo), lo abbiamo segnalato sopra.

pithh · Privacy · Cookie