У меня есть одна-единственная просьба, и она всегда одна и та же: у вас есть промпт для этого, поэтому, пожалуйста, не прячьте его в пустоту кода. Всё, что мне нужно, — это добавить одну фразу: всегда использовать финский язык. Вот и всё. И внезапно всё начинает работать глобально.
Но теперь это просто трата моего времени, времени моих активных пользователей и времени всех анонимных пользователей, которых я привлекаю, включая тех, кому нужен такой сервис.
Это замечательная работа. Но из-за того, что не хватает одной функции… нет. Я хотел бы предложить это своим пользователям, потому что если они могут этим пользоваться, значит, сможет и каждый. Но нет никакого смысла генерировать это, сводки и так далее на английском языке на финском форуме.
В DiscourseAI у нас есть план по кастомизации промптов, который позволит пользователям быстро изменять все промпты, используемые в различных частях плагина. Я считаю, что мы сможем реализовать это в текущем году.
Тем временем мы можем централизовать такие запросы в этой теме.
Какая дилемма! Сделать промпты настраиваемыми — очень сложная задача.
Давайте разберем конкретный пример:
CompletionPrompt.seed do |cp|
cp.id = -306
cp.name = "explain"
cp.prompt_type = CompletionPrompt.prompt_types[:text]
cp.messages = { insts: <<~TEXT }
Ты — репетитор, объясняющий термин студенту в конкретном контексте.
Я предоставлю всю необходимую информацию внутри тегов <input>, которые содержат:
термин, который нужно объяснить, внутри тегов <term>;
контекст его использования внутри тегов <context>;
заголовок темы, где он был использован, внутри тегов <topic>;
и, опционально, предыдущее сообщение в диалоге внутри тегов <replyTo>.
Используя всю эту информацию, напиши абзац с кратким объяснением значения термина.
Отформатируй ответ в Markdown. Отвечай только объяснением и ничего больше.
TEXT
end
Как мы можем решить эту проблему и сделать промпты настраиваемыми?
Использовать систему перевода, перенеся инструкции в server.en.yml
Отказаться от модели “Completion Prompt” в пользу модели “AI Persona”
Предоставить редактор для модели “Completion Prompt”
Попробовать решить проблему с помощью промпт-инжиниринга
1. Использовать систему перевода, перенеся инструкции в server.en.yml
Плюсы
Мы сразу получим поддержку нескольких языков
Система уже существует, ничего нового строить не нужно
Очень гибкая настройка через переопределения локализации в админ-панели
Минусы
Многие LLM плохо работают с языками, отличными от английского; перевод может значительно ухудшить производительность
Если люди переведут теги (например, <title>), всё сломается
2. Централизация на AI Persona
Плюсы
У нас уже есть большая часть интерфейса
Тривиально добавлять или удалять функции у AI-помощника
Минусы
Мы не получим поддержку переводов из коробки
Нужно разработать интерфейс для привязки персоны к конкретной функции: (это для иллюстрации поста? для помощника в редакторе? для генератора заголовков бота?) — некоторые связи 1 к 1, некоторые 1 ко многим
Некоторые персоны не подходят для ботовых диалогов, так как требуют тегов <replyTo>, <item> и <input>.
3. Предоставить UI для Completion Prompts
Плюсы
Четкое разделение с персонами, меньше путаницы
Приятно иметь возможность добавлять новые промпты для пользователей… если нужно что-то ниже перевода, никаких проблем
Легко редактировать
Минусы
Сложность обработки “дрейфа” — если пользователь переопределил промпт, а мы исправили оригинал, добавив тег <something_new>, как пользователь узнает об этом?
4. Попробовать решить проблему с помощью промпт-инжиниринга
Если нам удастся сотворить это чудо, добавив немного кастомных инструкций, это может сработать хорошо. Например, добавить “ВАЖНО: все ответы должны быть на финском”, но добиться стабильной работы будет сложно.
Плюсы
Магия, всё работает
Минусы
На практике крайне маловероятно, что это будет работать стабильно; наличие кастомных инструкций на правильном языке гораздо лучше удерживает модель в рамках
Лично я склоняюсь к варианту (3). Особенно потому, что это дает возможность добавлять кастомные промпты и обеспечивает четкое разделение. Но я полностью понимаю вариант (2) как выход: возможно, нам удастся это реализовать, и это объединит кучу кода, что очень приятно. Нам нужно сначала поэкспериментировать с этой идеей, чтобы выбрать лучший вариант.
Нам (как администраторам конечных пользователей) не нужно целиком перепрограммировать промпт в таких ситуациях. Нам достаточно добавить в промпт запрос на использование конкретного языка. Я ничего не знаю о программировании, но в целом добавление текстовой строки к тексту — задача довольно тривиальная, не так ли? И вы же отправляете здесь просто текст?
И сам промпт, разумеется, должен быть на английском.
Речь идет именно о проблеме языка, а не об общей кастомизации промптов… но если бы у нас был выпадающий список языков, могли бы мы попросить ИИ перевести промпт (кроме тегов), а затем сохранить/отправить этот промпт?
Перевод промпта на финскийИИ
переведи это на финский, кроме тегов <>:
Ты — репетитор, объясняющий термин студенту в конкретном контексте. Я предоставлю всю необходимую информацию внутри тегов <input>, которые содержат термин, который нужно объяснить, внутри тегов <term>, контекст использования внутри тегов <context>, заголовок темы, где он использовался, внутри тегов <topic>, и, опционально, предыдущее сообщение в диалоге внутри тегов <replyTo>. Используя всю эту информацию, напиши абзац с кратким объяснением значения термина. Отформатируй ответ с помощью Markdown. Отвечай только объяснением и ничем больше.
Ты — репетитор, объясняющий термин студенту в конкретном контексте. Я предоставлю всю необходимую информацию внутри тегов <input>, которые содержат термин, который нужно объяснить, внутри тегов <term>, контекст использования внутри тегов <context>, заголовок темы, где он использовался, внутри тегов <topic>, и, опционально, предыдущее сообщение в диалоге внутри тегов <replyTo>. Используя всю эту информацию, напиши абзац с кратким объяснением значения термина. Отформатируй ответ с помощью Markdown. Отвечай только объяснением и ничем больше.
Могли бы технические детали быть вынесены в отдельную часть промпта? Тогда у нас был бы промпт примерно следующего вида:
Примени следующее поведение (администраторы могут редактировать или дополнять):
Ты — репетитор, объясняющий термин студенту в конкретном контексте.
Напиши абзацпредложение с кратким объяснением значения термина.
Отвечай только объяснением и ничем больше.
Используй много эмодзи
Используя эти технические детали (неизменяемые, мы обновляем их для предотвращения дрейфа):
термин, который нужно объяснить, находится внутри тегов <term>
контекст использования находится внутри тегов <context>
заголовок темы, где он использовался, находится внутри тегов <topic>
предыдущее сообщение в диалоге находится внутри тегов <replyTo> (опционально)
Нет, это действительно плохая идея. Это приведёт к двойному переводу, каждый раз изменяя промпт. Всё, что нужно, — это фраза «Ответить на [любой язык]»[1]. Ваша задача — решить, какой это будет язык, и я бы предложил тот же, который используется на этом форуме как локаль по умолчанию.
или «использовать»… это лишь вопрос формулировки, но она должна быть на английском. Хотя это верно для OpenAI, остальные для меня — неизведанная территория ↩︎
Извините, но, пожалуйста, не делайте этого. Этот PR отправляет запросы через прокси Netlify. Сегодня я попробую применить несколько простых исправлений.
Я протестировал до и после, и, по крайней мере, для GPT-4-Turbo и португальского языка при использовании редактора никаких изменений нет. Думаю, модель оказалась достаточно умной, чтобы оставить мой текст на исходном языке.
Описание изображения ИИ
Я расширил функционал для описания изображений, и там это работает очень хорошо:
Спасибо, ребята! По крайней мере, теперь субтитры создаются на нужном языке (а качество, как ожидается, будет хорошим, но это уже заслуга OpenAI, по крайней мере, для меня).
Краткие содержания… Пока не знаю, так как уже давно не мог их создать. Но это совсем другая история.