見出し画像

(gradio5)チャットボットの形式が変わっていましたね。messagesに変更しよう。

(gradio5)チャットボットの形式が変わっていましたね。messagesに変更しよう。

こんにちは、makokonです。今回は、Gradioでチャットボットを作成する際のバージョンアップに伴う変更についてお話しします。特に、Gradio 5での新しいメッセージ形式への対応に焦点を当てます。この変更は、従来のプログラムに手直しを要するものですが、結果的には多くの大規模言語モデル(LLM)のメッセージ形式と互換性を持たせることができ、便利です。では、具体的にどのように対応したのかを見ていきましょう。


新しいgradioの特徴についてはこちら。

多くの改善がされていますが、そのへんは詳しい解説を書いておられる方がたくさんいますので、適当に検索してください。基本的に互換性が保たれている限り、あまり気にしなくてもいいかなと思っています。

気になったのはこちら

便利機能としてGradioのチャットボットは、.retry、.undo、likeという3つのイベントを提供しており、これらの機能をアプリケーションに組み込むことができます。それはそれとして、このページには、サンプルコードとして

def respond(
    prompt: str,
    history,
):
    if not history:
        history = [{"role": "system", "content": "You are a friendly chatbot"}]
    history.append({"role": "user", "content": prompt})
# 以下略

というような、記述がありchatbotの形式が従来から変わっています。
OpenAIのAPIでも利用するうようなおなじみの、メッセージ形式ですで、とても便利になったとも言えますが、従来と互換性がないとなると問題ですね。
確認してみましょう

従来コード gradio4.py

pip install --upgrade gradio
$ pip list|grep gradio
gradio             5.3.0
gradio_client      1.4.2
import gradio as gr

with gr.Blocks() as demo:
    chatbot = gr.Chatbot()
    msg = gr.Textbox(label="チャット 質問を入力")

    def chat_ai(query,chat_history):
        response = "Hello Gradio World"
        chat_history.append((query,response))
        return "",chat_history
    
    msg.submit(chat_ai, [msg, chatbot], [msg, chatbot])
    

demo.launch(share=True)

テキストボックスになにか入力してエンターを押すと、"Hello Gradio World"と返す、人工無能チャットです。
これを実行すると、以下のようなwarningメッセージがずらずら出ます。

gradio-env/lib/python3.11/site-packages/gradio/components/chatbot.py:223:UserWarning: You have not specified a value for the `type` parameter. Defaulting to the 'tuples' format for chatbot messages, but this is deprecated and will be removed in a future version of Gradio. Please set type='messages' instead, which uses openai-style 'role' and 'content' keys.
この警告メッセージは、Gradioライブラリのchatbot.pyファイルの223行目で発生しています。具体的には、typeパラメータが指定されていないため、デフォルトでtuples形式が使用されていることを示しています。しかし、このtuples形式は将来的に削除される予定であるため、代わりにtype='messages'を設定することが推奨されています。このmessages形式は、OpenAIスタイルのroleとcontentキーを使用する形式です。この警告を解消するためには、チャットボットの設定でtype='messages'を指定してください。これにより、今後のバージョンでも問題なく動作するようになります。

今のところ、従来のままでも動いているようですが、将来的にはきっと互換性がなくなるでしょう。そもそも、実行するたびにこんなメッセージを見ていたら心が痛みます。
早速直しましょう。

新しいmessages形式への対応 gradio5.py

では早速

import gradio as gr

with gr.Blocks() as demo:
    #chatbot = gr.Chatbot()
    chatbot = gr.Chatbot(type="messages")
    msg = gr.Textbox(label="チャット 質問を入力")

    def chat_ai(query,chat_history):
        response = "Hello Gradio World"
        #chat_history.append((query,response))
        chat_history.append({"role":"user","content":query})
        chat_history.append({"role":"assistant","content":response})
        
        return "",chat_history
    
    msg.submit(chat_ai, [msg, chatbot], [msg, chatbot])
    

demo.launch(share=True)

変更した行は、
chatbot = gr.Chatbot(type="messages")
chat_history.append({"role":"user","content":query}) chat_history.append({"role":"assistant","content":response})
の3行です。
実行すると、無事ワーニングが消えました。
実行結果は「無能」なので、いいでしょう。
この結果、多くのLLMの会話履歴管理をそのまま利用できるので、とても便利ですね。
ただ、今回は事実上1箇所の変更でしたが、多くのチャットアプリでは、会話履歴だけでなく、システムメッセージや、エラーコード、テキストモード、画像モードなど多くの表示にチャットボットを利用していますので、メッセージ管理がバラけていると大変ですね。
この機会に、メッセージ管理を一つにまとめようと思います。

まとめ

今回は、Gradio 5へのアップデートに伴い、互換性が怪しくなる従来のチャットボットコードを新しいメッセージ形式に対応させました。この新形式は、多くのLLMと共通しており、より一貫性のあるメッセージ管理が可能です。Gradio 5の新機能を活用するためにも、今後はこの新しい形式を積極的に取り入れていくことをおすすめします。

#Gradio5
#ChatbotDevelopment
#MachineLearning
#AIIntegration
#PythonCoding
#OpenAI
#TechUpdates
#APIDevelopment
#SoftwareUpgrade
#DevCommunity
#チャットボット
#機械学習
#AI統合
#Pythonプログラミング
#技術アップデート
#API開発
#ソフトウェアアップグレード
#開発者コミュニティ




いいなと思ったら応援しよう!