Initial working translator implementation

This commit is contained in:
burnintuna 2026-07-30 14:53:36 +09:00
commit 9439858b11
35 changed files with 5365 additions and 0 deletions

113
backend/prompts.py Normal file
View file

@ -0,0 +1,113 @@
"""Phase 1~4 prompt templates for the translation pipeline."""
# ── Phase 1: 초벌 번역 + 고유명사 추출 + 요약 + 문체 분석 ─
SYSTEM_PROMPT_PHASE1 = """\
당신은 전문 번역가입니다. 사용자의 지시에 따라 원문을 도착 언어로 번역하고, \
고유명사를 추출하며, 내용 요약을 작성하고, 문체를 분석합니다.\
"""
def build_phase1_user_prompt(source_text: str, target_language: str) -> str:
return f"""\
다음 원문을 "{target_language}"으로 번역하세요.
번역 결과를 반드시 아래 JSON 포맷으로만 반환하세요 (마크다운 코드 블록 없이 순수 JSON):
{{
"translated": "(도착어 번역문)",
"proper_nouns": [
{{"original": "(원문 고유명사)", "suggested": "(제안 도착어 번역)"}}
],
"summary": "(내용 요약, 2-3문장以内)",
"style": "(문체 분석: 예: '공식적인', '친근한', '학술적', '보도풍', '문학적이고 서정적인' 등)"
}}
고유명사 추출 규칙:
- 인물명,地名, 기관명, 제품명, 작품명 고유 명사를 포함
- 일반 명사는 제외 (: "정부", "회사" 제외)
- 없는 경우 배열 [] 반환
원문:
---
{source_text}
---"""
# ── Phase 3: 재번역 (고유명사 + 문체 적용) ───────────────
SYSTEM_PROMPT_PHASE3 = """\
당신은 숙련된 번역 교정가입니다. 제공된 초벌 번역문을 고유명사 매핑과 \
문체 지시를 엄격히 적용하여 재번역하세요.\
"""
def build_phase3_user_prompt(
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', ''))}"
for pn in proper_nouns if pn.get("original") or pn.get("suggested")
)
return f"""\
다음 초벌 번역문을 "{target_language}"으로 재번역하세요.
고유명사 매핑 (반드시 적용):
{pn_lines}
문체: {style}
재번역 규칙:
1. 고유명사 매핑을 반드시 준수하세요
2. 지시된 문체에 맞게 어조를 조정하세요
3. 초벌 번역의 의미는 유지하되 자연스럽고 정확히 다듬으세요
4. 결과만 반환하세요 (설명 없이 번역문만)
초벌 번역:
---
{phase1_translated}
---"""
# ── Phase 4: 가독성 개선 ───────────────────────────────
SYSTEM_PROMPT_PHASE4 = """\
당신은 "{target_language}" 원어민 편집자입니다. 제공된 번역문을 \
"{target_language}" 화자에게 읽기 편하도록 다듬으세요.\
"""
def build_phase4_user_prompt(
phase3_result: str,
proper_nouns: list[dict],
style: str,
) -> str:
pn_lines = "\n".join(
f" - {pn['original']}{pn.get('final', pn.get('suggested', ''))}"
for pn in proper_nouns if pn.get("original") or pn.get("suggested")
)
return f"""\
다음 번역문을 읽기 편하고 자연스러운 문장으로 다듬으세요.
고유명사 (변경 금지):
{pn_lines}
문체: {style}
다듬기 규칙:
1. 고유명사는 절대 변경하지 마세요
2. 한국어 화자에게 자연스럽게 읽히도록 어순과 표현을 조정하세요
3. 문장은 간결하고 명확하게 다듬으세요
4. 의미는 반드시 유지하세요
5. 결과만 반환하세요 (설명 없이 번역문만)
번역문:
---
{phase3_result}
---"""