Improve translation reliability and progress feedback

This commit is contained in:
burnintuna 2026-07-30 17:07:02 +09:00
parent 9439858b11
commit 51a6e845d1
20 changed files with 1194 additions and 216 deletions

View file

@ -5,13 +5,21 @@
SYSTEM_PROMPT_PHASE1 = """\
당신은 전문 번역가입니다. 사용자의 지시에 따라 원문을 도착 언어로 번역하고, \
고유명사를 추출하며, 내용 요약을 작성하고, 문체를 분석합니다.\
고유명사를 추출하며, 내용 요약을 작성하고, 문체를 분석합니다. 번역할 원문의 \
주어와 목적어, 인칭, 시제, 양태, 높임 수준을 정확히 보존합니다.\
"""
def build_phase1_user_prompt(source_text: str, target_language: str) -> str:
def build_phase1_user_prompt(
source_text: str, source_language: str, target_language: str
) -> str:
source_instruction = (
"원문의 언어를 자동으로 판단하고"
if source_language == "auto"
else f'원문이 "{source_language}"임을 전제로'
)
return f"""\
다음 원문을 "{target_language}"으로 번역하세요.
{source_instruction} 다음 원문을 "{target_language}"으로 번역하세요.
번역 결과를 반드시 아래 JSON 포맷으로만 반환하세요 (마크다운 코드 블록 없이 순수 JSON):
@ -44,13 +52,14 @@ SYSTEM_PROMPT_PHASE3 = """\
def build_phase3_user_prompt(
source_text: str,
phase1_translated: str,
proper_nouns: list[dict],
style: str,
target_language: str,
) -> str:
pn_lines = "\n".join(
f" - {pn['original']}{pn.get('final', pn.get('suggested', ''))}"
f" - {pn['original']}{pn.get('final') or pn.get('suggested', '')}"
for pn in proper_nouns if pn.get("original") or pn.get("suggested")
)
@ -65,10 +74,15 @@ def build_phase3_user_prompt(
재번역 규칙:
1. 고유명사 매핑을 반드시 준수하세요
2. 지시된 문체에 맞게 어조를 조정하세요
3. 초벌 번역의 의미는 유지하되 자연스럽고 정확히 다듬으세요
3. 원문을 기준으로 초벌 번역의 누락이나 오역을 바로잡으세요
4. 결과만 반환하세요 (설명 없이 번역문만)
초벌 번역:
원문:
---
{source_text}
---
초벌 번역 참고본:
---
{phase1_translated}
---"""
@ -78,7 +92,8 @@ def build_phase3_user_prompt(
SYSTEM_PROMPT_PHASE4 = """\
당신은 "{target_language}" 원어민 편집자입니다. 제공된 번역문을 \
"{target_language}" 화자에게 읽기 편하도록 다듬으세요.\
"{target_language}" 화자에게 읽기 편하도록 다듬되, 번역문의 의미 관계와 \
인칭, 시제, 양태, 높임 수준은 변경하지 마세요.\
"""
@ -86,9 +101,10 @@ def build_phase4_user_prompt(
phase3_result: str,
proper_nouns: list[dict],
style: str,
target_language: str,
) -> str:
pn_lines = "\n".join(
f" - {pn['original']}{pn.get('final', pn.get('suggested', ''))}"
f" - {pn['original']}{pn.get('final') or pn.get('suggested', '')}"
for pn in proper_nouns if pn.get("original") or pn.get("suggested")
)
@ -102,10 +118,12 @@ def build_phase4_user_prompt(
다듬기 규칙:
1. 고유명사는 절대 변경하지 마세요
2. 한국어 화자에게 자연스럽게 읽히도록 어순과 표현을 조정하세요
2. {target_language} 화자에게 자연스럽게 읽히도록 어순과 표현을 조정하세요
3. 문장은 간결하고 명확하게 다듬으세요
4. 의미는 반드시 유지하세요
5. 결과만 반환하세요 (설명 없이 번역문만)
5. 주어와 목적어, 화자와 청자의 관계를 뒤바꾸지 마세요
6. 인칭, 시제, 희망·추측 등의 양태와 높임 수준을 변경하지 마세요
7. 결과만 반환하세요 (설명 없이 번역문만)
번역문:
---