はじめまして、クラウドソリューション開発部 新卒1年目の寺谷です。
最近、AI技術が急速に進化し、私たちでも簡単に利用することができるようになりました!
その中でも私が注目しているのは、情報を入力するだけで画像を生成する「Novel AI」と、質問に答えてくれる「Chat GPT」などのAI技術です。
「Novel AI」は、与えられた文章やキーワードに基づいて、小説やイラストを自動生成する能力を持っています。これにより、アイデアの視覚化やデザインの支援、仮想世界の構築など、さまざまな分野で活用できそうですね。
一方、「Chat GPT」は、自然言語処理技術を駆使して、ユーザーの質問や要望に対して自然な会話形式で応答することができます。これにより、様々な情報や知識をわかりやすく伝えることが可能になり、教育や情報検索などの分野で重宝されています。
私自身も、仕事の際に分からない点があれば、Chat GPTをよく活用しています。拡張機能を利用すれば、最近の出来事についても知ることが出来るためとても重宝してます!!
そして今回は、タイトルにもある通りChat GPTのAIとGoogle Chatを連携させてChat Botを作ってみました。
背景
先ほど説明したとおり、現在AIブームがきており、仕事内でAIを利用することが多くあります。弊社では、仕事内で疑問が生じた場合には、ChatGPTを使用して調査することがよくあります。
しかし、ChatGPTの利用の際には、機密情報を入力してしまうと学習モデルに利用されて情報を漏洩してしまうのではないかという懸念点がありました。また、利用の際には細心の注意を払っていたとしても機密データを入力してしまいインシデントとなる事案が発生していました。
そこで、業務でChatGPTを利用するのではなく、Azure Open AIが提供しているChatGPTのAI機能を部分的に利用することにしました。これにより万が一機密情報を入力してしまっても学習されないように実装するため、Chat GPTのAIとGoogle Chatを連携させたChatBotの実装に取り掛かりました!
また、Azure Open AIのGPT4.0を契約する場合には、従量課金制(リクエストする度に課金されていくため)で利用することができるというメリットもあります!
システム構成と流れについて
システム構成については、下図のようになっております。Google Chat Botを利用するにあたり、同じGoogle社が提供しているGCP(Google Cloud Platform)のCloud Functionを利用しています。これによりGoogle Chatでbotを作成する際のスクリプトを省ける点やGoogle Cloud Consoleを通じて統合された監視、管理が行えるメリットがあります。
そして、Chat GPTのAI部分に関しては Azure Open AIのGPT-3.5 Turboを利用しています。このGPT-3.5 Turboは普段私たちがChat GPTを利用する際にデフォルトで適用されているAIモデルです。一応、GPT-4という上位モデルがありましたが、課金額が1リクエストあたり約13円するらしく、とても高かったので今回は見送りました・・・。
開発で考えたこと
Google Chatの個人間でのメッセージ送信確認時には、AIを常に利用可能にすることで、ChatGptを利用しているかのように実装しました。
一方、グループチャットではメンションがあった場合にAIを活用します。これにより、必要な時にAIを利用できるようになり、APIの無駄な演算を抑え、課金額を削減できます。下記の例より、メンションがないときは、Chat Botは反応せず、メンションがあるときにAIモデルを使った返信をしてくれていることがわかります。
また、Cloud Functionの開発言語としてPythonを選定しました。この選択の理由は、Pythonには「openai」というライブラリが存在し、Azure Open AIのAPIリクエストの設定が容易に行えるからです。
下記のように設定することで、リクエストを簡単に送ることができます。
参考にしたウェブサイトはこのサイトです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import openai # GPTモデル・API認証情報の記述 # 【要対応】Azure OpenAI の APIキーを記述 AZURE_OPENAI_API_KEY = "......." # 【要対応】Azure OpenAI エンドポイント AZURE_OPENAI_ENDPOINT = "......." # 【要対応】Azure AI Studioで作成したGPTモデルのDeployment Nameを指定 DEPLOYMENT_NAME = "......." # OPENAI API VERSION OPENAI_API_VERSION = "2023-03-15-preview" # API認証情報をopenaiに設定 openai.api_type = "azure" openai.api_base = AZURE_OPENAI_ENDPOINT openai.api_version = OPENAI_API_VERSION openai.api_key = AZURE_OPENAI_API_KEY |
メッセージの作成は下記のように行っています
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
def create_message(text:str,name: str) -> Mapping[str, Any]: # conversationでは、Chatでのやり取りとなる部分を入力します。 #メッセージのやり取りDBなどに保存してconversationに入力することで一問一答にならないで済みます。 #今回は、DBの利用は考えていないので、一問一答形式となっています。 conversation = [ {"role": "system","content": "あなたは優秀なアシスタントです。質問に対して丁寧に回答してください。"}, {"role": "user", "content": text}, ] response = openai.ChatCompletion.create( engine = 'dev-chatbot-openai', #model="gpt-3.5-turbo", # 使用するモデルを指定 messages=conversation, # 対話データを指定 #request_timeout=120 #タイムアウトの指定 ) chat_response = response['choices'][0]['message']['content'] #ここでメンション用の名前と送信用のメッセージを紐づけています res = name + chat_response message_data = { 'text': res, 'thread': { 'name': 'thread-name' } } return message_data |
今後の展望
今回開発したChat Botでは、質問をなげかけたら瞬時にGPTによってメッセージが返信されるため、気軽にChat GPTのAIモデルを利用することができるようになりました。
一方で、Google Chatでのやりとりの中で、AIモデルに前回質問した内容を引き継ぐ機能を開発していなかったため、一問一答形式となってしまいました。これでは、毎回丁寧に質問を繰り返すという手間が発生してしまいます。この問題を解決するには、データベースを活用し、メッセージをユーザーごとに紐づけてGPTを利用することで解決できると考えています。時間があれば、今回の問題を解決し、Chat Botの更なる改善を図っていきたいです。
今回は最後まで記事を閲覧いただき、ありがとうございました。