GPT4o を OpenAI API + Gradio で使う
GPT4o を OpenAI API + Gradio で使う
ただのメモです。公式以上の情報はないです。.env
ファイルに OPENAI_API_KEY
を設定している前提です。
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"))
サーバにアクセスすると、ログインページが表示されます。ここで設定したユーザ名とパスワードを入力することで、アプリ本体のページにアクセスできるようになります。
ユーザ名とパスワードの組を複数設定することもできます。
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