fix(ai): enforce zero-relative clause preservation and anti-omission rules in literary prompt

This commit is contained in:
2026-10-06 22:43:55 +03:00
parent 532e2ec3b2
commit 63e0c6fc07
2 changed files with 9 additions and 7 deletions
+7 -6
View File
@@ -51,18 +51,19 @@ def build_translation_prompt(
return ( return (
"Ты — профессиональный литературный переводчик художественной и научно-популярной литературы на русский язык.\n" "Ты — профессиональный литературный переводчик художественной и научно-популярной литературы на русский язык.\n"
"Твоя задача — перевести указанное английское предложение на красивый, естественный и грамотный русский литературный язык, идеально вписывающийся в повествование книги.\n\n" "Твоя задача — перевести указанное английское предложение на красивый, естественный, богатый и грамматически безупречный русский язык, идеально вписывающийся в повествование книги.\n\n"
f"{context_section}" f"{context_section}"
f'Предложение для перевода:\n"{clean_sentence}"\n\n' f'Предложение для перевода:\n"{clean_sentence}"\n\n'
f"{target_section}" f"{target_section}"
"Обязательные правила перевода:\n" "Обязательные правила перевода:\n"
"1. Перевод должен быть живым и художественным (НЕ дословным, без топорного калькирования).\n" "1. ПОЛНОТА И СВЯЗНОСТЬ: Переводи абсолютно ВСЕ смысловые части и придаточные обороты без пропусков! Обращай особое внимание на бессоюзные определительные обороты (zero relative clauses, например: 'the book I read' -> 'книга, которую я читал', 'Tuesday our story starts' -> 'вторник, с которого начинается наша история'). Ничего не выбрасывай!\n"
"2. Переводи всё предложение ПОЛНОСТЬЮ от начала до конца, не обрывая на точках, обращениях или знаках препинания.\n" "2. БЕЗ ДОСЛОВНОГО КАЛЬКИРОВАНИЯ: Никаких топорных калек предлогов ('on Tuesday' -> 'во вторник', а не 'на вторнике'). Парные эпитеты ('dull, gray') переводи богатыми русскими синонимами ('пасмурный, серый'), не повторяя одно и то же слово.\n"
"3. Обязательно сохраняй обращения и титулы: Mr. -> мистер, Mrs. -> миссис, Dr. -> доктор, Prof. -> профессор, St. -> святой/Сент-. Не теряй их!\n" "3. ИМЕНА И ТИТУЛЫ: Имена персонажей и фамилии передавай полностью на русском языке (кириллицей), без латинских букв (Mr. and Mrs. Dursley -> мистер и миссис Дурсли). Сохраняй титулы: Mr. -> мистер, Mrs. -> миссис, Dr. -> доктор, Prof. -> профессор.\n"
"4. В поле \"word_meaning\" укажи только точный перевод выделенного слова на русский язык в контексте данного предложения (выбрав самый подходящий вариант из словарных подсказок).\n\n" "4. РУССКИЙ СИНТАКСИС: Сохраняй естественный русский порядок слов (обстоятельства времени и места ставь перед сказуемым: 'вскоре по всей стране начнут происходить...').\n"
f'5. В поле "word_meaning" укажи только точный перевод слова "{clean_word}" на русский язык в контексте этого предложения (выбрав лучший вариант из подсказок).\n\n'
"Ответь ИСКЛЮЧИТЕЛЬНО в формате JSON:\n" "Ответь ИСКЛЮЧИТЕЛЬНО в формате JSON:\n"
"{\n" "{\n"
' "sentence_ru": "полный литературный перевод всего предложения",\n' ' "sentence_ru": "полный качественный литературный перевод всего предложения без пропусков",\n'
f' "word_meaning": "{"русский перевод слова в данном контексте" if clean_word else ""}"\n' f' "word_meaning": "{"русский перевод слова в данном контексте" if clean_word else ""}"\n'
"}" "}"
) )
+2 -1
View File
@@ -1920,7 +1920,8 @@ def test_robust_sentence_split_and_ai_translation(monkeypatch):
assert "briefcase" in prompt assert "briefcase" in prompt
assert "портфель, кейс, дипломат" in prompt assert "портфель, кейс, дипломат" in prompt
assert "Mr. -> мистер" in prompt assert "Mr. -> мистер" in prompt
assert "НЕ дословным, без топорного калькирования" in prompt assert "БЕЗ ДОСЛОВНОГО КАЛЬКИРОВАНИЯ" in prompt
assert "ПОЛНОТА И СВЯЗНОСТЬ" in prompt
# 3. Test API endpoint /api/translate-sentence # 3. Test API endpoint /api/translate-sentence
# Authenticate client # Authenticate client