49
Η get_last_question χρησιμοποιείται για την ανάκτηση της τελευταίας ερώτησης που
έκανε το LLM στο χρήστη πάνω σε κάποια συγκεκριμένη θεματική. Η τιμή του topic ορίζεται
ως παράμετρος “?”, η οποία αντικαθίσταται από το περιεχόμενο του topic.
Η μέθοδος cursor.fetchone() επιστρέφει tuple με τα πεδία id, question και answer στη σειρά αν
βρεθεί εγγραφή (if result) και None σε κάθε πεδίο αν δεν βρεθεί καμία εγγραφή.
def get_last_question(topic):
with sqlite3.connect('topics.db') as conn:
cursor = conn.cursor()
#select the id, question and answer of the last added question for the current topic
cursor.execute('''
SELECT id, question, answer
FROM questions
WHERE id = (SELECT MAX(id) FROM questions WHERE topic = ?)
''', (topic,))
result = cursor.fetchone()
if result:
#return the id, question, and answer
return result[0], result[1], result[2]
#return None,if no question is found
return None, None, None
Η update_user_question_count χρησιμεύει στο συγχρονισμό και την παρακολούθηση των
εναπομείναντων ερωτήσεων που αφορούν τον χρήστη σε συγκεκριμένη θεματική.
Το reduce καθορίζει το αν θα μειωθεί ο αριθμός των ερωτήσεων. Όταν το reduce ισούται με
True, τότε μειώνεται κατα μία μονάδα ο αριθμός των ερωτήσεων για τον συγκεκριμένο χρήστη
και τη θεματική: SET num_questions = num_questions - 1.
Σε περίπτωση που ο αριθμός των ερωτήσεων πάει να γίνει αρνητικός, αυτό διορθώνεται
ορίζοντας αυτό τον αριθμό ίσο με το μηδέν: SET num_questions = 0. Έτσι εξασφαλίζεται ότι
η τιμή του πεδίου num_questions δεν θα είναι μικρότερη από 0.
Όταν το reduce είναι False, τότε είτε εισάγεται ή παραλείπεται η εγγραφή. Αν δεν υπάρχει ήδη
εγγραφή για τον χρήστη και το θέμα, πραγματοποιείται με τις τιμές: INSERT OR IGNORE
INTO user_topics (user_id, topic, num_questions, initial_num_questions). Αν υπάρχει ήδη
εγγραφή για το user_id και το topic, η εισαγωγή θα παρακαμφθεί χωρίς την ύπαρξη σφάλματος,
χάρη στη χρήση του INSERT OR IGNORE.