すぐに始めるchatGPT API①まずはPower Automate で呼び出してみる

最近はやっている Chat-GPT。とりあえずWebブラウザから質問を入力して遊んだり調べ物をしたりしている方が多いと思います。
もろもろありますが、以下のURLから飛ぶのが一番早いかな？
https://chat.openai.com/

せっかくなので、この機能をTeamsやPower Platformに組み込んでみたいと思いませんか？
ここでは、市民開発者向けに、なるべく簡単に利用開始する方法をご案内してみます。

# OpenAI API にサインアップしてKeyを入手する

ChatGPT のAPI を利用するためには、OpenAI(ChatGPTを作っているところ)にサインアップ（ざっくりいうとアカウントを作ること）して、API Key (ざっくりいうと、APIにリクエストして情報をやり取りするための認証情報)を取得することが必要になります。
※以下の手順、画面は2023/3/29時点での内容です。また、マイクロソフトおよび私のほうでは詳細な支援はできませんので参考情報として掲載させていただきます。特にクレジットカード情報の入力などは利用規約などを読み納得したうえで進めてください。

①まずは https://www.openai.com を開きます。
![手順１openaiドットコムを開く.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/6ee2198e-a749-8230-b192-38279aaf66ca.jpeg)

②Developer Overviewを開きます（Sign up ボタンが出ればどこでもいいのですが、とりあえず）
![手順２DeveloperOverViewを開く.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/5b770b39-d4be-09bb-e1b6-4eea5a716085.jpeg)

③[Sign Up]をクリックします。
![手順３SignUpをクリック.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/07737c35-0733-3555-25ba-b1db510d6cf6.jpeg)

④Microsoft Accountをクリックして、認証情報を入力します。
![手順４MSAをクリック、必要に応じて認証情報を入れる.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/2affe9f4-4a4a-1511-b297-b14d94752317.jpeg)

⑤画面が戻り、サインアップ＆サインインが完了します。
![手順５画面が戻る.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/19d64199-94f3-608d-4af0-fb6782d01034.jpeg)

⑥右上をクリックし[View API Key]をクリックします。
![手順６右上をクリックしてView APIKeyをクリックする.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/6d172d09-44a2-20e2-f2a7-064fc8478326.jpeg)

⑦[Create New Secret Key]をクリックします。
![手順７CreateNewSecretKeyをクリックする.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/0ebb8b8b-0f8e-bb8d-010d-c9e360dcc384.jpeg)

⑧生成されたKeyをコピーしてメモ帳などに控えます。**このキーは絶っっっ対他人には教えないでください。**
![手順８生成されたKeyをコピーしてメモ帳などに控える.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/4c134a67-15aa-8de3-a9f4-51a02131e355.jpeg)

⑨Billingをクリックし、Set up paid account をクリックしてクレジットカード情報を入力します。本来、フリートライアル分が$18ぐらいあるみたいなのですが、今は**カード情報なしで実行すると429(スロットリング）が発生する**みたいです。
![手順９必要に応じて課金情報クレジット情報を入力します.フリートライアルで少し利用できるはずですが、これを入力しないと利用できないという報告もありました..jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/b77ec3a5-f27c-3acf-e730-434a821d429e.jpeg)

⑩そうすると課金が怖くなりますので、Usage Limitでリミットを制限しておきます。$20に設定しておけば20ドルを超えた時点で呼び出せなくなりそれ以上課金されることは防止できます。
![手順１０UsageLimitを設定しておけば、使い過ぎて膨大な請求が来ることを阻止できます..jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/8eddefec-c5cd-5b7e-da61-73307e62b0cf.jpeg)

これでOpenAI側の作業は完了です。手順としては単純ですが、お金も絡んできますので利用規約などはよく読んでから利用してください。

# Power Automate で単純に呼び出す

何回かに分けていろいろな呼び出し方を試す予定ですが、まずは一番簡単に呼び出す方法を考えてみます。

①Power Automateのホーム画面を起動し、[作成]-[インスタントクラウドフロー]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/4750be98-f036-43d5-9566-ea5442658058.png)

②フロー名を任意に入力、「手動でフローをトリガーします」を選択して「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/c80a5b38-7443-e9ff-ab99-72e5ee9ce6cf.png)
※トリガーは後から変えられますので、ここではすぐに試せるボタントリガーを選んでいます。

③新しいステップをクリックし、検索テキストに「変数」と入力し「変数を初期化する」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/9c660aca-37db-4bc8-3439-49383e23fb0a.png)

④名前を[API Key]、種類を[文字列]に設定し、値を先ほど入手したAPI Key(sk-から始まる文字列)を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/a4356988-8057-870a-55ca-66145811b197.png)

⑤同様に「質問」「回答」の変数（文字列）を作成します。値は空白のままで構いません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/7911611d-2674-9bb0-121a-7c1440891357.png)

