Open17

ChatGPT で遊ぶ

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

このスクラップについて

Zenn の記事を見ていると ChatGPT を使って要件定義をしたり記事を書いたり皆さん面白そうなことをやっている。

https://zenn.dev/yamadamadamada/articles/40d0594c1c6375

https://zenn.dev/en2enzo2/articles/3f47b39f43ca68

このスクラップでは ChatGPT を使って遊んでみたい。

差し当たり下記の方法について調べてみたい。

  • 日本語を使う方法
  • API を使用する方法
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

日本語に対応しているか聞いてみた

ChatGPT に聞いてみた。

ChatGPT は日本語は分かりますか?

はい、ChatGPTは日本語にも対応しています。どのような質問でもお答えできますので、お気軽にお聞きください。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

API を使用する方法

ChatGPT に聞いてみた。

質問

ChatGPT で API を使用したいのですが使い方を教えてください。

回答

はい、ChatGPTでAPIを使用する方法をご説明いたします。

ChatGPTは、OpenAIのAPIを使用しており、APIキーを使用してAPIへのアクセスを認証する必要があります。以下の手順に従って、APIキーを取得し、APIを使用することができます。

  1. OpenAIのAPIを申し込む
    OpenAI APIを使用するためには、OpenAIのAPIアカウントを作成する必要があります。アカウントを作成するには、OpenAIのWebサイト(https://openai.com/)からAPIを申し込むことができます。

  2. APIキーを取得する
    APIアカウントを作成したら、OpenAIのWebサイトからAPIキーを取得することができます。APIキーは、APIを使用するために必要な認証情報です。

  3. APIキーを使ってAPIにアクセスする
    APIキーを取得したら、APIを使用するために必要なパッケージやライブラリをインストールしてください。その後、APIキーを使用してAPIにアクセスすることができます。以下は、Pythonを使用してOpenAI APIにアクセスする例です。

import openai
openai.api_key = "YOUR_API_KEY"

response = openai.Completion.create(
  engine="davinci",
  prompt="Hello, world!",
  max_tokens=5
)

print(response.choices[0].text)

以上のように、OpenAI APIキーを使用してAPIにアクセスし、必要な機能を実行することができます。具体的な使用方法については、OpenAIのドキュメントを参照してください。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

TypeScript の例が欲しい

質問

ありがとうございます。TypeScript の場合のコード例を教えてもらえますか?

回答

はい、以下はTypeScriptを使用してOpenAI APIにアクセスする例です。

import openai from "openai";

// OpenAI APIキーを設定する
openai.api_key = "YOUR_API_KEY";

// APIにアクセスしてコンテンツを生成する
async function generateContent(prompt: string): Promise<string> {
  const response = await openai.Completion.create({
    engine: "davinci",
    prompt: prompt,
    max_tokens: 5,
  });

  return response.choices[0].text;
}

// 関数を呼び出す
generateContent("Hello, world!").then((content) => console.log(content));

この例では、OpenAI APIキーを設定し、generateContent関数を使用してAPIにアクセスし、生成されたコンテンツを取得しています。openai.Completion.create()メソッドに渡すオプションは、Pythonの場合と同様です。

OpenAIのTypeScript向けパッケージである @openai/api が提供されているため、それを使用することでインストールなどの手間を省くこともできます。以下が、その例です。

import { OpenAI } from "@openai/api";

// OpenAI APIキーを設定する
const openai = new OpenAI({
  apiKey: "YOUR_API_KEY",
});

// APIにアクセスしてコンテンツを生成する
async function generateContent(prompt: string): Promise<string> {
  const response = await openai.completions.create({
    engine: "davinci",
    prompt: prompt,
    maxTokens: 5,
  });

  return response.choices[0].text;
}

// 関数を呼び出す
generateContent("Hello, world!").then((content) => console.log(content));

以上のように、TypeScriptを使用してOpenAI APIにアクセスすることができます。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

プライベートな質問を聞いてみる

長岡市の栃尾でおすすめの飲み屋さんを教えてください。

申し訳ありませんが、ChatGPTは過去の情報のみを持っているため、現在の情報を持っていません。また、私たちは地域のビジネスやサービスを推奨することはできません。そのような情報をお探しの場合は、オンラインのレビューサイトや地元の情報を提供するウェブサイトを検索することをお勧めします。

今日の朝昼晩の献立を提案してもらえますか?なるべく簡単に作れて栄養価が高いと嬉しいです。

朝、昼、晩の献立の提案をします。以下は、簡単に作れて栄養価が高い料理のアイデアです。

【朝食】
スクランブルエッグ、アボカド、トマト、フルーツ、トースト
グリーンスムージー、オートミール、ナッツ、ドライフルーツ、ハニー
納豆と卵の丼、味噌汁、サラダ

【昼食】
クラブハウスサンドイッチ、ポテトサラダ、スープ
鶏胸肉と野菜の炒め物、ご飯、味噌汁
チキンチリ、玄米、サラダ

【夕食】
オーブンで焼いたサーモン、サツマイモ、グリーンビーンズ
トマトパスタ、グリーンサラダ、バケット
鶏肉の唐揚げ、白菜のおかか和え、豆腐の味噌汁、ご飯
これらの献立は、栄養価が高く、準備が簡単な食事を提供します。ただし、個々の栄養状態や好みによっては、適切な食事内容が異なる場合がありますので、ご注意ください。

鶏胸肉と野菜の炒め物の作り方を教えてください。

鶏胸肉と野菜の炒め物の作り方を以下に示します。

【材料】
鶏胸肉 200g
にんじん 1本
玉ねぎ 1/2個
シメジ 1パック
ピーマン 2個
オリーブオイル 大さじ1
しょうゆ 大さじ2
酒 大さじ1
塩 少々
こしょう 少々

【作り方】
鶏胸肉を一口大に切り、塩こしょうで下味をつける。
にんじんは皮をむいて斜めにスライスし、玉ねぎは縦に切ってから薄切りにする。
シメジは根元を切り落として小房に分ける。ピーマンは種を取り除いて斜めにスライスする。
フライパンにオリーブオイルを熱し、鶏肉を炒める。
鶏肉に色がついてきたら、にんじん、玉ねぎ、シメジ、ピーマンの順に加えて炒める。
野菜に火が通ったら、しょうゆと酒を加えて味を調える。
器に盛って完成。
野菜の種類や量はお好みに応じて変えることができます。また、鶏肉以外のお肉や、豆腐などの代替品を使用することもできます。炒め物は、お好みの味付けでアレンジして、バリエーションを楽しんでみてください。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ChatGPT の API の申込み

ChatGPT の API の申込みのページを教えてもらえますか?

ChatGPT API の申込みページは、OpenAI の公式ウェブサイトで行うことができます。以下のURLにアクセスし、必要事項を入力することでAPIの申込みが可能です。

https://openai.com/api/signup/

アクセスしてみると 404 Not Found だった。

色々探していたら下記のページが見つかった。

https://platform.openai.com/signup

ログインしたらダッシュボードが表示された。

ページ右上の Personal > View API keys を選ぶ。

Create new secret key を押せば良いかな?

無事に API キーが表示されたのでコピーしておく。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ワークスペースの作成

コマンド
mkdir hello-gpt
cd hello-gpt
npm init -y
npm install --save dotenv @openai/api
npm install --save-dev ts-node @types/node
touch .env main.ts
.env
GPT_API_KEY="sk-xxxx"
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

@openai/api がインストールできない

エラーメッセージ
npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/@openai%2fapi - Not found
npm ERR! 404 
npm ERR! 404  '@openai/api@*' is not in this registry.
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/susukida/.npm/_logs/2023-03-17T23_48_50_346Z-debug-0.log

普通に公式ドキュメントの Quick Start 読んだ方が良い気がしてきた。

https://platform.openai.com/docs/quickstart

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

コーディング

このコードが一番参考になる気がする。

https://github.com/openai/openai-quickstart-node/blob/master/pages/api/generate.js

main.ts
import { Configuration, OpenAIApi } from "openai";

async function main() {
  const configuration = new Configuration({
    apiKey: process.env.GPT_API_KEY!,
  });

  const openai = new OpenAIApi(configuration);
  const completionResponse = await openai.createCompletion({
    model: "text-davinci-003",
    prompt:
      "openai.createCompletion の model と temprature について教えてください。",
    temperature: 0.6,
  });

  console.log(JSON.stringify(completionResponse.data, null, 2));
}

main().catch((err) => console.error(err));
実行結果
{
  "id": "cmpl-6vEN0f35BEpSVENdid0xZM47WtZYT",
  "object": "text_completion",
  "created": 1679097954,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "\n\nmodel は GPT-2 が使用され",
      "index": 0,
      "logprobs": null,
      "finish_reason": "length"
    }
  ],
  "usage": {
    "prompt_tokens": 30,
    "completion_tokens": 16,
    "total_tokens": 46
  }
}

