fix: language rule #1
Browse files- app/prompts.py +9 -4
- tests/test_prompts.py +5 -2
app/prompts.py
CHANGED
|
@@ -3,9 +3,9 @@
|
|
| 3 |
|
| 4 |
from __future__ import annotations
|
| 5 |
|
| 6 |
-
SYSTEM_TEMPLATE = """
|
| 7 |
|
| 8 |
-
{
|
| 9 |
|
| 10 |
EXACTITUD (regla de oro): usa SIEMPRE las herramientas para cualquier dato; nunca respondas de memoria. Responde SOLO con lo que devuelven las herramientas, copiando cifras/medidas/precios tal cual. Si un dato no está, dilo claramente y ofrece consultarlo con el equipo (NO te lo inventes ni aproximes). NO inventes productos, precios ni especificaciones. Antes de responder algo concreto, asegúrate de que esa info aparece en el resultado de la herramienta; si hay duda, di que lo confirmas con el equipo. No repitas la misma búsqueda; en cuanto tengas la info, responde.
|
| 11 |
|
|
@@ -40,7 +40,12 @@ ESCALADO: usa escalate_to_human SOLO si (a) el cliente pide EXPLÍCITAMENTE habl
|
|
| 40 |
|
| 41 |
def build_system_prompt(brand_name: str = "Asistente", language: str | None = None) -> str:
|
| 42 |
if language:
|
| 43 |
-
idioma_rule =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
else:
|
| 45 |
-
idioma_rule = "IDIOMA: responde
|
| 46 |
return SYSTEM_TEMPLATE.format(brand_name=brand_name or "Asistente", idioma_rule=idioma_rule)
|
|
|
|
| 3 |
|
| 4 |
from __future__ import annotations
|
| 5 |
|
| 6 |
+
SYSTEM_TEMPLATE = """REGLA #1 — {idioma_rule}
|
| 7 |
|
| 8 |
+
Eres {brand_name}, asistente de atención al cliente de esta tienda. Cercano, claro y resolutivo.
|
| 9 |
|
| 10 |
EXACTITUD (regla de oro): usa SIEMPRE las herramientas para cualquier dato; nunca respondas de memoria. Responde SOLO con lo que devuelven las herramientas, copiando cifras/medidas/precios tal cual. Si un dato no está, dilo claramente y ofrece consultarlo con el equipo (NO te lo inventes ni aproximes). NO inventes productos, precios ni especificaciones. Antes de responder algo concreto, asegúrate de que esa info aparece en el resultado de la herramienta; si hay duda, di que lo confirmas con el equipo. No repitas la misma búsqueda; en cuanto tengas la info, responde.
|
| 11 |
|
|
|
|
| 40 |
|
| 41 |
def build_system_prompt(brand_name: str = "Asistente", language: str | None = None) -> str:
|
| 42 |
if language:
|
| 43 |
+
idioma_rule = (
|
| 44 |
+
f"IDIOMA OBLIGATORIO: responde TODO el mensaje en {language}, SIEMPRE, "
|
| 45 |
+
f"pase lo que pase. Aunque el catálogo, las fichas o tus datos estén en "
|
| 46 |
+
f"otro idioma, tradúcelo y responde en {language}. NUNCA respondas en otro "
|
| 47 |
+
f"idioma distinto de {language} ni mezcles idiomas."
|
| 48 |
+
)
|
| 49 |
else:
|
| 50 |
+
idioma_rule = "IDIOMA OBLIGATORIO: responde en el MISMO idioma del último mensaje del cliente; nunca cambies de idioma a media conversación."
|
| 51 |
return SYSTEM_TEMPLATE.format(brand_name=brand_name or "Asistente", idioma_rule=idioma_rule)
|
tests/test_prompts.py
CHANGED
|
@@ -6,9 +6,12 @@ from app.prompts import build_system_prompt
|
|
| 6 |
def test_system_prompt_includes_rules_and_brand():
|
| 7 |
p = build_system_prompt("TOORX Assist")
|
| 8 |
assert "TOORX Assist" in p
|
| 9 |
-
# language rule
|
| 10 |
assert "idioma" in p.lower()
|
| 11 |
-
assert "
|
|
|
|
|
|
|
|
|
|
| 12 |
# anti-hallucination grounding rule
|
| 13 |
assert "inventes" in p.lower()
|
| 14 |
# flexible order verification (email + order number / postal code / name)
|
|
|
|
| 6 |
def test_system_prompt_includes_rules_and_brand():
|
| 7 |
p = build_system_prompt("TOORX Assist")
|
| 8 |
assert "TOORX Assist" in p
|
| 9 |
+
# language rule (now the prominent "REGLA #1")
|
| 10 |
assert "idioma" in p.lower()
|
| 11 |
+
assert "REGLA #1" in p
|
| 12 |
+
# a pinned language is forced verbatim
|
| 13 |
+
pinned = build_system_prompt("X", language="portugués de Portugal (pt-PT)")
|
| 14 |
+
assert "pt-PT" in pinned
|
| 15 |
# anti-hallucination grounding rule
|
| 16 |
assert "inventes" in p.lower()
|
| 17 |
# flexible order verification (email + order number / postal code / name)
|