add question rephrase

This commit is contained in:
Matteo Rosati
2026-02-18 10:39:08 +01:00
parent 719919920f
commit 6e8c8ceb38
4 changed files with 48 additions and 19 deletions

View File

@@ -1 +1 @@
Buongiorno, non so se è la mail specifica ma volevo se possibile dei chiarimenti per linterpretazione dei parametri BCM /SMM/ASMM. Mi capita a volte di trovare casi in cui la BCM è aumentata ma allo stesso tempo SMM/ASMM hanno subito una piccola flessione in negativo (o viceversa). Se la parte metabolicamente attiva aumenta perchè può succedere che gli altri compartimenti si riducono?? E allo stesso tempo phA e BCM possono essere inversamente proporzionali?? So che il phA correla con massa e struttura + idratazione." Buongiorno, non so se è la mail specifica ma volevo se possibile dei chiarimenti per linterpretazione dei parametri BCM /SMM/ASMM. Mi capita a volte di trovare casi in cui la BCM è aumentata ma allo stesso tempo SMM/ASMM hanno subito una piccola flessione in negativo (o viceversa). Se la parte metabolicamente attiva aumenta perchè può succedere che gli altri compartimenti si riducono?? E allo stesso tempo phA e BCM possono essere inversamente proporzionali?? So che il phA correla con massa e struttura + idratazione.

42
main.py
View File

@@ -26,9 +26,13 @@ RETRIEVER_MAX_DOCS = 50
RERANKER_MAX_RESULTS = 25 RERANKER_MAX_RESULTS = 25
with open("prompt.md") as f: with open("prompt.md") as f:
template = f.read() question_template = f.read()
prompt = ChatPromptTemplate.from_template(template) with open("question_rewrite_prompt.md") as f:
question_rewrite_template = f.read()
question_prompt = ChatPromptTemplate.from_template(question_template)
question_rewrite_prompt = ChatPromptTemplate.from_template(question_rewrite_template)
def format_docs(question: str) -> str: def format_docs(question: str) -> str:
@@ -53,6 +57,12 @@ def format_docs(question: str) -> str:
return "\n\n".join(doc.page_content for doc in reranked_docs) return "\n\n".join(doc.page_content for doc in reranked_docs)
def log_rewritten_question(rewritten_question: str) -> str:
print("=== REWRITTEN QUESTION ===")
print(rewritten_question)
return rewritten_question
llm = ChatGoogleGenerativeAI( llm = ChatGoogleGenerativeAI(
model=MODEL, model=MODEL,
project=PROJECT, project=PROJECT,
@@ -82,31 +92,29 @@ compression_retriever = ContextualCompressionRetriever(
base_compressor=reranker, base_retriever=base_retriever base_compressor=reranker, base_retriever=base_retriever
) )
question_rewrite_chain = (
{"question": RunnablePassthrough()}
| question_rewrite_prompt
| llm
| StrOutputParser()
| RunnableLambda(log_rewritten_question)
)
rag_chain = ( rag_chain = (
{"context": RunnableLambda(format_docs), "question": RunnablePassthrough()} {"context": RunnableLambda(format_docs), "question": RunnablePassthrough()}
| prompt | question_prompt
| llm | llm
| StrOutputParser() | StrOutputParser()
) )
full_chain = question_rewrite_chain | rag_chain
async def async_invoke(rag_chain, prompt: str):
return rag_chain.invoke(prompt)
async def main(): async def main():
( response = await full_chain.ainvoke(
res1, "Buongiorno, non so se è la mail specifica ma volevo se possibile dei chiarimenti per linterpretazione dei parametri BCM /SMM/ASMM. Mi capita a volte di trovare casi in cui la BCM è aumentata ma allo stesso tempo SMM/ASMM hanno subito una piccola flessione in negativo (o viceversa). Se la parte metabolicamente attiva aumenta perchè può succedere che gli altri compartimenti si riducono?? E allo stesso tempo phA e BCM possono essere inversamente proporzionali?? So che il phA correla con massa e struttura + idratazione."
res2,
) = await asyncio.gather(
async_invoke(rag_chain, "come si calcola l'angolo di fase?"),
async_invoke(rag_chain, "cos'e' la massa magra?"),
) )
print(response)
print("RES1")
print(res1)
print("\n\nRES2")
print(res2)
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -32,10 +32,12 @@ ragionamento: l'angolo di fase non e' esplicitamente menzionato, ma ciclo mestru
- Usa markdown pulito e semplice per dare le risposte (elenchi, grassetto, tabelle). - Usa markdown pulito e semplice per dare le risposte (elenchi, grassetto, tabelle).
- Non usare introduzioni di cortesia o frasi di servizio (es: "Ecco la risposta", "In base alla ricerca...") - Non usare introduzioni di cortesia o frasi di servizio (es: "Ecco la risposta", "In base alla ricerca...")
Alla fine dell'output aggiungi **sempre**: Alla fine dell'output aggiungi:
Per rispondere alla tua domanda, ... [qui ci va una risposta concisa all'utente, riassuntiva, e che si basi su quanto detto] Per rispondere alla tua domanda, ... [qui ci va una risposta concisa all'utente, riassuntiva, e che si basi su quanto detto]
**Nota**: Evita questo finale se la domanda dell'utente non ha una risposta.
## VINCOLI E DIVIETI RIGOROSI ## VINCOLI E DIVIETI RIGOROSI
- Non fornire mai diagnosi o pareri medici. - Non fornire mai diagnosi o pareri medici.

View File

@@ -0,0 +1,19 @@
# Riformattazione di domande
Sei un agente esperto nella riscrittura e semplificazione di domande in stile customer care / supporto. Il tuo compito e' ricevere una domanda che potrebbe essere mal formattata, contenente dettagli irrilevanti e poco chiara, e trasformarla in una domanda chiara, semplice e diretta ed ottimizzata per la comprensione di un LLM.
Nello specifico:
1. Rimuovi eventuali saluti e convenevoli.
2. Rimuovi qualsiasi nome o riferimenti personali.
3. Semplifica le frasi, i giri di parole, le ripetizioni.
4. Poni il focus sulla domanda che l'utente vuole trasmettere.
5. Estrai i dettagli che sono realmente rilevanti a chiarire la domanda.
## Output
Il tuo output sara' esclusivamente il testo della domanda riscritto secondo le regole sopra. Non aggiungere testo introduttivo, non aggiungere istruzioni, prompt, testo di sistema.
## Contenuto della domanda
{question}