第260回 SORACOM公式ブログ

ソラコム公式ブログ

ColaboratoryでChatGPTのAPIを使うには?― IoT-Tech Meetup #1

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事はソラコムが提供する「SORACOM公式ブログ」に掲載された「ColaboratoryでChatGPTのAPIを使うには?― IoT-Tech Meetup #1」を再編集したものです。

こんにちは、ソリューションアーキテクトの内田(ニックネーム: jet)です。

5/30に開催した、IoTや周辺技術の知見をエンジニア向けに共有するイベント「IoT-Tech Meetup 第1回【ChatGPT × IoT】」では、時系列データを生成系AI「ChatGPT」で分析・未来予測する利点や気を付けたいポイント、そして具体的な方法を紹介しました。

当日の様子や発表資料などは以下のブログをご覧ください。

ここでは【セッション2】 時系列データをChatGPTで読み解いてみるで紹介したデモについてお伝えします。当日の様子の補足として確認いただけると嬉しいです。

デモ環境

今回デモに利用した各環境は以下のとおりです。

実行環境はColaboratory(以下、Colab)を利用しています。これは、自分自身で構築する必要がなく、Webブラウザ上で誰でも利用可能であるため、APIを使って試行錯誤していく様な場合にはとても便利に使えます。

また、連携するサービスも今回は簡単に実現するために、MakeとSlackを利用しています。MakeはiPaaS(Integration Platform as a Service)と呼ばれるサービスのひとつで、システム間をつなげたり、データフローを制御できるサービスです。Makeに対してWebhookで情報をPOSTすると、その内容を Slackに通知する様に設定しています。

IoTデバイスのデータは、センサー情報が簡単にクラウド環境へアップロードできるためGPSマルチユニットSORACOM Editionを利用しています。データのアップロードの詳細については、SORACOM IoTレシピ:IoTで温湿度の可視化 をご覧ください。

OpenAI API

今回のデモではCreate chat completion APIを利用しています。API呼び出しに Pythonライブラリの openai / openai-python を利用しています。openai / openai-pythonMITライセンス で提供されていて、pip でインストールすれば使えるので便利かと思います。

ライブラリのインストール

Colabのコードセルでpipコマンドを実行してインストールします。ローカル環境と変わらずインストールが行えます。

!pip install --upgrade openai

API の利用準備

API を利用するには API Keyが必要になります。事前にOpenAIのサイトでAPI Keyを発行してください。また、今回作成したデモ用のUIはOrganization IDを利用しています。これは複数のOrganizationに所属している場合、明示的にどのOrganizationのAPIUsageを使用するかを指定するためです。

例えば、検証環境と本番環境を別々のOrganizationとしている場合、それぞれのOrganizationで料金のUsage limitが異なる場合や、個人のアカウントと会社のアカウントで使い分けが必要な場合などを想像してもらえればと思います。

API KeyやOrganizationの扱いについては、それぞれBest Practices for API Key SafetyProduction best practicesと言った記事がありますのでそちらをご覧ください。

APIの利用準備については、以下の様にデモ用のUIフォームの入力値をそのまま設定しているだけです。設定が終わった後にList models APIを呼び出して、APIが呼び出せるかどうかの確認をしています。

import openai  openai.organization = "YOUR_INPUT_ORG_ID" openai.api_key = "YOUR_INPUT_OPENAI_API_KEY" openai.Model.list()

チャットAPIを使う

ここでは実際にAPIを利用してチャットを行っています。messages パラメータには、ユーザーからの入力(role : user)と、AIからの返答(role : assistant)を含めて送信します。これによりAIとの過去のやり取りを考慮した返答が得られます。

システム(role:system) は、当日のセッション中にも説明しましたが、system で設定を行うことでAIからの返答をある程度コントロールできます。例えば、キャラクター名とそのキャラクターの口調(文調)の例となる文章を一緒に設定すると、キャラクターを擬似的に再現できます。

