Soporte para personalización de prompts en DiscourseAI

Tengo una y solo una petición y siempre es la misma: tienes un prompt para esto, así que por favor no lo escondas en los vacíos del código. Todo lo que necesito es añadir una frase: usa siempre finlandés. Eso es todo. Y de repente todo está en uso a nivel mundial.

Pero ahora esto es solo una pérdida de mi tiempo, del tiempo de mis usuarios activos y del tiempo de todos los usuarios anónimos que consigo, incluidos aquellos que necesitarían dicho servicio.

Esta es una obra maravillosa. Pero debido a esa única característica que falta… no. Me gustaría ofrecérsela a mis usuarios porque si ellos pueden usarla, todos pueden usarla. Pero no tiene ningún sentido generar esto, resumirlo, etc., usando inglés en un foro finlandés.

6 Me gusta

Esperemos que no antes de que se resuelva el problema principal del idioma :thinking:

Tenemos un plan para la personalización de prompts en DiscourseAI, lo que permite a nuestros usuarios cambiar rápidamente todos los prompts utilizados en las diversas partes del plugin. Creo que es algo que podremos abordar este año.

Mientras tanto, podemos centralizar dichas solicitudes en este tema.

8 Me gusta

¡Esto es un lío! Hacer que los prompts sean personalizables es un problema muy difícil.

Pensando en los detalles aquí, tomemos:

    CompletionPrompt.seed do |cp|
      cp.id = -306
      cp.name = "explain"
      cp.prompt_type = CompletionPrompt.prompt_types[:text]
      cp.messages = { insts: <<~TEXT }
        Eres un tutor explicando un término a un estudiante en un contexto específico.
        Te proporcionaré todo lo que necesitas saber dentro de etiquetas <input>, que consiste en el término que quiero que expliques dentro de etiquetas <term>, el contexto donde se usó dentro de etiquetas <context>, el título del tema donde se usó dentro de etiquetas <topic>, y opcionalmente, la publicación anterior en la conversación dentro de etiquetas <replyTo>.
        Usando toda esta información, escribe un párrafo con una breve explicación de lo que significa el término. Formatea la respuesta usando Markdown. Responde solo con la explicación y nada más.
      TEXT
    end

¿Cómo podemos resolver esto y hacerlo personalizable?

  1. Usar el sistema de traducción, mover las instrucciones a server.en.yml
  2. Retirar “Completion Prompt” en favor del modelo Ai Persona
  3. Proporcionar un editor para el modelo “Completion Prompt”
  4. Resolverlo mediante ingeniería de prompts

1. Usar el sistema de traducción, mover las instrucciones a server.en.yml

pros

  • Enviaremos automáticamente con soporte para múltiples idiomas
  • El sistema ya existe, no hay nada nuevo que construir
  • Muy personalizable a través de anulaciones de localización en la interfaz de administración

cons

  • Muchos LLM no funcionan bien con “no inglés”, la traducción puede resultar en un rendimiento muy inferior
  • Si la gente traduce las etiquetas entonces se romperá por completo (por ejemplo, <title>)

2. Centralizar en AI Persona

pros

  • Ya tenemos la mayor parte de la interfaz de usuario
  • Forma trivial de añadir/eliminar cosas al asistente de IA

cons

  • No enviaremos con traducciones
  • Necesitamos construir una interfaz de usuario para marcar una persona para su uso por una característica: (¿es para ilustrar una publicación? ¿es para el asistente del compositor? ¿es para el generador de títulos de bots?) algunas de estas son 1 a 1 y son 1 a muchas
  • Algunas de las personas no tendrán sentido para las conversaciones de bots, requieren etiquetas <replyTo>, <item> y <input>.

3. Proporcionar una interfaz de usuario para Completion Prompts

pros

  • Clara separación de las personas, confusión reducida
  • Es bueno poder añadir nuevos prompts de finalización a los usuarios… ¿quieres algo debajo de traducir? no hay problema
  • Fácil de editar

cons

  • Complejo lidiar con la “deriva”: si un usuario anula un prompt y arreglamos el original para añadir una etiqueta <something_new>, ¿cómo lo sabrán?

4. Resolverlo mediante ingeniería de prompts

Si logramos realizar esta magia, con un poco más de instrucciones personalizadas podría ser bueno, por ejemplo, añadir “IMPORTANTE: todas las respuestas deben ser en finlandés”, pero lograr que esto funcione de manera consistente será difícil.

pros

  • magia, simplemente funciona

cons

  • en realidad, es muy poco probable que funcione de manera consistente, tener instrucciones personalizadas en el idioma adecuado anclará mejor el modelo

Personalmente, me inclino por la opción (3). Especialmente porque nos da la capacidad de añadir prompts personalizados y tiene una fuerte separación. Pero entiendo totalmente la opción (2) como una salida, tal vez podamos lograrlo y unifica una gran cantidad de código, lo cual es muy bueno. Necesitamos jugar con esto y experimentar con la idea primero para decidir un ganador.

