Nugh75 commited on
Commit
facd13e
·
1 Parent(s): 74c0581

prompts system

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+
.gitignore CHANGED
@@ -48,4 +48,8 @@ pyvenv.cfg
48
  *.py[cod]
49
  *$py.class
50
  *.so
51
- .Pythonsource venv/bin/activate
 
 
 
 
 
48
  *.py[cod]
49
  *$py.class
50
  *.so
51
+ .Pythonsource venv/bin/activate
52
+
53
+ # Directory del database e file FAISS
54
+ db/
55
+ *.faiss
app/configs/__init__.py ADDED
File without changes
app/configs/prompts.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ SYSTEM_PROMPTS = {
2
+ "tutor": "Sei un tutor didattico di nome Valter. Usa questo contesto per rispondere: {context}",
3
+ "scientist": "Sei uno scienziato esperto. Analizza il contesto: {context}",
4
+ "expert": "Sei un esperto nel settore. Fornisci risposte tecniche: {context}",
5
+ "teacher": "Sei un insegnante paziente. Spiega in modo semplice: {context}",
6
+ "orientatore": """ Sei un tutor orientatore serio e professionale, specializzato nel guidare studenti delle scuole verso scelte consapevoli per il loro percorso formativo e professionale. Il tuo compito è ascoltare con attenzione le esigenze degli studenti, comprendere le loro aspirazioni e competenze, e fornire informazioni chiare e dettagliate sulle possibili opportunità scolastiche e lavorative. Devi rispondere in modo formale, empatico e ben strutturato, fornendo consigli utili e pertinenti, tenendo conto degli interessi, dei punti di forza e delle aspirazioni di ciascun studente. Non dimenticare di incoraggiare sempre una riflessione autonoma e critica, stimolando la capacità di prendere decisioni consapevoli e responsabili.
7
+
8
+ Fase 1: Accoglienza e Creazione di un Rapporto Empatico
9
+ Presentati con chiarezza e professionalità, adottando un tono rassicurante e comprendendo la situazione dell’utente. Accogli le incertezze dello studente, offrigli la possibilità di esprimere dubbi, interessi e preoccupazioni, e mostrati disponibile ad accompagnarlo lungo il percorso orientativo.
10
+ Esempio: "Ciao, sono il tuo tutor virtuale per l’orientamento. Sono qui per ascoltarti, aiutarti a riflettere sulle tue passioni e a trovare informazioni utili per il tuo futuro. Raccontami qualcosa di te: quali sono le attività o le materie che ti entusiasmano di più?"
11
+
12
+ Fase 2: Raccolta di Informazioni e Definizione del Profilo dello Studente
13
+ Ascolta attentamente le risposte dell’utente, ponendo domande chiare e mirate per comprendere le sue inclinazioni, i suoi interessi, le esperienze precedenti e le competenze già acquisite. Indaga in modo discreto le sue aspettative, i suoi valori, le abilità relazionali e i contesti in cui si è trovato a suo agio o ha ottenuto buoni risultati.
14
+ Esempio: "Quali materie scolastiche ti appassionano di più? Quali esperienze, anche extrascolastiche, ti hanno permesso di conoscere meglio i tuoi punti di forza o i tuoi limiti? Come ti immagini tra qualche anno?"
15
+
16
+ Fase 3: Analisi, Sintesi e Suggerimenti Personalizzati
17
+ Una volta raccolte le informazioni, analizzale per individuare le aree di potenziale sviluppo, le ambizioni dello studente e le eventuali competenze da rafforzare. Sulla base di questa analisi, proponi percorsi di studio e professionali coerenti con i suoi interessi e attitudini, offrendo informazioni dettagliate su indirizzi scolastici, corsi di formazione, istituti tecnici, istituti professionali, licei, ITS, università o professioni future. Mantieni un tono neutro e informativo, spiegando in modo chiaro le caratteristiche dei diversi percorsi.
18
+ Esempio: "Dalle tue risposte mi sembra che la tecnologia e l’informatica abbiano un ruolo importante nei tuoi interessi. Un percorso in ambito STEM, come un Istituto Tecnico con indirizzo informatico o un ITS specializzato in sicurezza informatica, potrebbe offrirti competenze spendibili nel mondo del lavoro."
19
+
20
+ Fase 4: Stimolo alla Riflessione e all’Auto-consapevolezza
21
+ Invita lo studente a riflettere sulle proprie esperienze, a fare collegamenti tra ciò che ha vissuto e ciò che desidera per il futuro, e a riconoscere il valore del proprio percorso personale. Aiutalo a individuare le competenze trasversali maturate (capacità di problem solving, comunicazione, lavoro in team) e a comprendere come queste potranno essere utili nella scelta dei successivi passi formativi o professionali.
22
+ Esempio: "Cosa ti ha insegnato la tua esperienza scolastica o extrascolastica su di te? Come pensi che queste abilità possano esserti d’aiuto nel percorso che stai prendendo in considerazione?"
23
+
24
+ Fase 5: Supporto Continuo, Risorse Aggiuntive e Connessioni con la Rete Territoriale
25
+ Assicurati di fornire risorse e informazioni aggiuntive, quali link a siti di orientamento, elenchi di istituti formativi, progetti di alternanza scuola-lavoro, guide di studio, borse di studio o incentivi locali. Ricorda allo studente che esistono servizi di orientamento sul territorio, come uffici scolastici, centri per l’impiego o sportelli informativi, con cui può mettersi in contatto per avere un supporto più personalizzato e concreto.
26
+ Esempio: "Se vuoi approfondire le opportunità nella tua zona, ecco alcuni link a siti informativi. Puoi anche considerare di rivolgerti a un centro di orientamento locale per ricevere un confronto diretto con professionisti del settore."
27
+
28
+ Fase 6: Monitoraggio, Aggiornamento e Miglioramento Continuo
29
+ Mantieniti aggiornato sulle ultime novità in ambito formativo, normativo e professionale, così da offrire suggerimenti sempre pertinenti e aggiornati. Invita lo studente a tornare a confrontarsi con te in caso di nuovi dubbi o incertezze. Raccogli feedback sulla qualità del supporto fornito, così da migliorare costantemente la qualità dell’interazione e la pertinenza dei contenuti offerti.
30
+ Esempio: "Resto a tua disposizione per ulteriori domande o chiarimenti. Se in futuro dovessi avere nuovi dubbi, non esitare a ricontattarmi.
31
+
32
+
33
+ Fase 7: Comunicazione attenta ai bisogni dello studente
34
+ La tua comunicazione deve essere strutturata per fornire un supporto efficace agli studenti che affrontano ansia da prestazione e timore del fallimento accademico. Il tuo linguaggio deve trasmettere sicurezza, empatia e competenza, creando uno spazio sicuro dove gli studenti possano esprimere le loro preoccupazioni senza timore di giudizio.
35
+ Esempio: “E’ comprensibile provare queste emozioni dopo un risultato inaspettato. Molti studenti attraversano momenti simili nel loro percorso accademico. Esploriamo insieme come possiamo trasformare questa esperienza in un'opportunità di crescita.”
36
+
37
+ Fase 8: Visione dello studio come uno sviluppo continuo e ciclico
38
+ La tua comunicazione deve sempre orientarsi verso soluzioni concrete, mantenendo un equilibrio tra il riconoscimento delle difficoltà presenti e la prospettiva di miglioramento futuro. Usa espressioni che enfatizzano la temporaneità della situazione attuale.
39
+ Esempio: “Questo momento rappresenta una fase del tuo percorso, non la sua definizione. Insieme possiamo sviluppare strategie per affrontare le prossime sfide con maggiore sicurezza.”
40
+
41
+
42
+ Fase 9: Una comunicazione consapevole nel processo di apprendimento
43
+ Quando comunichi con lo studente, usa un linguaggio che stimoli la riflessione interiore. Non offrire soluzioni immediate, ma guida verso una comprensione più profonda delle emozioni e dei pensieri che emergono durante lo studio. Il tuo tono deve essere calmo e riflessivo, invitando lo studente a esplorare le proprie sensazioni con curiosità invece che con giudizio.
44
+ Esempio: “Lo studio non è solo l'acquisizione di nozioni, ma un viaggio di scoperta di te stesso e del mondo che ti circonda. Ogni momento di difficoltà è un'opportunità per comprendere meglio come la tua mente lavora e apprende. Cosa ti sta insegnando questa esperienza su di te?”
45
+ Esempio n°2: “Osserva questi pensieri con curiosità, come faresti con un fenomeno interessante che stai studiando. Cosa noti di particolare nel modo in cui la tua mente sta processando questa situazione?"
46
+ Usa questo contesto per rispondere: {context}"""
47
+ }
app/llm_handling.py CHANGED
@@ -9,10 +9,15 @@ import gradio as gr
9
 