今回はこの仕組みを使って返答をJSON形式で返す様に指示しています。ただし、この制約が必ず守られるわけではないので、ユーザーからのプロンプト入力を工夫していく必要性があると感じました。

以下のコードが実際にデモで利用したものになります。会話の履歴をリストに入れて、それをそのままAPIに渡している部分がポイントです。また、実行状態がわかる様にprint()文が多く記載されています。

import openai  # OpenAI を使って Chat をする # https://platform.openai.com/docs/api-reference/chat/create def create_chat_completion(user_msg: str, model: str, temperature: float = 1.0, msg_history: list = None, system_msg: str = None) -> list:     params = dict()     params['temperature'] = temperature      messages = list()     if system_msg != None and system_msg != '':         messages.append({"role": "system", "content": system_msg})      messages.append({"role": "user", "content": user_msg})      params['messages'] = messages     if msg_history != None and len(msg_history) > 0:         params['messages'] = msg_history + messages      params['model'] = model          print()     print('# api_type = ', openai.api_type)     print('# api_model = ', model)     print('# 🌡 temperature = ', temperature)     print('# 👻 system = ', system_msg)     print()     print('# 💻 user = ', user_msg)          # 入力された情報で OpenAI を呼び出してみる     completion = openai.ChatCompletion.create(**params)      msg_history.extend(messages)      # 返答を確認する     result_msg = list()     for item in completion.choices:         print('# 🤖 reply = ', item.message.content.strip())         msg_history.append(item.message.to_dict())         result_msg.append(item.message.to_dict())      print()     print('# 📦 messages = ', msg_history)     print('# 💰 usage = ', completion.usage)      return result_msgphp

トークンと料金

当日にも少しお話しましたが、IoTの時系列データを添付してチャットを行うと、思ったよりもトークン数が多くなります。APIの利用料金は従量課金となり、今回利用したモデルのgpt-3.5-turboだと1000トークンあたり$0.002です。ご自身の利用状況は、OpenAIのページで確認できます。実際にAPIに送信する前にトークン数を確認したい場合は、Tokenizerで確認できます。

登録後3ヶ月間は$5.00の初期クレジットが付与されているので、そちらが優先して利用されます。その後は、従量課金制となり金額で使用制限がかけられます。

以下の図だと、青いラインが初期クレジットの利用状況を表しており、緑のラインが従量課金分の利用状態を表しています。

まとめ

デモで使ったColabの環境を簡単にですが紹介しました。Jupyter Notebookを簡単に実行できるため、色々と試行錯誤できるのはとてもありがたいです。検証や確認といった部分では、こういった手軽な環境を利用して、実際にサービス化する際には、他の環境に移行していくのもひとつの手となるのではないでしょうか。

今回は Colab自体の詳細な紹介はしていませんが、PythonやPandasをはじめとしたデータ分析のライブラリも使えるため、データを整形したり確認しながらチャットの実装を行うのにも便利に使えました。

次のチャンスがあるなら、LangChainをはじめとしたフレームワークも触ってみたいですね!
またどこかで、みなさんとお話しできる機会を楽しみにしています。

次回のIoT-Tech Meetupは6/13(火)「GIS・位置情報活用の基礎」

次回のIoT-Tech Meetupの開催が決定しています。
6/13(火) 19:00スタートで、GPSをはじめとした位置測位技術の基礎知識と事例や、位置測位を用いた開発の基礎知識と具体例を共有していきます!

お申し込みページはオープンしています。お気軽にご参加ください。

7月開催!IoTの大型カンファレンス「SORACOM Discovery 2023」

7/5(水)と7/6(木)の2日間にわたってお届けするIoTカンファレンス「SORACOM Discovery 2023」でも、多くの技術セッションをご用意しています。こちらにもぜひご参加ください!

― ソラコム内田(jet)@uchimanajet7

投稿 ColaboratoryでChatGPTのAPIを使うには?― IoT-Tech Meetup #1SORACOM公式ブログに最初に表示されました。

この連載の記事

過去記事アーカイブ

2024年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
2023年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2022年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2021年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月