- outputs/platform, outputs/prospect : scripts de construction des decks commerciaux + captures sources et .pptx generes. - outputs/mnaha : seed complet de l'instance de demo luxembourgeoise (scripts par etape, contenus, images generees), le deck en version marque blanche et en version brandee, le PDF de presentation. - outputs/Wireframes : maquettes app mobile, app web et manager. - interview clients : notes de l'entretien Fourneau St Michel. state.json et les __pycache__ sont ignores : le premier porte les cles d'API de l'instance seedee, les scripts le regenerent.
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Étape 5 — conversations de visiteurs avec l'assistant.
|
|
|
|
Deux tiers de questions auxquelles le contenu répond, un tiers auxquelles il ne
|
|
répond pas : c'est ce dernier tiers qui remplit l'onglet « questions sans réponse »
|
|
du Guide IA, celui qui vaut la démonstration.
|
|
"""
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from api import Api
|
|
|
|
STATE = Path(__file__).resolve().parent / "state.json"
|
|
|
|
ANSWERABLE = [
|
|
("FR", "Que représente la mosaïque de Vichten ?"),
|
|
("FR", "Qu'a-t-on trouvé dans les tombes de Goeblange-Nospelt ?"),
|
|
("DE", "Warum heißt das Fort Thüngen „Dräi Eechelen“?"),
|
|
("EN", "What is a hypocaust and where can I see one?"),
|
|
("FR", "Pourquoi la forteresse de Luxembourg a-t-elle été démantelée ?"),
|
|
("NL", "Wanneer werd de Romeinse villa van Echternach opgegraven?"),
|
|
("DE", "Was zeigt die Sammlung Villeroy & Boch?"),
|
|
]
|
|
|
|
# Volontairement hors périmètre du contenu : horaires, accès, tarifs, services.
|
|
UNANSWERABLE = [
|
|
("FR", "Est-ce que le musée est accessible en fauteuil roulant ?"),
|
|
("FR", "Combien coûte l'entrée pour une famille de quatre personnes ?"),
|
|
("DE", "Gibt es einen Parkplatz in der Nähe des Museums?"),
|
|
("EN", "Is there a cloakroom for luggage?"),
|
|
("FR", "À quelle heure ferme le musée le dimanche ?"),
|
|
("EN", "Do you have a café on site?"),
|
|
]
|
|
|
|
|
|
def main():
|
|
api = Api()
|
|
state = json.loads(STATE.read_text(encoding="utf-8"))
|
|
instance_id = state["instanceId"]
|
|
|
|
for label, questions in (("répondues", ANSWERABLE),
|
|
("sans réponse", UNANSWERABLE)):
|
|
for language, question in questions:
|
|
result = api.post("/api/Ai/chat", {
|
|
"instanceId": instance_id,
|
|
"message": question,
|
|
"language": language,
|
|
})
|
|
sources = result.get("sources") or []
|
|
print(f" [{language}] {question[:52]:<52} "
|
|
f"{len(sources)} source(s), {result.get('tokensUsed')} jetons")
|
|
|
|
insights = api.get(f"/api/Ai/insights/{instance_id}")
|
|
print("\ninsights :", json.dumps(insights, ensure_ascii=False)[:400])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|