本記事はソラコムが提供する「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公式ブログに最初に表示されました。
この連載の記事
-
第474回
デジタル
SORACOM Flux の AI アクションに Amazon Bedrock – Anthropic Claude 3.5 Haiku を追加、Teltonika RUT240 の価格を改訂 takuyaのほぼ週刊ソラコム 11/02-11/15 -
第473回
デジタル
IoTセキュリティの基本知識と実践をご紹介 ― 10/31開催:SORACOMユーザー向けオンラインセミナー開催レポート -
第472回
デジタル
SORACOM Flux に追加された Incoming Webhook をつかってインタラクティブな Flux アプリを作る -
第471回
デジタル
サーバールームの異常な温度上昇を通知する新規掲載レシピのご紹介 -
第470回
デジタル
Virtual Private Gateway (VPG) Type-F2 が正式リリースになりました! -
第469回
デジタル
暗号化非対応のTCPクライアントでもNapterまでの通信を暗号化する方法 -
第468回
デジタル
SORACOM Beam や SORACOM Flux の開発・デバッグに使える HTTP モックサーバーを素早く作る方法 -
第467回
デジタル
IoTプラットフォームSORACOMの契約回線数が700万を突破、次世代SIMテクノロジー「iSIM」を商用化、搭載モジュールを提供開始 takuyaのほぼ週刊ソラコム 10/12-11/02 -
第466回
デジタル
カメラとAIで楽器演奏シーンを簡単に残す、IoTプロトタイピングの裏側 -
第465回
デジタル
数千を超えるIoT機器を管理!生成AIで設備運用を効率化するhacomonoの挑戦
この記事の編集者は以下の記事もオススメしています
-
デジタル
SORACOM KryptonでAzure IoT Edgeデバイスを登録する -
デジタル
カスタムDNSとAzure DNS Private ResolverでAzureのプライベートリソースにアクセスする -
デジタル
パートナーと伴走してIoTで課題を解決した3つのセッションのご紹介【SORACOM Discovery 2023】 -
デジタル
ソラカメ専用セルラーパック ルーター新機種(L13)提供開始 -
デジタル
どんなアイディアでも実現に導く駆け込み寺|MAGLAB【SORACOM Discovery 2023】 -
デジタル
AIとIoTは業界を変革できるか? 小売・物流業界で必見の6セッション【SORACOM Discovery 2023】