レスポンスは返ってきたけど冒頭の部分しか返ってきていない。

finish_reason が length なのであまり長いとダメなのかな?

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ChatGPT に聞いてみる

(上記のコードをコピー&ペースト)

これはOpenAIのAPIを使用して、text-davinci-003というモデルにテキストを渡して、そのモデルに基づいてテキストの自動補完を行うNode.jsのサンプルコードです。

ConfigurationとOpenAIApiは、openaiパッケージに含まれるもので、OpenAI APIとの通信を行うために必要です。 process.env.GPT_API_KEY!には、OpenAI APIキーが格納されている必要があります。 createCompletionメソッドは、渡されたテキストに基づいて、モデルが返す自動生成テキストを取得するために使用されます。

この例では、text-davinci-003モデルに対して、"openai.createCompletion の model と temprature について教えてください。"というテキストを渡しています。temperatureオプションは、生成されたテキストの多様性を制御するために使用されます。

最後に、レスポンスデータがJSON形式で出力されます。

注意:このコードを実行するには、事前にopenaiパッケージをnpmでインストールして、APIキーを設定する必要があります。

上記のコードを実行しても回答が全部返ってこないのですが理由はわかりますか?

回答が返ってこない理由はいくつか考えられますが、以下のことを確認してみてください。

  1. OpenAI APIキーが正しく設定されているか確認してください。
    もしAPIキーが無効であれば、APIリクエストが失敗する可能性があります。正しいAPIキーを設定する必要があります。

  2. openai.createCompletion() メソッドで生成されたトークンが期限切れでないことを確認してください。
    生成されたトークンは24時間で期限切れになります。

  3. テキスト生成に対してのパラメーター設定に問題がないか確認してください。
    例えば、prompt が短すぎたり、モデルによって異なるパラメータが必要になる場合があります。試しに別のプロンプトでテストしてみることを検討してください。

  4. APIがエラーを返している可能性があります。
    APIが利用可能かどうかを確認し、エラーが返ってきていないか確認してください。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

