
本記事はソラコムが提供する「SORACOM公式ブログ」に掲載された「ColaboratoryでChatGPTのAPIを使うには?― IoT-Tech Meetup #1」を再編集したものです。
目次
デモ環境OpenAI API
ライブラリのインストール
API の利用準備
チャット API を使う
トークンと料金
まとめ
次回のIoT-Tech Meetupは6/13(火)「GIS・位置情報活用の基礎」
7月開催!IoTの大型カンファレンス「SORACOM Discovery 2023」
こんにちは、ソリューションアーキテクトの内田(ニックネーム: jet)です。
5/30に開催した、IoTや周辺技術の知見をエンジニア向けに共有するイベント「IoT-Tech Meetup 第1回【ChatGPT × IoT】」では、時系列データを生成系AI「ChatGPT」で分析・未来予測する利点や気を付けたいポイント、そして具体的な方法を紹介しました。
当日の様子や発表資料などは以下のブログをご覧ください。
ここでは【セッション2】 時系列データをChatGPTで読み解いてみるで紹介したデモについてお伝えします。当日の様子の補足として確認いただけると嬉しいです。
デモ環境

今回デモに利用した各環境は以下のとおりです。
- IoT デバイス
- SORACOM サービス
- 実行環境
- OpenAI API
- 連携サービス
実行環境は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-python は MITライセンス で提供されていて、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 SafetyやProduction 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 #1はSORACOM公式ブログに最初に表示されました。
この連載の記事
- 第323回 IoTだからこそ「サーバーレス」を活用すべき3つの理由 ― ServerlessDays Tokyo 2023 登壇レポート
- 第322回 多要素認証サービス「Soracom Cloud MFA」の提供を開始しました
- 第321回 SORACOM STARLINK BUSINESSキットの販売を開始しました!
- 第320回 購入前にオンラインで試せる! ソラカメ無償トライアル開始
- 第318回 IoTの通信に「衛星」を用いる方法や取り組み方は? ― IoT-Tech Meetup レポート
- 第317回 ユーザー向けサイトを使いやすくリニューアル、ソラカメの無償トライアルを提供開始 takuyaのほぼ週刊ソラコム 09/02-09/15
- 第316回 30人の社員を巻き込み12の展示を作成した、IoTプロトタイピングコーナーの舞台裏【SORACOM Discovery 2023 展示レポート】
- 第315回 機械学習で産業機器の予知保全ができる「後付け型」センサー&クラウドソリューション「Amazon Monitron」実機展示
- 第314回 LTEルーター2機種を最大10%値下げ、産業向けからアンテナ内蔵型まで
- 第313回 演奏風景をクラウド型カメラサービスで残そう!「IoT×Musicのハーモニー」【SORACOM Discovery 2023 展示レポート】