jju71 님의 블로그

번역 앱 예제 본문

Python/FastAPI

번역 앱 예제

jju71 2026. 7. 28. 13:49
load_dotenv()  # 환경변수 불러오기
api_key = os.getenv("OPENAI_API_KEY")

client = OpenAI(api_key=api_key)

 

# Few-shot 번역 예제 데이터
example = {
    "한국어" : [
        "오늘 날씨 어때?",
        "최근 멀티모달과 Agent 기술이 인기를 끌고 있다."
    ],
    "영어" : [
        "How is the weather today?",
        "Recently, multimodal and agent technologies have become popular"
    ],
    "일본어": [
        "今日の天気はどう?",
        "最近、マルチモーダルとAgent技術が人気を集めている。"
    ]
}

def build_fewshot(src_lang, trg_lang):
    src_examples = example[src_lang]
    trg_examples = example[trg_lang]
    fewshot_message = []

    for src_text, trg_text in zip(src_examples, trg_examples):
        fewshot_message.append({
            "role": "user",
            "content": src_text
        })

        fewshot_message.append({
            "role": "assistant",
            "content": trg_text
        })

    return fewshot_message

def translate_text_chatgpt(text, src_lang, trg_lang):
    system_instruction = (
        "당신은 전문 번역 애플리케이션입니다.\n"
        f"입력된 {src_lang} 문장을 자연스러운 {trg_lang} 문장으로 번역하세요.\n"
        "설명, 부연 설명, 따옴표, 제목을 추가하지 마세요.\n"
        "번역된 텍스트만 출력하세요."
    )

    fewshot_messages = build_fewshot(
        src_lang=src_lang, trg_lang=trg_lang
    )

    messages = [
        { "role": "developer", "content": system_instruction },
        *fewshot_messages,
        { "role" : "user", "content": text }
    ]

    try:
        response = client.responses.create(
            model="gpt-5-nano",
            input=messages,
            reasoning={ "effort": "low"}, # 복잡한 추론을 사용하지 않도록 옵션 부여
            # 번역은 추론이 필요 없으니까
            max_output_tokens=500
        )

        translate_text = response.output_text.strip()
        if not translate_text:
            return "변역 결과가 생성되지 않았습니다. 다시 시도해 주세요."

        return translate_text

    except Exception as e:
        print(f'OpenAI API 오류: {e}')
        return f'번역 중 오류가 발생했습니다: {e}'


def gradio_translate(text, src_lang, trg_lang):
    if text is None or not text.strip():
        return "번역할 내용을 입력하세요"
    if src_lang == trg_lang:
        return "원본 언어와 번역 언어가 같습니다. 다른 언얼르 선택하세요"

    return translate_text_chatgpt(text=text.strip(), src_lang=src_lang, trg_lang=trg_lang)

with gr.Blocks() as demo:
    gr.Markdown("# 초간단 번역 앱")
    text_input = gr.Textbox(
        label="번역할 내용을 입력하세요", placeholder="여기에 내용을 입력하세요", lines=3
    )
    src_lang_dropdown = gr.Dropdown(
        choices=["한국어", "영어", "일본어"], value="영어", label="원본 언어를 선택하세요"
    ) # value = 기본값
    trg_lang_dropdown = gr.Dropdown(
        choices=['한국어', '영어', '일본어'], value="한국어", label="번역할 언어를 선택하세요"
    )
    translate_button = gr.Button("번역하기")
    output_text = gr.Textbox(
        label="번역 결과", placeholder="번역된 결과가 여기에 표시됩니다", lines=5, interactive=False
    )
    translate_button.click(
        fn=gradio_translate, inputs=[text_input, src_lang_dropdown, trg_lang_dropdown], outputs=output_text
    )

demo.launch()

'Python > FastAPI' 카테고리의 다른 글

AI 광고 문구 생성 앱  (0) 2026.07.29
Gradio  (0) 2026.07.27
GPT API  (0) 2026.07.27
Fast API  (0) 2026.07.27