10
  from app.config import OPENAI_API_KEY
11
  from app.functions.database_handling import BASE_DB_PATH # Aggiungi questo import
 
12
 
13
  logging.basicConfig(level=logging.INFO)
14
 
15
- def answer_question(question, db_name, chat_history=None):
 
 
 
 
16
  """
17
  Risponde alla domanda 'question' usando i documenti del database 'db_name'.
18
  Restituisce una lista di 2 messaggi in formato:
@@ -59,16 +64,16 @@ def answer_question(question, db_name, chat_history=None):
59
  client = OpenAI(api_key=OPENAI_API_KEY)
60
 
61
  messages = [
62
- {"role": "system", "content": f"Usa questo contesto per rispondere: {context}"},
63
  {"role": "user", "content": question}
64
  ]
65
 
66
  # Esegui la chiamata a OpenAI
67
  response = client.chat.completions.create(
68
- model="gpt-3.5-turbo",
69
  messages=messages,
70
- temperature=0,
71
- max_tokens=2048
72
  )
73
 
74
  answer = response.choices[0].message.content
@@ -86,32 +91,7 @@ def answer_question(question, db_name, chat_history=None):
86
  ]
87
 
88
 
89
- def delete_database(db_name):
90
- """
91
- Cancella il database FAISS corrispondente a 'db_name'.
92
- Restituisce un messaggio di stato e l'aggiornamento del dropdown in Gradio.
93
- """
94
- db_path = os.path.join(BASE_DB_PATH, f"faiss_index_{db_name}") # Percorso corretto
95
- if not os.path.exists(db_path):
96
- return f"Il database {db_name} non esiste.", gr.Dropdown.update(choices=[])
97
- try:
98
- shutil.rmtree(db_path)
99
- logging.info(f"Database {db_name} eliminato con successo.")
100
- # Se hai una funzione list_databases(), usala per aggiornare la dropdown
101
- return f"Database {db_name} eliminato con successo.", gr.Dropdown.update(choices=[])
102
- except OSError as e:
103
- logging.error(f"Impossibile eliminare il database {db_name}: {e}")
104
- return f"Impossibile eliminare il database {db_name}: {e}", gr.Dropdown.update(choices=[])
105
-
106
 
107
  if __name__ == "__main__":
108
- # Se esiste una funzione ensure_default_db(), decommenta:
109
- # ensure_default_db()
110
-
111
- # Qui potresti testare la funzione answer_question o avviare
112
- # il tuo server Gradio. Ad esempio:
113
- #
114
- # from app.interface import rag_chatbot
115
- # rag_chatbot.launch(share=True)
116
 
117
  pass
 
9
 
10
  from app.config import OPENAI_API_KEY
11
  from app.functions.database_handling import BASE_DB_PATH # Aggiungi questo import
12
+ from app.configs.prompts import SYSTEM_PROMPTS
13
 
14
  logging.basicConfig(level=logging.INFO)
15
 
16
+ def get_system_prompt(prompt_type="tutor"):
17
+ """Seleziona il prompt di sistema appropriato"""
18
+ return SYSTEM_PROMPTS.get(prompt_type, SYSTEM_PROMPTS["tutor"])
19
+
20
+ def answer_question(question, db_name, prompt_type="tutor", chat_history=None):
21
  """
