Casos de uso y soluciones

Responder reseñas con IA y aprobación humana: borradores con reglas de marca y alertas de escalado

6 pasos 17 min de lectura 64 vistas 0
Contenido

Responder a las reseñas demuestra a los clientes que alguien los escucha, y los futuros compradores también leen esas respuestas. Sin embargo, escribir cientos de respuestas cuidadas en varios idiomas lleva horas cada semana. Esta guía usa un modelo de lenguaje local para redactar un borrador de respuesta a cada reseña en el idioma de quien la escribió, siguiendo sus notas de marca y un conjunto estricto de reglas. Marca las reseñas que requieren la intervención de una persona, como las de valoración baja, problemas de seguridad, amenazas legales o sospecha de fraude, y lo guarda todo en una hoja de cálculo para su aprobación. Nada se publica automáticamente.

Siga las normas de cada plataforma sobre las respuestas a reseñas: nunca ofrezca reembolsos, regalos ni descuentos a cambio de modificar o eliminar una reseña, nunca revele datos de clientes y compruebe si la plataforma permite siquiera las respuestas públicas. Una persona debe aprobar cada respuesta antes de publicarla.

Paso 1: Preparar el entorno

Use el entorno /opt/reviews con Ollama de analizar reseñas de clientes con un LLM local. El mismo CSV de reseñas sirve aquí; el script necesita las columnas id y text, y usa rating cuando existe.

Paso 2: Redactar sus notas de marca

El modelo usa estas notas para el tono, los datos de contacto y los hechos que puede mencionar. Manténgalas breves y objetivas:

cat > /data/reviews/brand.txt <<'EOF2'
Business: ACME Home, sells bamboo office accessories online.
Tone: warm and simple, no slang, no emoji.
Support contact: the "Contact seller" button on the order page, or [email protected].
Facts you may mention: 12-month warranty on all stands.
Sign off as: The ACME Home team
EOF2

Paso 3: Crear el script de respuestas

cat > /opt/reviews/replies.py <<'EOF2'
import csv, json, os, re, sys
import ollama

MODEL = os.environ.get("MODEL", "qwen2.5:7b")
BRAND = open(os.environ.get("BRAND_FILE", "brand.txt"), encoding="utf-8").read()
ESCALATE = re.compile(os.environ.get("ESCALATE",
    r"refund|chargeback|injur|burn|fire|smoke|allerg|lawyer|lawsuit|scam|fraud|fake|police|退款|投诉|受伤|起火|过敏|律师|骗"), re.I)
SCHEMA = {"type": "object", "properties": {
    "reply": {"type": "string"}, "needs_human": {"type": "boolean"}, "reason": {"type": "string"}},
    "required": ["reply", "needs_human", "reason"]}
SYSTEM = """You draft public replies to customer reviews for the business described in the brand notes.
Rules:
- Reply in the same language as the review, in 2 to 4 sentences.
- Thank the customer and respond to the specific point they made. Vary your wording.
- Never admit legal liability. Never promise refunds, replacements, discounts or compensation.
- Never ask the customer to change or remove their review, and never offer anything in return for a review.
- Never include order numbers, names or other personal data.
- For problems, apologise briefly and invite the customer to contact support as described in the brand notes.
- Set needs_human to true for safety issues, legal threats, suspected fraud, abuse, or if you are unsure,
  and give the reason. Otherwise leave reason empty.

Brand notes:
""" + BRAND

src, out = sys.argv[1], "replies.csv"
done = set()
if os.path.exists(out):
    with open(out, encoding="utf-8-sig") as f:
        done = {r["id"] for r in csv.DictReader(f)}
with open(src, encoding="utf-8-sig") as f:
    reviews = [r for r in csv.DictReader(f) if r.get("text", "").strip()]

