ChatGPT API を使用するNode.jsサンプルコードを、ChatGPTに教えてもらった。

# ChatGPT に、ChatGPT API の使い方を教えてもらいたい

簡単なコードとかなら、ChatGPTが書いてくれる。
閏年を計算したり、日付けをフォーマットするような簡単なのなら、ChatGPTはすぐコードを書いてくれるのは知っている。
なら、ChatGPT APIを使う方法も、聞いてしまえばいいのではと思い立つ。


# 聞いた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728994/1389ea3a-f47e-01a4-b7f9-f95f407d33f4.png)

答えてくれた。まじで。

# でも、API キーがいるらしい
あれ、そうなの。それ、どうやって取得するの？
と、ChatGPTに聞いてしまう私。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728994/3fd892f5-c229-82b6-46a3-f23980b936b8.png)

まじで。ここまで３分かかってないわよ。こんな簡単でいいんですか。

ちょっとゴソゴソして、APIキーを取得してくる。よっしゃ取れた。

# API キーは、.env に保持したい

でも、コードにAPIキー埋め込んでしまうのはイヤよね。
.env とかにそういう値は書いておいて、githubにコミットしないとか、そういう準備はしておきたいわよね。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728994/88a948f9-239e-c8c4-e05a-0b98b730f842.png)

おう、そうじゃったそうじゃった。dotenvつかうんじゃった。忘れておった。
てか、先ほどのコードの修正案も提示してくれるのか。
すごいな、便利だな。デキる先輩に質問してるみたいだ。
今日からChatGPT先輩って呼ばせてもらおう。

# サンプルコードを実行してみる

じゃぁ先輩！実行してみまーす！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728994/73db1280-ec2f-43d5-c0d7-9d55b94d10da.png)

# ChatGPT 先輩も間違える

・・・あれ？なんかイマイチな気がする？
先輩ったらもう、AIなのに完璧じゃないのねー。
サンプルでの質問は「What is the capital of France?」なので、こんなコードの一部みたいな回答はなんかちゃうのでは。
ぶっちゃけ、フランスの首都は？と聞いてるので、ストレートにパリと返して欲しいわよね。（質問文をDeepLで翻訳した）

# ChatGPT 先輩、まだ間違える

もっかい実行したけど、ダメだったので、率直に聞いてみた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728994/a9600d1f-afa1-bafe-d6d8-4a895c780e90.png)

おお、先ほどのAPIキーの対応コミのコードを示してくれた。
ChatGPT先輩やさしいー。

でも、正直言って問題の箇所は、ここだと思うのね。

```Javascript
const message = response.data.choices[0].text.trim();
```

# ChatGPT 先輩、秒で改善する

とりあえず先輩の顔を立てようと思って、コードそのまま実行したけどダメでした。
ChatGPTせんぱぁぁぁぁい！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728994/4d236c41-1b1f-b7d7-e510-01e3184c1b50.png)

message のところではなく、プロンプトの文字列を改善してくれた。
これが、
```javascript
        prompt: prompt,
```

こうなった。
```javascript
        prompt: `${prompt}\nAnswer:`,
```
あと、回答を改行で終わらせて、後続するJsonデータを切り分けるようにしたっぽい。

即座にそういう改善が思いつくのね！
スゴイね！やっぱり先輩スゴイネ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728994/8e2505d5-c40d-e6de-2902-a1b525605a20.png)

おお！期待した通りの感じの回答になった！
つい嬉しくて、二回も実行しちゃったわよ！
先輩すごーい！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728994/a38f51be-2287-7ddf-781e-d868c8b5d164.png)

あら、先輩かわいいー！
私先輩についていきまーす！

# 最後に

最後に実行したコードを貼り付けておいてみる。

```Javascript
// Import the required packages
const axios = require('axios');
require('dotenv').config();

// Set your API key from the .env file
const API_KEY = process.env.API_KEY;

// Function to call the ChatGPT API
async function callChatGptApi(prompt) {
  try {
    const response = await axios.post(
      'https://api.openai.com/v1/engines/davinci-codex/completions',
      {
        prompt: `${prompt}\nAnswer:`,
        max_tokens: 50,
        n: 1,
        stop: "\n",
        temperature: 0.5,
      },
      {
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${API_KEY}`,
        },
      }
    );

    const message = response.data.choices[0].text.trim();
    console.log(`ChatGPT response: ${message}`);
  } catch (error) {
    console.error(`Error calling ChatGPT API: ${error.message}`);
  }
}

// Example usage
const prompt = 'What is the capital of France?';
callChatGptApi(prompt);

```

すごいわー、会話でAIと相談しながらコードを書く時代が来ちゃったのねー。
他にも色々、ChatGPT先輩に相談しながら、コード書いてみよっと。