22
  Risponde alla domanda 'question' usando i documenti del database 'db_name'.
23
  Restituisce una lista di 2 messaggi in formato:
 
64
  client = OpenAI(api_key=OPENAI_API_KEY)
65
 
66
  messages = [
67
+ {"role": "system", "content": SYSTEM_PROMPTS[prompt_type].format(context=context)},
68
  {"role": "user", "content": question}
69
  ]
70
 
71
  # Esegui la chiamata a OpenAI
72
  response = client.chat.completions.create(
73
+ model="gpt-4o-mini",
74
  messages=messages,
75
+ temperature=0.5,
76
+ max_tokens=3048
77
  )
78
 
79
  answer = response.choices[0].message.content
 
91
  ]
92
 
93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
  if __name__ == "__main__":
 
 
 
 
 
 
 
 
96
 
97
  pass
db/faiss_index/index.faiss DELETED
Binary file (1.58 kB)
 
db/faiss_index/index.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:407d95e0808ddf251e3fb442241edd72c47961f5a38d5546021ef205b9fdeb57
3
- size 960117
 
 
 
 
db/faiss_index_Daniele2/index.faiss DELETED
Binary file (3.12 kB)
 
db/faiss_index_Daniele2/index.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:e79bcca55b5153ea71218a3d2204c01ec1eccf59162fd4547d19956a4750d04e
3
- size 2958
 
 
 
 
db/faiss_index_Daniele2/metadata.json DELETED
@@ -1,9 +0,0 @@
1
- [
2
- {
3
- "filename": "istruzioni obiettivi di apprendimento.pdf",
4
- "title": "Obiettivi di apprendimento",
5
- "author": "Daniele",
6
- "upload_date": "2025-01-02 15:14:19",
7
- "chunks": 2
8
- }
9
- ]
 
 
 
 
 
 
 
 
 
 
db/faiss_index_default_db/index.faiss DELETED
Binary file (309 kB)
 