new_file = not os.path.exists(out)
with open(out, "a", newline="", encoding="utf-8-sig") as f:
    w = csv.writer(f)
    if new_file:
        w.writerow(["id", "rating", "text", "draft_reply", "needs_human", "reason", "approved", "final_reply"])
    for r in reviews:
        if r["id"] in done:
            continue
        res = ollama.chat(model=MODEL, format=SCHEMA, options={"temperature": 0.5}, messages=[
            {"role": "system", "content": SYSTEM},
            {"role": "user", "content": f"Rating: {r.get('rating', '?')} of 5\nReview: {r['text'][:3000]}"}])
        d = json.loads(res.message.content)
        reasons = [d["reason"]] if d["needs_human"] and d["reason"] else []
        if r.get("rating", "").isdigit() and int(r["rating"]) <= 2:
            reasons.append("low rating")
        if ESCALATE.search(r["text"]):
            reasons.append("keyword: " + ESCALATE.search(r["text"]).group(0))
        w.writerow([r["id"], r.get("rating", ""), r["text"], d["reply"].strip(),
                    "yes" if reasons or d["needs_human"] else "no", "; ".join(reasons), "", ""])
        f.flush()
        print(r["id"], "NEEDS HUMAN" if reasons or d["needs_human"] else "draft ok", flush=True)
print("done: replies.csv")
EOF2

Una reseña se marca para revisión humana cuando el modelo lo pide, cuando la valoración es de 2 o menos, o cuando el texto coincide con la lista de palabras clave ESCALATE. Las reseñas procesadas se guardan de inmediato y se omiten en la siguiente ejecución.

Paso 4: Generar los borradores

cd /data/reviews
/opt/reviews/bin/python /opt/reviews/replies.py reviews.csv

El resultado es replies.csv, con las columnas id, rating, text, draft_reply, needs_human, reason, approved y final_reply.

Paso 5: Aprobar y publicar

  1. Abra replies.csv en Excel o Google Sheets y filtre primero por needs_human = yes. Ocúpese usted mismo de estas reseñas: contacte con el cliente en privado a través de la plataforma, resuelva el problema y después responda públicamente.
  2. En las demás filas, lea el borrador, cópielo en final_reply con los cambios que necesite y ponga approved en yes.
  3. Publique las respuestas aprobadas desde el centro de vendedores o mediante la API oficial de la plataforma, si la ofrece.
  4. Conserve el archivo como registro de qué se respondió y quién lo hizo.

Paso 6: Adaptarlo a su negocio

  • Amplíe ESCALATE con palabras en los idiomas que usan sus clientes, por ejemplo en tailandés, español o japonés.
  • Añada a las notas de marca los datos que se repiten con frecuencia, como las condiciones de garantía o las instrucciones de cuidado, para que los borradores respondan correctamente a las preguntas habituales.
  • Pegue en las notas de marca dos o tres respuestas que considere ideales como ejemplo; el modelo seguirá su estilo.
  • Para avisar al equipo de inmediato cuando una reseña requiera la intervención de una persona, envíe las filas marcadas a un grupo de Telegram con una herramienta de automatización de flujos de trabajo; consulte crear un bot de Telegram con n8n.

Preguntas frecuentes

¿Se pueden publicar las respuestas automáticamente?

Técnicamente sí, mediante las API de las plataformas, pero recomendamos la aprobación humana. Una respuesta pública equivocada es difícil de deshacer, y muchas plataformas responsabilizan al vendedor de cada palabra.

Todos los borradores suenan igual

Las reglas piden al modelo que varíe la redacción, y la temperatura de 0.5 aporta variedad. Lo que más ayuda es incluir en las notas de marca respuestas de ejemplo con estructuras diferentes.

¿Qué reseñas deberíamos responder?

Dé prioridad a las reseñas negativas y detalladas, en las que una buena respuesta puede hacer cambiar de opinión a un comprador. Las reseñas positivas breves necesitan, como mucho, un breve agradecimiento. Para entender de qué se quejan los clientes en general, consulte descubrir de qué hablan los clientes con embeddings.

¿Sigue sin resolverlo después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico de IMIDC, disponible 24/7, le ayudará. Incluya la IP del servidor, el modelo que usa y la salida del error para que podamos localizar el problema más rápido.

¿Fue útil la respuesta?

Tutoriales relacionados