Improve router
This commit is contained in:
44
app.py
44
app.py
@@ -52,35 +52,10 @@ histories = {}
|
|||||||
session_contexts = {}
|
session_contexts = {}
|
||||||
|
|
||||||
SYSTEM_PROMPT = """Tu es l'assistant personnel vocal de Laurent.
|
SYSTEM_PROMPT = """Tu es l'assistant personnel vocal de Laurent.
|
||||||
Tu peux discuter normalement en francais et aider a envoyer des emails via Gmail.
|
Tu peux discuter normalement en francais et aider Laurent avec sa memoire professionnelle.
|
||||||
|
Le routage des actions, des lectures SQL et des confirmations est gere avant toi.
|
||||||
Quand l'utilisateur veut envoyer un email, collecte les informations manquantes :
|
Si tu recois une question generale, reponds naturellement avec le contexte fourni.
|
||||||
destinataire, sujet, contenu.
|
Si une information manque pour repondre correctement, demande une precision.
|
||||||
|
|
||||||
Quand tu as toutes les informations pour envoyer un email, reponds uniquement avec ce JSON :
|
|
||||||
{"action": "envoyer_email", "destinataire": "...", "sujet": "...", "corps": "..."}
|
|
||||||
|
|
||||||
Quand l'utilisateur veut ajouter, memoriser ou modifier un contact email, collecte le nom et l'adresse email.
|
|
||||||
Quand tu as les deux informations, reponds uniquement avec ce JSON :
|
|
||||||
{"action": "ajouter_contact", "nom": "...", "email": "..."}
|
|
||||||
|
|
||||||
Tu disposes aussi d'une memoire professionnelle persistante pour les clients, projets, taches, notes et depots Git.
|
|
||||||
Quand l'utilisateur te demande de noter, memoriser, ajouter ou associer une information professionnelle, reponds uniquement avec un JSON.
|
|
||||||
Actions disponibles :
|
|
||||||
{"action": "ajouter_client", "nom": "...", "notes": "...", "statut": "actif"}
|
|
||||||
{"action": "supprimer_client", "nom": "..."}
|
|
||||||
{"action": "ajouter_projet", "nom": "...", "client": "...", "statut": "...", "resume": "...", "prochaine_action": "..."}
|
|
||||||
{"action": "ajouter_tache", "titre": "...", "client": "...", "projet": "...", "details": "...", "echeance": "..."}
|
|
||||||
{"action": "terminer_tache", "id": 123}
|
|
||||||
{"action": "ajouter_repo", "nom": "...", "projet": "...", "chemin": "...", "url": "...", "branche": "..."}
|
|
||||||
{"action": "ajouter_note", "contenu": "...", "sujet": "...", "client": "...", "projet": "...", "type": "note"}
|
|
||||||
{"action": "interroger_base", "sql": "SELECT ...", "question": "..."}
|
|
||||||
|
|
||||||
Si une phrase contient plusieurs choses a enregistrer, utilise :
|
|
||||||
{"actions": [{...}, {...}]}
|
|
||||||
|
|
||||||
Quand l'utilisateur demande ce que tu sais d'un client, d'un projet, d'une tache ou d'un depot, utilise chercher_memoire.
|
|
||||||
Si l'utilisateur dit "pour CLIENT" en ajoutant une tache, renseigne toujours le champ client avec CLIENT.
|
|
||||||
|
|
||||||
Pour tout le reste, reponds en francais naturel, avec des phrases courtes.
|
Pour tout le reste, reponds en francais naturel, avec des phrases courtes.
|
||||||
N'utilise pas d'anglais sauf si l'utilisateur le demande explicitement.
|
N'utilise pas d'anglais sauf si l'utilisateur le demande explicitement.
|
||||||
@@ -143,8 +118,10 @@ Regles :
|
|||||||
- Pour retirer/enlever/supprimer un client de la liste, utilise supprimer_client.
|
- Pour retirer/enlever/supprimer un client de la liste, utilise supprimer_client.
|
||||||
- Pour "quel client a le plus de taches", utilise interroger_base avec COUNT, GROUP BY, ORDER BY.
|
- Pour "quel client a le plus de taches", utilise interroger_base avec COUNT, GROUP BY, ORDER BY.
|
||||||
- Pour "quelles sont mes taches", "mes taches a faire", "taches pour mes clients", utilise interroger_base sur tasks avec clients/projects.
|
- Pour "quelles sont mes taches", "mes taches a faire", "taches pour mes clients", utilise interroger_base sur tasks avec clients/projects.
|
||||||
- Si l'utilisateur dit "lui", "ce client", "ce projet" ou "cette tache", utilise le contexte de conversation en cours.
|
- Le dernier message est prioritaire, mais tu dois interpreter les pronoms et references implicites avec toute la conversation fournie.
|
||||||
- Si l'utilisateur demande "que dois-je faire pour lui ?", "c'est quoi comme tache ?" ou "quelle est la tache ?", utilise interroger_base avec le dernier client/projet connu.
|
- Si l'utilisateur dit "lui", "le", "la", "ca", "ça", "ce client", "ce projet" ou "cette tache", retrouve l'objet vise dans l'historique recent avant de choisir l'action.
|
||||||
|
- Si tu ne peux pas identifier clairement l'objet vise, type="clarification".
|
||||||
|
- Les questions de suivi courtes doivent etre resolues avec l'historique recent avant de choisir interroger_base, une action directe ou une clarification.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
@@ -309,7 +286,7 @@ def demander_au_llm(session_id, texte):
|
|||||||
|
|
||||||
|
|
||||||
def router_intention(session_id, texte):
|
def router_intention(session_id, texte):
|
||||||
historique = histories.get(session_id, [])[-12:]
|
historique = histories.get(session_id, [])[-20:]
|
||||||
messages = [
|
messages = [
|
||||||
{"role": "system", "content": ROUTER_PROMPT},
|
{"role": "system", "content": ROUTER_PROMPT},
|
||||||
{
|
{
|
||||||
@@ -1106,8 +1083,7 @@ def traiter_message(session_id, texte, avec_audio=False):
|
|||||||
reponse = decision["reply"]
|
reponse = decision["reply"]
|
||||||
if not reponse:
|
if not reponse:
|
||||||
reponse = demander_au_llm(session_id, texte)
|
reponse = demander_au_llm(session_id, texte)
|
||||||
else:
|
ajouter_echange_historique(session_id, texte, reponse)
|
||||||
ajouter_echange_historique(session_id, texte, reponse)
|
|
||||||
|
|
||||||
audio_url = None
|
audio_url = None
|
||||||
if avec_audio and TTS_PROVIDER == "groq":
|
if avec_audio and TTS_PROVIDER == "groq":
|
||||||
|
|||||||
Reference in New Issue
Block a user