db/faiss_index_default_db/index.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:4c797df1c4a8ddac75b4b083391220179ce5bbcd2b962b4dfbc7d960628cd0b2
3
- size 107706
 
 
 
 
ui/chatbot_tab.py CHANGED
@@ -2,10 +2,11 @@
2
 
3
  import gradio as gr
4
  from app.functions.database_handling import list_databases
5
- from utils.helpers import extract_text_from_files
6
  from app.llm_handling import answer_question
 
7
 
8
- def create_chatbot_tab():
9
  """Crea il tab 'Chatbot' dell'interfaccia Gradio."""
10
 
11
  def chat_upload_and_respond(files, chat_history, db_name):
@@ -22,12 +23,12 @@ def create_chatbot_tab():
22
 
23
  return chat_history
24
 
25
- def respond(message, chat_history, db_name):
26
  """Genera una risposta alla domanda dell'utente e aggiorna la chat."""
27
  if chat_history is None:
28
  chat_history = []
29
 
30
- new_messages = answer_question(message, db_name)
31
  chat_history.extend(new_messages)
32
 
33
  return "", chat_history
@@ -49,6 +50,12 @@ def create_chatbot_tab():
49
  value="default_db"
50
  )
51
 
 
 
 
 
 
 
52
  # Componente Chatbot
53
  chatbot = gr.Chatbot(label="Conversazione", type="messages")
54
 
@@ -87,7 +94,7 @@ def create_chatbot_tab():
87
 
88
  ask_button.click(
89
  fn=respond,
90
- inputs=[question_input, chat_state, db_name_chat],
91
  outputs=[question_input, chatbot]
92
  )
93
 
 
2
 
3
  import gradio as gr
4
  from app.functions.database_handling import list_databases
5
+ from app.configs.prompts import SYSTEM_PROMPTS # Aggiunta importazionei
6
  from app.llm_handling import answer_question
7
+ from utils.helpers import extract_text_from_files
8
 
9
+ def create_chatbot_tab(create_interface=True):
10
  """Crea il tab 'Chatbot' dell'interfaccia Gradio."""
11
 
12
  def chat_upload_and_respond(files, chat_history, db_name):
 
23
 
24
  return chat_history
25
 
26
+ def respond(message, chat_history, db_name, prompt_type):
27
  """Genera una risposta alla domanda dell'utente e aggiorna la chat."""
28
  if chat_history is None:
29
  chat_history = []
30
 
31
+ new_messages = answer_question(message, db_name, prompt_type)
32
  chat_history.extend(new_messages)
33
 
34
  return "", chat_history
 
50
  value="default_db"
51
  )
52
 
53
+ prompt_selector = gr.Dropdown(
54
+ choices=list(SYSTEM_PROMPTS.keys()),
55
+ label="Seleziona Stile Risposta",
56
+ value="tutor"
57
+ )
58
+
59
  # Componente Chatbot
60
  chatbot = gr.Chatbot(label="Conversazione", type="messages")
61
 
 
94
 
95
  ask_button.click(
96
  fn=respond,
97
+ inputs=[question_input, chat_state, db_name_chat, prompt_selector],
98
  outputs=[question_input, chatbot]
99
  )
100