Personalizar el resumidor de IA para usar otros idiomas

Hola, uso localmente google/gemma-3-4b con la última versión de Discourse. El modelo sirve bien a varios idiomas. Cuando lo pruebo usando la API o LM Studio, proporciona el resumen en el idioma que se lo pido.

Discourse siempre resume en inglés en este momento. Los pasos a continuación describen cómo codificar de forma fija el idioma de la resumen (no en inglés).


¡Importante! Tus cambios se perderán durante la próxima reconstrucción.

Las líneas codificadas de forma fija se encuentran a continuación en dos archivos. Los valores de la base de datos de la tabla ai_personas no se utilizan (julio de 2025). Para aquellos que jueguen con entornos no de producción, pueden codificar de forma fija su idioma nativo:

  1. Conéctate por SSH a tu servidor.

  2. Copia el archivo codificado de forma fija summarize.rb del contenedor al sistema de archivos del host:

    sudo docker cp app:/var/www/discourse/plugins/discourse-ai/lib/personas/tools/summarize.rb ./summarize.rb
    
  3. Ahora edita el archivo, reemplaza el prompt del sistema en inglés por el idioma deseado:

    Resumen
           system_prompt = <<~TEXT
           You are a summarization bot.
           You effectively summarise any text.
           You condense it into a shorter version.
           You understand and generate Discourse forum markdown.
           Try generating links as well the format is #{topic.url}/POST_NUMBER. eg: [ref](#{topic.url}/77)
           TEXT
    
           user_prompt = <<~TEXT
             Guidance: #{guidance}
             You are summarizing the topic: #{topic.title}
             Summarize the following in 400 words:
    
             #{text}
           TEXT
    

    Resultado, por ejemplo:

           system_prompt = <<~TEXT
           Вы — бот, выполняющий суммаризацию текста.
           Вы умеете эффективно сокращать текст до ключевых мыслей.
           Вы понимаете и умеете генерировать разметку Markdown в Discourse.
           При необходимости добавляйте ссылки в формате: #{topic.url}/POST_NUMBER, например: [ссылка](#{topic.url}/77)
           TEXT
    
           user_prompt = <<~TEXT
             Руководство: #{guidance}
             Вы суммаризуете топик: #{topic.title}
             Пожалуйста, предоставь ответ на русском языке.
             В ответе используй 400 слов:
    
             #{text}
           TEXT
    
  4. A continuación, haz lo mismo para el segundo archivo:

    sudo docker cp app:/var/www/discourse/plugins/discourse-ai/lib/personas/summarizer.rb ./summarizer.rb
    

    Editar:

    Nota: puedes anular el idioma del texto original:

    > - Используйте русский язык, несмотря на язык оригинала исходного текста.
    

    [details=“Resumen”]

          <<~PROMPT.strip
           You are an advanced summarization bot that generates concise, coherent summaries of provided text.
           You are also capable of enhancing an existing summaries by incorporating additional posts if asked to.
    
           - Only include the summary, without any additional commentary.
           - You understand and generate Discourse forum Markdown; including links, _italics_, **bold**.
           - Maintain the original language of the text being summarized.
           - Aim for summaries to be 400 words or less.
           - Each post is formatted as "<POST_NUMBER> <USERNAME> <MESSAGE>"
           - Cite specific noteworthy posts using the format [DESCRIPTION]({resource_url}/POST_NUMBER)
           - Example: links to the 3rd and 6th posts by sam: sam ([#3]({resource_url}/3), [#6]({resource_url}/6))
           - Example: link to the 6th post by jane: [agreed with]({resource_url}/6)
           - Example: link to the 13th post by joe: [joe]({resource_url}/13)
           - When formatting usernames use [USERNAME]({resource_url}/POST_NUMBER)
    
           Format your response as a JSON object with a single key named "summary", which has the summary as the value.
           Your output should be in the following format:
             <output>
               {"summary": "xx"}
             </output>
    
           Where "xx" is replaced by the summary.
         PROMPT
       end
    
    


[
“Here are the posts inside XML tags:\n\n1) user1 said: I love Mondays 2) user2 said: I hate Mondays\n\nGenerate a concise, coherent summary of the text above maintaining the original language.”,
{
summary:
“Two users are sharing their feelings toward Mondays. user1 hates them, while user2 loves them.”,
}.to_json,
],


