42
def get_unasked_question(user_id, knowledge_topic):
answered_questions =get_answered_questions(user_id, knowledge_topic)
answered_texts = [f"Question: {question} Answer: {answer}" for question, answer in
answered_questions]
user_age = get_last_user_age()
llm_prompt = (f"Generate a unique question and answer related to {knowledge_topic} suitable
for age {user_age}. "
f"Ensure that the generated question and answer do not repeat the following:
{', '.join(answered_texts)} "
f"Provide the question starting with 'question:' and the correct answer
starting with 'answer:'.")
try:
llm_run = ['ollama', 'run', 'llama3:latest', llm_prompt]
output = subprocess.check_output(llm_run, encoding='utf-8', stdin=subprocess.DEVNULL)
print("Output is", output)
#set the position of what is printed as answer and question without extra information
question_start_index = output.lower().find('question:')
answer_start_index = output.lower().find('answer:')
if question_start_index != -1 and answer_start_index != -1:
question=output[question_start_index+len('question:'):answer_start_index].strip()
answer = output[answer_start_index + len('answer:'):].strip()
if (question, answer) not in answered_questions:
print(f"Generated New Question: {question}")
print(f"Generated New Answer: {answer}")
return question, answer
return None, None
except subprocess.CalledProcessError as e:
print("Error generating new question:", e)
return None, None
Έλεγχος Σημασιολογικής Ομοιότητας Απαντήσεων
Η αναγνώριση σωστής απάντησης πλέον δεν περιορίζεται στην αυστηρά πανομοιότυπη
διατύπωση της ήδη αποθηκευμένης. Το LLM ελέγχει τη σημασιολογική ομοιότητα μεταξύ της
απάντησης που έδωσε ο χρήστης και αυτής που αποθηκεύτηκε ως ορθή στη βάση δεδομένων.
Αυτή η διαδικασία αποδείχθηκε αναγκαία, καθώς η μοναδική απάντηση που θεωρούταν ορθή
ήταν η κατά γράμμα απόδοση αυτής που αποθηκεύτηκε στη βάση, συμπεριλαμβανομένων των
σημείων στίξης. Πλέον σωστή απάντηση μπορεί να θεωρηθεί, οποιαδήποτε απάντηση έχει την
ίδια σημασία και το ίδιο νόημα με την αποθηκευμένη.
def check_meaning_with_llm(user_answer, correct_answer, user_id):
global no_more_questions
llm_prompt = (f"Determine if the following user answer is semantically equivalent to the
correct answer. "
f"User Answer: '{user_answer}' "
f"Correct Answer: '{correct_answer}' "
f"Answer with 'Yes' or 'No' and provide an explanation if needed. "
f"Note: Both answers should be considered correct if they convey the same
meaning even if the formatting is different.")
try:
llm_run = ['ollama', 'run', 'llama3:latest', llm_prompt]
output = subprocess.check_output(llm_run, encoding='utf-8', stdin=subprocess.DEVNULL)