みらいテックラボ

音声・画像認識や機械学習など, 週末プログラマである管理人が興味のある技術の紹介や実際にトライしてみた様子などメモしていく.

Kingyo AI NaviでChatGPTを試す(2)

数年前に, 金魚の種類を判別したり, 大和郡山市や金魚に関する情報を提供する「Kingyo AI Navi」っていうプロトタイプ[1]を作成した.

mirai-tec.hatenablog.com

最近ChatGPTがかなり流行っており, ChatGPTを「Kingyo AI Navi」に組み込むことで新たな情報提供ができないか検討を開始した.


関連記事:


今回は, ChatGPTを実際に「Kingyo AI Navi」に組み込み, LINE側から質問を投げかけ動作を確認してみた.


1. Kingyo AI Naviへの組み込み
「Kingyo AI Navi」のサーバ内で, LINEからテキスト入力があった場合にChatGPTを呼び出すように修正してみた.
以下に, 関連する部分のコードを記しておく.

[コード]

# Handle text message
@handler.add(MessageEvent, message=TextMessage)
def handle_text_message(event):
    try:
        print('message = {}'.format(event.message.text))
         # DialogFlow
        message, params = dflow.send_text_request(event.message.text)
        print('*** {}, {}'.format(message, params))
        if message == 'HELLO':
            messages = TextSendMessage(text='こんにちは. '+chr(0x100078)+'\nKingyo AI Naviだよ. '+chr(0x10002D))
        elif message == 'UPLOAD':
            messages = TextSendMessage(text='金魚が写った写真を送ってみてね!')
        else:
            # messages = make_buttons_template(message, params)
            # ChatGPT
            answer = ask_chatgpt(event.message.text, char_limit)
            messages = TextSendMessage(text=answer)
        reply_message(event, messages)

    except Exception as e:
        import traceback
        traceback.print_exc()
        reply_message(event, TextSendMessage(text='何を知りたいのかな?\n金魚の飼い方, 病気などなら答えられるよ.'))

def ask_chatgpt(input_text, limit):
    input_text += f' {limit}文字以内にまとめて'
    response = openai.ChatCompletion.create(
        model = "gpt-3.5-turbo",  # 利用モデルのID
        messages = [{
            "role" : "user",
            "content" : input_text,
        }],
        max_tokens = 1024,  # 入力トークンと生成トークンの合計の最大数
        n = 1,  # 入力メッセージに対するチャット選択肢の数
        temperature = 0.3,  # 出力内容のランダム性(0-2)
    )
    return response.choices[0].message.content


2. 動作確認
Kingyo AI NaviのLINEアプリから, いくつか質問を投げてみた.

[従来]

[ChatGPT版]

こんな質問にも答えられるようになったー.

大和郡山に関する質問に対する応答は微妙な感じがするが, 動作は一応問題なさそう.
あと, やはりレスポンスが遅いと感じるのと, 応答文を100文字に制限しているが文字数が多いと読むのが少し大変.
レスポンスに関しては, ブラウザ版のChatGPTのように逐次応答内容を表示できれば, 表示された部分から読むことができ, レスポンスが遅いとはあまり感じないのだが, 現状ではLINE側が一括で応答を返すことしかできないようなので遅く感じる.
応答内容を最後まで取得する時間はあまり変わらないのだが...

Kingyo AI NaviへのChatGPT搭載はできたので, しばらくいろいろと試してみようと思う.

----
参照URL:
[1] 「Kingyo AI Navi」のアプリ化を考える(1)~(6) - みらいテックラボ