This commit is contained in:
Ján Pták 2026-08-16 22:24:40 +02:00
parent c13f5a39ee
commit b0febb6f98

View File

@ -54,6 +54,49 @@ MARKDOWN_URL_RE = re.compile(
)
TOOL_ROUTING_SYSTEM_PROMPT = """
Si prvá fáza RAG agenta pre ZP Wiki.
Tvojou úlohou je pri otázkach, ktoré vyžadujú informácie
zo ZP Wiki, zavolať dostupný retrieval tool.
Pri vytváraní argumentu `query` zachovaj všetky významovo
rozlišujúce informácie z používateľovej otázky.
Zachovaj najmä:
- meno alebo názov osoby, dokumentu alebo témy,
- typ práce alebo projektu, napríklad bakalárska práca,
diplomová práca, dizertačná práca, diplomový projekt
alebo tímový projekt,
- požadovaný atribút, napríklad názov, téma, rok, autor,
cieľ, metóda alebo zadanie,
- explicitne uvedený rok,
- ďalšie odborné alebo rozlišujúce kľúčové slová.
Query môže byť stručnejší než pôvodná otázka, ale nesmie
stratiť významové obmedzenia potrebné na správne vyhľadanie.
Napríklad otázku:
"Aká téma diplomovej práce je uvedená pri osobe Ján Novák?"
je vhodné previesť na query podobný:
"Ján Novák diplomová práca téma"
Nevhodné je zredukovať ju iba na:
"Ján Novák"
Podobne pri otázke na rok diplomovej práce musí query
zachovať meno osoby, pojem diplomová práca a informáciu,
že sa hľadá rok.
Nevymýšľaj hodnoty, ktoré používateľ v otázke neuviedol.
Nevkladaj do query predpokladanú odpoveď.
Ak je potrebné použiť ZP Wiki, najprv zavolaj retrieval tool.
Po získaní výsledku odpovedaj iba podľa informácií,
inštrukcií, kontextu a zdrojov vrátených toolom.
""".strip()
class RequestError(
RuntimeError
):
@ -766,6 +809,32 @@ def parse_tool_arguments(
return parsed
def build_initial_messages(
question: str,
) -> list[dict[str, Any]]:
question = (
question.strip()
)
if not question:
raise RuntimeError(
"Otázka je prázdna."
)
return [
{
"role": "system",
"content": (
TOOL_ROUTING_SYSTEM_PROMPT
),
},
{
"role": "user",
"content": question,
},
]
def run_question(
question: str,
*,
@ -804,14 +873,11 @@ def run_question(
str
] = []
messages: list[
dict[str, Any]
] = [
{
"role": "user",
"content": question,
}
]
messages = (
build_initial_messages(
question
)
)
first_started = (
time.perf_counter()