👋

GPT4o を OpenAI API + Gradio で使う

2024/05/14に公開

GPT4o を OpenAI API + Gradio で使う

ただのメモです。公式以上の情報はないです。.env ファイルに OPENAI_API_KEY を設定している前提です。

.env
OPENAI_API_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

環境構築 (Anacondaの場合)

$ conda create -n llm python=3.12
$ conda activate llm
$ pip install openai python-dotenv gradio

環境名は llm でなくても問題ないです。

コード

GPT4o がマークダウン形式で出力してくる場合に一応対応したつもり。

import os
from dotenv import load_dotenv
from openai import OpenAI
import gradio as gr

load_dotenv()
client = OpenAI(api_key=os.environ['OPENAI_API_KEY'])

def chat( prompt ):
  completion = client.chat.completions.create(
    model="gpt-4o",
    messages=[
      {"role": "system", "content": "あなたは日本語の助言者です。"},
      {"role": "user", "content": prompt }
    ]
  )
  return completion.choices[0].message.content

with gr.Blocks() as demo:
    prompt = gr.Textbox(label="Prompt")
    output = gr.Markdown(label="Output Box")
    greet_btn = gr.Button("Send")

    greet_btn.click(fn=chat, inputs=prompt, outputs=output)


# 起動
#demo.launch(server_port=80) # ポートを指定する場合
demo.launch()

実行画面

おまけ

外部に公開する

share=True とすると、ローカルマシンでサーバを起動しても、インターネット上の他のPCやスマフォなどから Gradio のサーバにアクセスできりょうになります。

demo.launch(share=True)

実行すると gradio.live ドメインの URL が表示されます。この URL で、ローカルマシンに立てたサーバでも(外部のマシンから)アクセスできるようになります。

Running on public URL: https://f04abadd699c812ab3.gradio.live

ただし、全世界からアクセス可能になるので、URL が漏洩すると猛烈に課金されることになります。

アクセス制限をかける

auth=("user","password") とすると、サーバにアクセス制限をかけられます。あくまで簡易なものなので、過信は禁物です。

demo.launch(auth=("bbled","cholchika"))

サーバにアクセスすると、ログインページが表示されます。ここで設定したユーザ名とパスワードを入力することで、アプリ本体のページにアクセスできるようになります。

"image.png"

ユーザ名とパスワードの組を複数設定することもできます。

demo.launch(auth=[("bbled_foo","cholchika_foo"),("bbled_bar","cholchika_bar")])

サーバのポートを変更する

server_port で使用するポートを指定できます。例えば、8080 ポートを使いたい場合は下記のようにします。

demo.launch(server_port=80880)

デフォルトでは 7860 ポートが使用されます。

Docker コンテナでサーバを立てる場合

Docker コンテナ内でサーバを立てる場合でも share=True を使えば、ポートフォワードの設定なしでサーバを公開できます。share=True を使わない場合は、サーバ名を 0.0.0.0 としてサーバを立てます。

demo.launch(server_name='0.0.0.0')

これで、例えば以下のようにポートフォワードすることで、http://localhost:7860 にアクセスできるようになります。

$ docker run -it --rm -v e:/github/docker:/home -p 7860:7860 --gpus all image-id web.sh

AWS の EC2 など、クラウド上のサーバで実行するときも、サーバ名を 0.0.0.0 にする必要がある場合があります。

Discussion