nettaredam commited on
Commit
190317e
·
verified ·
1 Parent(s): 40fb0b0

Create appy.pi

Browse files
Files changed (1) hide show
  1. appy.pi +92 -0
appy.pi ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import re
3
+
4
+ st.set_page_config(page_title="Prompt Coach", layout="wide")
5
+
6
+ st.title("🧠 Prompt Coach – Scrivi prompt migliori, capendo come si costruiscono")
7
+
8
+ st.markdown("Crea prompt efficaci e coerenti per AI come ChatGPT, Claude, Gemini... anche se non sei un tecnico.")
9
+
10
+ # 📘 GUIDA ESPANDIBILE
11
+ with st.expander("📘 Le 6 regole fondamentali del prompting"):
12
+ st.markdown("""
13
+ 1. **RUOLO** – Chi è il modello? (es. “Agisci come un esperto HR”)
14
+ 2. **TONO / STILE** – Qual è il tono più adatto? (professionale, informale…)
15
+ 3. **OUTPUT ATTESO** – Cosa deve produrre? (articolo, lista, email…)
16
+ 4. **VINCOLI** – Keyword, lunghezza, struttura, ecc.
17
+ 5. **CONTESTO** – Per chi e dove verrà usato?
18
+ 6. **RESPONSABILITÀ** – Qual è lo scopo finale? (informare, convincere, generare azione)
19
+ """)
20
+
21
+ # LAYOUT A COLONNE
22
+ col1, col2 = st.columns([1.2, 1])
23
+
24
+ with col1:
25
+ st.subheader("✍️ Inserisci il tuo prompt")
26
+ prompt_input = st.text_area("Prompt grezzo", height=200, placeholder="Es: Scrivi un articolo SEO sull'onboarding")
27
+
28
+ with col2:
29
+ st.subheader("🎯 Prompt raffinato + spiegazione")
30
+
31
+ # FUNZIONE PRINCIPALE
32
+ def analizza_e_riscrivi(prompt):
33
+ sezioni = []
34
+ spiegazioni = []
35
+ base = prompt.strip()
36
+
37
+ # REGOLE BASE
38
+ if not re.search(r"agisc[ia] come|sei un|ti comporti come", base.lower()):
39
+ base += " 🟨 **[Aggiunto: Agisci come un esperto di contenuti HR e copywriting SEO.]**"
40
+ spiegazioni.append("🟨 RUOLO mancante: specificare chi è il modello aiuta il comportamento.")
41
+
42
+ if "tono" not in base.lower():
43
+ base += " 🟨 **[Aggiunto: Usa un tono professionale e accessibile per un pubblico HR.]**"
44
+ spiegazioni.append("🟨 TONO assente: guida lo stile del testo.")
45
+
46
+ if not any(x in base.lower() for x in ["scrivi", "genera", "crea", "elabora"]):
47
+ base += " 🟨 **[Aggiunto: Genera un contenuto strutturato (es. articolo con H2 e bullet).]**"
48
+ spiegazioni.append("🟨 OUTPUT ATTESO non chiaro: cosa deve produrre esattamente?")
49
+
50
+ if "parola chiave" not in base.lower() and "keyword" not in base.lower():
51
+ base += " 🟨 **[Aggiunto: Includi la parola chiave 'digitalizzazione HR'.]**"
52
+ spiegazioni.append("🟨 VINCOLI mancanti: definire keyword guida la direzione del testo.")
53
+
54
+ if "pubblico" not in base.lower() and "target" not in base.lower():
55
+ base += " 🟨 **[Aggiunto: Il pubblico target è un HR manager di PMI italiane.]**"
56
+ spiegazioni.append("🟨 CONTESTO assente: importante per tono e contenuto.")
57
+
58
+ if not any(x in base.lower() for x in ["obiettivo", "scopo", "serve a"]):
59
+ base += " 🟨 **[Aggiunto: L'obiettivo è informare e invogliare alla prova gratuita di Fluida.]**"
60
+ spiegazioni.append("🟨 RESPONSABILITÀ mancante: chiarire lo scopo aiuta la struttura e l’intento.")
61
+
62
+ # CONTRASTI REALI
63
+ contraddizioni = []
64
+
65
+ if "in inglese" in base.lower() and ("PMI italiane" in base.lower() or "pubblico italiano" in base.lower()):
66
+ base += "\n\n🟥 **[CONTRASTO: Il prompt è in inglese ma il target è italiano. AUT AUT → (1) usare inglese o (2) passare all'italiano?]**"
67
+ contraddizioni.append("🟥 Lingua e pubblico non allineati: per PMI italiane è più efficace usare l’italiano.")
68
+
69
+ if "tono informale" in base.lower() and ("presentazione aziendale" in base.lower() or "documento ufficiale" in base.lower()):
70
+ base += "\n\n🟥 **[CONTRASTO: Tono informale per un contesto istituzionale. AUT AUT → (1) mantenere informale o (2) passare a tono formale?]**"
71
+ contraddizioni.append("🟥 Tono troppo leggero per un uso formale. Rivedere il registro.")
72
+
73
+ if "convincere il lettore" in base.lower() and ("elenco" in base.lower() or "lista" in base.lower()):
74
+ base += "\n\n🟥 **[CONTRASTO: Elenco poco adatto per persuadere. AUT AUT → (1) lascia elenco o (2) passa a forma argomentativa?]**"
75
+ contraddizioni.append("🟥 Elenco è utile per chiarezza, ma poco efficace per convincere. Scegli il formato giusto.")
76
+
77
+ # Spiegazioni
78
+ sezioni.append("### ✅ Prompt raffinato:")
79
+ sezioni.append(base)
80
+ sezioni.append("---\n### 📚 Spiegazione didattica:")
81
+ for s in spiegazioni + contraddizioni:
82
+ sezioni.append(f"- {s}")
83
+
84
+ return "\n\n".join(sezioni)
85
+
86
+ # OUTPUT
87
+ if st.button("🧠 Analizza il prompt"):
88
+ if prompt_input.strip():
89
+ risultato = analizza_e_riscrivi(prompt_input)
90
+ st.markdown(risultato)
91
+ else:
92
+ st.warning("⚠️ Inserisci prima un prompt da analizzare.")