6 Me gusta

Quizás no. Pero OpenAI sí funciona.

Nosotros (como administradores de usuarios finales) no necesitamos crear un prompt completo en estas situaciones. Solo necesitamos agregar una solicitud para usar un idioma específico en el prompt. No sé nada de codificación, pero en términos generales, agregar una cadena de texto a un texto es bastante trivial, ¿no? ¿Y ustedes solo envían texto aquí?

Y el prompt en sí debe estar en inglés, por supuesto.

2 Me gusta

es específico del problema del idioma en lugar de la personalización general de las indicaciones… pero si tuviéramos un menú desplegable de idiomas, ¿podríamos pedirle a la IA que traduzca la indicación (excepto las etiquetas) y luego guarde/envíe esa indicación?

Traducir indicación al finlandés IA

:person_curly_hair: traduce esto al finlandés excepto las etiquetas <>:

Eres un tutor que explica un término a un estudiante en un contexto específico. Te proporcionaré todo lo que necesitas saber dentro de las etiquetas <input>, que consiste en el término que quiero que expliques dentro de las etiquetas <term>, el contexto en el que se usó dentro de las etiquetas <context>, el título del tema en el que se usó dentro de las etiquetas <topic>, y opcionalmente, la publicación anterior en la conversación en etiquetas <replyTo>. Usando toda esta información, escribe un párrafo con una breve explicación de lo que significa el término. Formatea la respuesta usando Markdown. Responde solo con la explicación y nada más.

:robot: Sinä olet ohjaaja, joka selittää termin oppilaalle tietyssä kontekstissa. Minä tarjoan sinulle kaiken tarvittavan tiedon <input> tageissa, joka sisältää termin, jonka haluat minun selittävän <term> tageissa, kontekstin, jossa sitä käytettiin <context> tageissa, aiheen otsikon, jossa sitä käytettiin <topic> tageissa, ja valinnaisesti, edellisen viestin keskustelussa <replyTo> tageissa. Käyttäen kaikkea tätä tietoa, kirjoita kappale lyhyellä selityksellä siitä, mitä termi tarkoittaa. Muotoile vastaus käyttäen Markdownia. Vastaa vain selityksellä eikä millään muulla.

¿Podrían los detalles técnicos ser una parte separada de la indicación? entonces tenemos una indicación que es algo como:

Aplica este comportamiento (los administradores pueden editar o agregar):

  • Eres un tutor que explica un término a un estudiante en un contexto específico.
  • Escribe una párrafooración con una breve explicación de lo que significa el término.
  • Responde solo con la explicación y nada más.
  • Usa muchos emojis

Usando estos detalles técnicos (no editables, donde actualizamos para evitar la deriva):

  • el término que quiero que expliques está dentro de las etiquetas <term>
  • el contexto de dónde se usó dentro de las etiquetas <context>
  • el título del tema donde se usó dentro de las etiquetas <topic>
  • la publicación anterior en la conversación está en etiquetas <replyTo> (opcional)
  • formatea la respuesta usando Markdown
1 me gusta

No, es una muy mala idea. Hará dos traducciones, cambiando la indicación cada vez. Todo lo que se necesita es la frase “Responde en [el idioma que sea]”[1]. Tu problema es decidir cuál sería ese idioma y me gustaría sugerir el mismo que usa ese foro como configuración regional predeterminada.


  1. o “usa”… eso es solo cuestión de redacción, pero tiene que estar en inglés. Bueno, eso es cierto con OpenAI, otras son un área inexplorada para mí ↩︎

1 me gusta

Tengo una solución temporal.

Haz un fork de discourse-ai desde GitHub y modifica el contenido para que hable francés.

así:

Luego modifica el archivo app.yml y cambia la dirección del plugin discourse-ai a tu propio repositorio.

Finalmente, sincroniza manualmente tu repositorio con el repositorio oficial.

Lo siento, pero por favor no lo hagas, esta PR envía solicitudes a un proxy de Netlify. Intentaré algunas soluciones sencillas hoy.

2 Me gusta

Tengo un concepto de prueba y un ejemplo funcional aquí:

GPT-4 funciona bastante bien en la mayoría de los idiomas, GPT 3.5 es aceptable, no tengo idea de qué está hablando Gemini Pro, está en otro mundo.

Claude 2 también produce resultados razonables.

3 Me gusta

Corrector

Probé antes/después, y al menos para GPT-4-Turbo y portugués cuando se usa el corrector, no hay ningún cambio. Supongo que el modelo fue lo suficientemente inteligente como para mantener mi texto en el idioma original.

Pie de foto de imagen IA

Lo extendí a la descripción de imágenes, y funciona muy bien allí:

5 Me gusta

¡Gracias, chicos! Al menos los subtítulos ahora se crean en el idioma deseado (y la calidad es la esperada, pero eso viene de OpenAI, al menos para mí).

Resúmenes… Aún no lo sé porque hace tiempo que no puedo crearlos. Pero esa es otra historia completamente diferente.

2 Me gusta