【Arc A770】Gradio を使って gpt-oss-20B で翻訳アプリを作る


はじめに

OllamaがVulkanをサポートしたのでIntel GPUを使用するのが非常に簡単になりました。
touch-sp.hatenablog.com

今回はgtp-oss-20Bを使って翻訳アプリを作りました。

バックグラウンドでOllamaが起動していれば以下のpythonコードを実行するだけで使えます。

Pythonコード

(gradio==5.50.0を使っています。gradio >=6.0では使えません)

import gradio as gr
from ollama import Client

# Ollamaクライアント初期化(ローカルサーバーに接続)
client = Client(host='http://localhost:11434')

def translate_text(text, direction):
    """テキスト翻訳(双方向対応)"""
    if not text.strip():
        return ""
    
    # 翻訳方向に応じてシステムプロンプトとユーザープロンプトを設定
    if direction == "英語→日本語":
        system_content = "あなたは英語から日本語への翻訳に特化した優秀なAIアシスタントです。回答は翻訳文にとどめ、日本語に翻訳するだけです。"
        user_content = f"次の英語を日本語に翻訳して下さい。\n{text}"
    else:  # "日本語→英語"
        system_content = "あなたは日本語から英語への翻訳に特化した優秀なAIアシスタントです。回答は翻訳文にとどめ、英語に翻訳するだけです。"
        user_content = f"次の日本語を英語に翻訳して下さい。\n{text}"

    prompt = [
        {
            "role": "system",
            "content": system_content,
        },
        {
            "role": "user",
            "content": user_content,
        }
    ]

    # Ollamaモデルにリクエストを送信
    stream = client.chat(
        model="gpt-oss:latest",
        messages=prompt,
        stream=True
    )

    result = ""
    for new_text in stream:
        result += new_text.message.content
        yield result

# Gradioインターフェースの構築
demo = gr.Interface(
    fn=translate_text,
    inputs=[
        gr.Textbox(lines=10, max_lines=40, label="翻訳元テキスト"),
        gr.Radio(
            choices=["英語→日本語", "日本語→英語"],
            value="英語→日本語",
            label="翻訳方向"
        )
    ],           
    outputs=gr.Textbox(lines=10, max_lines=40, show_copy_button=True, label="翻訳結果"),                    
    title="gpt-oss-20b 翻訳アプリ(Ollama版)",
    description="テキストを入力し、翻訳方向を選択してください。英語⇔日本語の双方向翻訳が可能です。"
)

# アプリケーションの起動
if __name__ == "__main__":
    demo.launch()