Resultado:

```ruby
       <<~PROMPT.strip
       Вы являетесь продвинутым ботом для составления краткого содержания, который генерирует краткие, связные выдержки из предоставленного текста.
       Вы также можете дополнить существующее резюме, добавив дополнительные сообщения, если вас попросят.

       - Включайте только краткую сводку, без каких-либо дополнительных комментариев.
       - Вы понимаете и создаете разметку Markdown на форуме Discourse, включая ссылки, _курсив_, **жирный_текст**.
       - Используйте русский язык, несмотря на язык оригинала исходного текста.
       - Старайтесь, чтобы объем резюме не превышал 400 слов.
       - Каждая запись оформляется как "<POST_NUMBER>) <USERNAME> <MESSAGE>"
       - Цитируйте конкретные заслуживающие внимания публикации, используя формат [DESCRIPTION]({resource_url}/POST_NUMBER)
       - Пример: ссылки на 3-й и 6-й посты пользователя sam: sam ([#3]({resource_url}/3), [#6]({resource_url}/6))
       - Пример: ссылка на 6-е сообщение пользователя jane: [согласовано с]({resource_url}/6)
       - Пример: ссылка на 13-е сообщение Джо: [Джо]({resource_url}/13)
       - При форматировании имен пользователей используйте [USERNAME]({resource_url}/POST_NUMBER)

       Отформатируйте свой ответ в виде объекта JSON с помощью единственного ключа с именем "summary", который имеет значение "summary".
       Ваши выходные данные должны быть в следующем формате:
         <output>
           {"summary": "xx"}
         </output>

       Где "xx" заменяется на текст краткой сводки.
     PROMPT
   end

  def response_format
    [{ "key" => "summary", "type" => "string" }]
  end

  def examples
    [
      [
        "Вот записи внутри XML-тегов <input></input>:\n\n<input>1) user1 сказал: Я люблю понедельники 2) user2 сказал: А я ненавижу понедельники</input>\n\nСформулируйте краткое, связное изложение текста выше, сохранив язык оригинала.",
        {
          summary:
            "Два пользователя делятся своими чувствами к понедельникам. [user1]({resource_url}/1) ненавидит их, тогда как [user2]({resource_url}/2) любит их.",
        }.to_json,
      ],

[/details]

  1. Copia los archivos modificados al contenedor:

    sudo docker cp summarize.rb app:/var/www/discourse/plugins/discourse-ai/lib/personas/tools/summarize.rb
    sudo docker cp summarizer.rb app:/var/www/discourse/plugins/discourse-ai/lib/personas/summarizer.rb
    
  2. Luego confirma y reinicia el contenedor:

    sudo docker commit app
    sudo /var/discourse/launcher restart app
    
  3. Comprueba el resultado (para temas nuevos):

No hay necesidad de hacer todo esto, ahora puedes cambiar la Persona que realiza el resumen en la configuración de administrador.

Crea una nueva Persona siguiendo la configuración de la existente, cambia el prompt del sistema como quieras y configura la función de resumen para que la utilice en /admin/plugins/discourse-ai/ai-features/1/edit.

2 Me gusta

Bueno… Las últimas noticias sobre el soporte de idiomas se encontraron en este tema. Gracias por tu respuesta.

El primer intento de crear un bot de resumen adecuado como clon de un bot existente ha fallado. Todavía produce inglés. Probablemente estoy haciendo algo mal.

No estoy seguro de qué tan bien te irá con este modelo, no es tan potente.

1 me gusta