🤖

GPT-4oでパーソナルAI(LINE ChatBot)を作る

2024/07/28に公開

この記事で解説すること

この記事では、OpenAIのAPI(GPT-4o)とLINE APIを使用してChatBotを実装した内容を紹介します。LINE Botの実装方法に関しては様々な記事で紹介されていますので、詳細なソースコードなどは省き、実装の概念的な部分をメインで解説しています。

0. パーソナルAI「Coral」とは


Coral」と名付けたこのChatBotは、私が以前にLLMに関するLTイベントでデモ用に実装したLINEのChatBotです。このChatBotは、GPT-4oのAPI(FunctionCalling)を使用して、様々な外部APIと連携して色々な操作が可能です。

例として、「Coral」には以下のような機能を実装しました。

  • 一般的なChatBotとしてのコミュニケーション
  • 音声ファイルの認識
  • 画像ファイルの認識
  • 時間の概念を認識(後ほど解説)
  • connpassイベントの検索
  • 睡眠時間の管理
    • FitbitAPIとの連携
  • 体重、体脂肪率の管理
    • HealthPlanetAPIとの連携
  • 自宅の鍵の解錠
    • SwitchbotAPIとの連携


1. 実装に使用した技術スタック/リソース

この実装では、主に以下のサービスを使用しています。

  • AWS
    • AWS Lambda(node.js)
    • API Gateway
    • Amazon SQS
    • Amazon RDS
    • Amazon EventBridge
    • AWS CloudFormation
  • その他
    • Hasura(GraphQLエンジン)

RDSとの接続は、実際には全てHasura(GraphQL)を介して行われます。Hasuraに関しての詳しい情報は、別で書いた記事がありますので、そちらをご参照ください。
コストを掛けずにHasura+Neon+Vercelで作るプロトタイピング環境

2. LINEにメッセージが送信される

LINEからWebhookAPI Gatewayで受け取り、エンキュー用のLambdaSQSにキューを積み、最終的な処理をするLambdaに渡すというよく見る形です。この形は本当によく使うので、CloudFormation(又はTerraform)のテンプレとして幾度となく擦っている。

OpenAIやLINEのAPIのレート制限に引っかかると厄介なので、念の為SQSは噛ませておくと安心ですが、もうひとつユーザからのメッセージをキューに積んでおきたい理由があります。

3. メッセージのやり取りは一問一答とは限らない

普通にLINEやSlackなどのサービスを使っていれば当たり前ですが、人間とコミュニケーションを取る際に、メッセージ1通につき相手からも1通メッセージが開けてくるとは限らないですよね。

2~3通メッセージを送って、相手から1通の返信があるという状況は当たり前にある状況です。ことAIのChatbotに限っては、一問一答が当たり前のようになっていますが、一定時間内であれば、2通のメッセージを1回のリクエストとして扱った方がパーソナルAIとしては使いやすいのでは?と個人的に思った結果、10秒以内であれば纏めてリクエストを行う実装としました。

今回の実装で言うと、LINEからメッセージが到達した際に、Hasura(GraphQL)とSubscriptionと開始します。

4. 時間の概念を認識

ChatGPTなどの生成AIサービスを普通に利用する際、今現在が何時とか、直近でメッセージをやり取りしたのは何月何日の何時なのか、その辺りは認識されないイメージです。
ただ、これが認識できていないと何だか淋しいような気がしたので、メッセージのやり取りに時間を付与しました。

単純ですが、どんなやり取りをいつしたかという記憶は、人間にとっては非常に重要な情報だと考えました。
この情報があると、例えば簡単なスケジュールやタンクなどを覚えておいて貰うといったことも可能となります。

5. 外部サービスとの連携

外部サービス、例えば今回であればヘルスケア系のAPI、Fitbit(スマートウォッチ)やHealthPlanet(タニタの体組成計)、IoT系のデバイス(Switchbot)との連携はFunctionCalling(OpenAIで言うとTools)で実施しています。

簡単に説明すると、FunctionCallingとは、予め定義したJsonの形で生成AIからレスポンスを貰うこと、と言えるでしょう。以下は、connpassのAPIにリクエストすることを想定し、GPT-4oにイベントを探したい旨のリクエストが来た場合に、必ず以下の形式でレスポンスするよう指示をしたものです。

これにより、どんな外部サービス(API)とも連携可能な自分専用のChatBotが実装できます。

6. まとめ

今回使用したOpenAIのGPT-4o、特にFunctionCallingとChatBotの相性は非常に良く、身の回りのこと、自身の健康管理などを任せられるパーソナルAIを作るには、とても向いているのではと感じました。

次回、2024年8月2日のイベントでもこの実装の話をより深堀ってする予定ですので、興味のある方はぜひご参加くださいませ。当日は、実際にご自身のLINEアカウントからCoralをお試しいただけます。

【LT大会】AWSなら何でもOK!自慢のユースケースやアイディアを発表するLT会!

Finatext Tech Blog

Discussion