⑥[新しいステップ]をクリックし、検索テキストに[HTTP]と入力します。プレミアムをクリックして、HTTPアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/2a45009c-9ca6-e61a-6c4c-38750389783d.png)

⑦HTTPをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/321f02f5-63fd-b687-316d-619391708e1d.png)

⑧以下の内容を埋めていくことになりますので、順番に説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/c7f5c2dc-8815-1ec5-b95f-bb4ade2d0384.png)

方法：HTTPのメソッドのことです。ここでは本文がありますので「POST」を選びます。
URI: OpenAI chat API がある「https://api.openai.com/v1/chat/completions」を指定します。
ヘッダー：以下の二つを入力します。

|Content-Type|  application/json|
|---|---|
|**Authorization**|    **Bearer [API Key]**|



API Keyは以下のようにBearerと書いてスペースを入力した後、左下のリストから変数を選んで入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/060ec051-df24-0d78-c0ea-9677289788e8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/03d5e473-6765-e689-51cc-5e6031681fd2.png)

クエリ: 特に入力しません
本文以下のように入力します。

```json:本文
{
  "model": "gpt-3.5-turbo",
  "messages": [
    {
      "role": "user",
      "content": "@{variables('質問')}"
    }
  ]
}
```
質問の部分は上記のAPIkey と同様の方法で入力できます。
ここまで完了したら、一回テスト実行してみます。「質問」に任意の質問内容を入力しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/13e83663-41a3-add0-32cf-e016b490240b.png)

⑨右上の[テスト]をクリックして、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/ed99027e-1cc6-67df-c213-916eedc05d2b.png)
手動を選択してテストをクリックします。「フローの実行」→「完了」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/63f83434-294e-76b6-ef34-b67b41fd2bb7.png)

⑩成功すると以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/f8ba1b50-8518-6fc5-4c24-0ab8107154d4.png)

HTTPアクションを開いて、出力にあるJSONデータをメモ帳にコピーしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/e5060284-eaf6-c258-68b7-1f16ee9487f0.png)

# 出力をPower Automateで利用する

出力されたJSONデータは以下のようになります。
```JSON:出力
{
  "id": "chatcmpl-******",
  "object": "chat.completion",
  "created": 16000000,
  "model": "gpt-3.5-turbo-0301",
  "usage": {
    "prompt_tokens": 24,
    "completion_tokens": 67,
    "total_tokens": 91
  },
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "世界で三番目に高い山の名前は、カンチェンジュンガ（Kangchenjunga）です。海抜8,586mの高さを持ち、ネパールとインドの国境付近に位置しています。"
      },
      "finish_reason": "stop",
      "index": 0
    }
  ]
}
```

JSONデータを解析すればAutomateから容易に呼び出せるようになります。
①「新しいステップ」をクリックして、検索テキストにJSONと入力して「組み込み」タブをクリックし、「JSONの解析」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/5ddb9083-f341-e8d1-43bb-4160a33ad14b.png)
②コンテンツの入力エリアをクリックして右下に表示される「HTTP - 本文」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/d040432d-4f82-6019-70b6-88f2c81323bd.png)
③[サンプルから生成]をクリックします。サンプルJSONペイロードの挿入に、先ほどコピーした出力のJSONデータをペーストします。完了をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/098ad9b6-95d4-bd12-ca60-019ea7392940.png)

すると以下のように、スキーマ（JSONの構造を定義したもの）が自動的に作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/90b1acec-7190-1835-00b4-1942f6b9ded4.png)

④最後に、応答として得られた中から「回答」の部分を抽出したいと思います。JSONデータを見てみると、応答に含まれるchoices->messages->content の中身が回答とわかります。このデータを取ってみましょう。
検索テキストに「変数」と入力して「変数の設定」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/0308590b-7da7-f059-fd73-a5be4f68657b.png)
名前を「回答」に変更し、値として「JSONの解析->content」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/43afd9f0-5639-8217-edc1-63c436866354.png)
すると以下のようにApply_to_eachが自動的に追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/54bca979-5f2e-4c67-0051-c9feef1f3616.png)
これはchoicesが複数のmessagesを持つアレイであるからです。今回の利用法であればmessagesに含まれる要素は1つだけになると思いますので、今回はこのままでOKです。

質問の内容を変えてもう一回実行します。回答の変数に正しい値が入っていれば成功です。

質問
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/9f3e395c-844c-7627-48b0-a819805bb617.png)
回答
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095776/9a415670-846c-5441-07d9-82b881ad09fd.png)

# まとめ

単純に chatGPTのAPIを呼び出すだけであれば、1回のHTTPリクエストで完了します。
次回以降は、より扱いやすくするためにPower Appsでの実装や、 Microsoft Teams ボットでの利用を検討してみます。