createChatCompletion を使えば良い

main.ts
import { Configuration, OpenAIApi } from "openai";

async function main() {
  const configuration = new Configuration({
    apiKey: process.env.GPT_API_KEY!,
  });

  const openai = new OpenAIApi(configuration);
  const completionResponse = await openai.createChatCompletion({
    model: "gpt-3.5-turbo",
    messages: [
      {
        role: "user",
        content: "ChatGPT の API はどれくらいまで無料で使えますか?",
      },
    ],
  });

  console.log(JSON.stringify(completionResponse.data, null, 2));
}

main().catch((err) => console.error(err));
実行結果
{
  "id": "chatcmpl-6vEe5sA9VqSgZfYzpw4rxmMfU3hKv",
  "object": "chat.completion",
  "created": 1679099013,
  "model": "gpt-3.5-turbo-0301",
  "usage": {
    "prompt_tokens": 28,
    "completion_tokens": 87,
    "total_tokens": 115
  },
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "\n\nChatGPT API は、月間100回のリクエストまで無料で使用することができます。ただし、それ以上の使用量がある場合は、有料プランにアップグレードする必要があります。詳細はChatGPTの公式ウェブサイトを確認してください。"
      },
      "finish_reason": "stop",
      "index": 0
    }
  ]
}

すごいな、ついでに ChatGPT API の無料枠についても教えてくれてありがとう。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

でも無料枠の回答は間違っているっぽい

  • Start for free
    Start experimenting with $5 in free credit that can be used during your first 3 months.

  • Pay as you go
    To keep things simple and flexible, pay only for the resources you use.

  • Choose your model
    Use the right model for the job. We offer a spectrum of capabilities and price points.