Initial working translator implementation
This commit is contained in:
commit
9439858b11
35 changed files with 5365 additions and 0 deletions
113
backend/prompts.py
Normal file
113
backend/prompts.py
Normal 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}
|
||||
---"""
|
||||
Loading…
Add table
Add a link
Reference in a new issue