Здравствуйте, я использую локальную модель `google/gemma-3-4b` с последней версией Discourse. Модель хорошо работает с некоторыми языками. Когда я тестирую её через API или LM Studio, она предоставляет резюме на запрашиваемом языке.
В настоящее время Discourse всегда делает резюме на английском языке. Ниже описаны шаги для жесткого задания языка суммаризации (не на английском).
Важно! Ваши изменения будут потеряны при следующей пересборке.
Ниже приведены строки для жесткого кодирования в двух файлах. Значения из таблицы ai_personas не используются (июль 2025). Для тех, кто работает в не-продакшн окружениях, вы можете жестко задать свой родной язык:
-
Подключитесь к серверу по SSH.
-
Скопируйте файл `summarize.rb` из контейнера в файловую систему хоста:
sudo docker cp app:/var/www/discourse/plugins/discourse-ai/lib/personas/tools/summarize.rb ./summarize.rb -
Теперь отредактируйте файл, заменив системный промпт на английском языке на желаемый язык:
Сводка
system_prompt = <<~TEXT Вы — бот, выполняющий суммаризацию текста. Вы умеете эффективно сокращать текст до ключевых мыслей. Вы понимаете и умеете генерировать разметку Markdown в Discourse. При необходимости добавляйте ссылки в формате: #{topic.url}/POST_NUMBER, например: [ссылка](#{topic.url}/77) TEXT user_prompt = <<~TEXT Руководство: #{guidance} Вы суммаризуете топик: #{topic.title} Пожалуйста, предоставь ответ на русском языке. В ответе используй 400 слов: #{text} TEXTРезультат, например:
system_prompt = <<~TEXT Вы — бот, выполняющий суммаризацию текста. Вы умеете эффективно сокращать текст до ключевых мыслей. Вы понимаете и умеете генерировать разметку Markdown в Discourse. При необходимости добавляйте ссылки в формате: #{topic.url}/POST_NUMBER, например: [ссылка](#{topic.url}/77) TEXT user_prompt = <<~TEXT Руководство: #{guidance} Вы суммаризуете топик: #{topic.title} Пожалуйста, предоставь ответ на русском языке. В ответе используй 400 слов: #{text} TEXT -
Далее сделайте то же самое для второго файла:
sudo docker cp app:/var/www/discourse/plugins/discourse-ai/lib/personas/summarizer.rb ./summarizer.rbОтредактируйте:
Примечание: вы можете переопределить язык исходного текста:
- Используйте русский язык, несмотря на язык оригинала исходного текста.Сводка
<<~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 ... [ "Вот записи внутри XML-тегов <input></input>:\n\n<input>1) user1 сказал: Я люблю понедельники 2) user2 сказал: А я ненавижу понедельники</input>\n\nСформулируйте краткое, связное изложение текста выше, сохранив язык оригинала.", { summary: "Два пользователя делятся своими чувствами к понедельникам. [user1]({resource_url}/1) ненавидит их, тогда как [user2]({resource_url}/2) любит их.", }.to_json, ],Результат:
<<~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, ], -
Скопируйте измененные файлы в контейнер:
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 -
Затем выполните коммит и перезапустите контейнер:
sudo docker commit app sudo /var/discourse/launcher restart app -
Проверьте результат (для новых тем):

