Commit 7f4548ea authored by Kantz's avatar Kantz
Browse files

LLM aufräumen

parent 48afff57
from app.deterministic_services import llm_client from app.deterministic_services import llm_client
HINT_SYSTEM_PROMPT = """
Du bist ein didaktischer Mathe-Tutor."
1) Antworte NUR mit einem kurzen Tipp (1-2 Sätze), keine Beispiele, keine Herleitung, keine komplette Lösung.
2) Beziehe dich PRIMÄR auf die 'Aktuelle Frage'. Ignoriere ältere Nebenfragen, außer sie sind nötig.
3) Wenn der Nutzer etwas Falsches sagt: korrigiere es kurz und gib einen nächsten Schritt.
4) Falls 'Mathematische Lösung' vorhanden ist, hat sie Vorrang vor 'LLM-Lösung'.
"""
def generate_hint( def generate_hint(
query: str, query: str,
task: str, task: str,
...@@ -8,13 +17,6 @@ def generate_hint( ...@@ -8,13 +17,6 @@ def generate_hint(
history: list[dict] | None = None, history: list[dict] | None = None,
sources: str | None = None, sources: str | None = None,
) -> str: ) -> str:
system_prompt = (
"Du bist ein didaktischer Mathe-Tutor.\n"
"1) Antworte NUR mit einem kurzen Tipp (1-2 Sätze), keine Beispiele, keine Herleitung, keine komplette Lösung.\n"
"2) Beziehe dich PRIMÄR auf die 'Aktuelle Frage'. Ignoriere ältere Nebenfragen, außer sie sind nötig.\n"
"3) Wenn der Nutzer etwas Falsches sagt: korrigiere es kurz und gib einen nächsten Schritt.\n"
"4) Falls 'Mathematische Lösung' vorhanden ist, hat sie Vorrang vor 'LLM-Lösung'.\n"
)
context_parts = [ context_parts = [
f"Aufgabe:\n{task}", f"Aufgabe:\n{task}",
...@@ -25,7 +27,7 @@ def generate_hint( ...@@ -25,7 +27,7 @@ def generate_hint(
if sources: if sources:
context_parts.append(f"Kontext/Sources:\n{sources}") context_parts.append(f"Kontext/Sources:\n{sources}")
messages = [{"role": "system", "content": system_prompt}] messages = [{"role": "system", "content": HINT_SYSTEM_PROMPT}]
# Kompakter Kontext als eine Nachricht (kein langer Fließtext mit History mischen) # Kompakter Kontext als eine Nachricht (kein langer Fließtext mit History mischen)
messages.append({"role": "user", "content": "\n\n".join(context_parts)}) messages.append({"role": "user", "content": "\n\n".join(context_parts)})
......
from app.deterministic_services import llm_client from app.deterministic_services import llm_client
QA_SYSTEM_PROMPT ="""
Du bist ein Mathe-Tutor. Antworte auf Deutsch, klar, korrekt und sehr kurz.
Nutze ausschließlich den bereitgestellten Kontext.
Wenn die Frage dort nicht beantwortet wird, antworte exakt:
„Dazu steht nichts im Material.“
verwende die $$ für mathematische Formeln, z.B. $$a^2 + b^2 = c^2$$
Zitiere immer die wichtigste Quelle direkt inline im Format der eckigen Klammern aus dem Kontext, z.B.:
[s2/ss1/c3 | definition | …]
Keine zusätzlichen Erklärungen außerhalb des Materials.
"""
def answer_question( def answer_question(
question: str, question: str,
history: str | None = None, history: str | None = None,
sources: str | None = None, sources: str | None = None,
) -> str: ) -> str:
system_prompt = (
"""
Du bist ein Mathe-Tutor. Antworte auf Deutsch, klar, korrekt und sehr kurz.
Nutze ausschließlich den bereitgestellten Kontext.
Wenn die Frage dort nicht beantwortet wird, antworte exakt:
„Dazu steht nichts im Material.“
verwende die $$ für mathematische Formeln, z.B. $$a^2 + b^2 = c^2$$
Zitiere immer die wichtigste Quelle direkt inline im Format der eckigen Klammern aus dem Kontext, z.B.:
[s2/ss1/c3 | definition | …]
Keine zusätzlichen Erklärungen außerhalb des Materials.
"""
)
prompt = ( prompt = (
"Frage:\n" "Frage:\n"
+ question + question
...@@ -31,7 +30,9 @@ def answer_question( ...@@ -31,7 +30,9 @@ def answer_question(
if sources: if sources:
prompt = "\nKontext:\n" + sources + "\n" + prompt prompt = "\nKontext:\n" + sources + "\n" + prompt
prompt += "\nGebe eine didaktisch wertvolle Antwort. Halte dich sehr kurz und prägnant." prompt += "\nGebe eine didaktisch wertvolle Antwort. Halte dich sehr kurz und prägnant."
result = llm_client.chat( result = llm_client.chat(
messages=[{"role": "system", "content": system_prompt}, {"role": "user", "content": prompt}], messages=[{"role": "system", "content": QA_SYSTEM_PROMPT}, {"role": "user", "content": prompt}],
) )
return llm_client.get_message_content(result) return llm_client.get_message_content(result)
\ No newline at end of file
from app.deterministic_services import llm_client from app.deterministic_services import llm_client
SOLVER_PROMPT = ( SOLVER_SYSTEM_PROMPT = (
"Du bist ein Mathe-Aufgaben Löser. Schreibe ein ausführliche genaue Lösung für die gestellt Fragen. " "Du bist ein Mathe-Aufgaben Löser. Schreibe ein ausführliche genaue Lösung für die gestellt Fragen. "
"In der du alle Zwischenschritte aufführst und möglich Fehlerquellen auflistet." "In der du alle Zwischenschritte aufführst und möglich Fehlerquellen auflistet."
"Deine Lösung soll korrekt sein und didaktisch gut formuliert." "Deine Lösung soll korrekt sein und didaktisch gut formuliert."
...@@ -18,7 +18,7 @@ def solve_question(question: str, context_sheet: str) -> str: ...@@ -18,7 +18,7 @@ def solve_question(question: str, context_sheet: str) -> str:
) )
result = llm_client.chat( result = llm_client.chat(
messages=[ messages=[
{"role": "system", "content": SOLVER_PROMPT}, {"role": "system", "content": SOLVER_SYSTEM_PROMPT},
{"role": "user", "content": prompt}, {"role": "user", "content": prompt},
], ],
) )
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment