JavaScript | OpenAI APIの実装サンプルコード

2023-02-15AI,OpenAI,JavaScript API,JavaScript

JavaScript | OpenAI APIの実装サンプルコード

JavascriptでOpenAI APIを実装するサンプルコードです。
紹介しているJavascriptのサンプルコードではChatGPTに搭載されているAIモデル「GPT-3」を利用しています。

また、fetch()を使ったバージョンとXMLHttpRequest()を使ったバージョンを紹介しています。

以下のサンプルコードで最低限必要なものは、OpenAIのAPIキーと問い合わせるキーワードやメッセージになります。
関連:OpenAI | APIキーを取得する方法 | ONE NOTES

OpenAI APIの実装サンプルコード(fetchバージョン)

OpenAIのAPIをJavascriptで実装するサンプルコード、fetch()を使ったバージョンになります。

下記にて指定パラメータについて紹介しています。

async function sendPrompt(prompt = '') {
	let API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

	// promptがない場合
	if (!prompt) return

	const response = await fetch('https://api.openai.com/v1/completions', {
		method: 'POST',
		headers: {
			'Content-Type': 'application/json',
			Authorization: `Bearer ${API_KEY}`,
		},
		body: JSON.stringify({
			'model': 'text-davinci-003',
			// 'model': 'text-curie-001', // 動作テスト用(料金的に)
			'prompt': prompt,
			"max_tokens": 150, // 出力される文章量の最大値(トークン数) max:4096
			"temperature": 1, // 単語のランダム性 min:0.1 max:2.0
			"top_p": 1, // 単語のランダム性 min:-2.0 max:2.0
			"frequency_penalty": 0.0, // 単語の再利用 min:-2.0 max:2.0
			"presence_penalty": 0.6, // 単語の再利用 min:-2.0 max:2.0
			"stop": [" Human:", " AI:"] // 途中で生成を停止する単語
		}),
	})

	const data = await response.json()
	console.log(data.choices[0].text.trim())
}

let prompt = ''
sendPrompt(prompt)

OpenAI APIの実装サンプルコード(XMLHttpRequestバージョン)

OpenAIのAPIをJavascriptで実装するサンプルコード、XMLHttpRequest()を使ったバージョンになります。

function sendPrompt(prompt = '') {
	let API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
	
	// promptがない場合
	if (!prompt) return

	let xhr = new XMLHttpRequest()
	xhr.open('POST', 'https://api.openai.com/v1/completions')
	xhr.setRequestHeader('Content-Type', 'application/json')
	xhr.setRequestHeader('Authorization',  `Bearer ${API_KEY}`
	xhr.send(JSON.stringify({
		'model': 'text-davinci-003',
		// 'model': 'text-curie-001', // 動作テスト用(料金的に)
		'prompt': prompt,
		"max_tokens": 150, // 出力される文章量の最大値(トークン数) max:4096
		"temperature": 1, // 単語のランダム性 min:0.1 max:2.0
		"top_p": 1, // 単語のランダム性 min:-2.0 max:2.0
		"frequency_penalty": 0.0, // 単語の再利用 min:-2.0 max:2.0
		"presence_penalty": 0.6, // 単語の再利用 min:-2.0 max:2.0
		"stop": [" Human:", " AI:"] // 途中で生成を停止する単語
	}))

	xhr.onreadystatechange = function () {
		if (xhr.readyState === XMLHttpRequest.DONE) {
			// レスポンス受け取り後の処理
			let response = JSON.parse(xhr.responseText)
			console.log(response.choices[0].text.trim())
		}
	}
}

let prompt = ''
sendPrompt(prompt)

実装サンプルコードの実行結果

送信するテキストを prompt に代入してsendPrompt()を実行します。

let prompt = '好きです。付き合って下さい。'
sendPrompt(prompt)

// ごめんなさい。私はすでに付き合っている人がいます。ただの友人関係として一緒にいることはできますが、付き合うことはできません。

ほとんど振られますが、たまに告白に成功します。

また、ChatGPTの方でAIに告白して(強引に)成功したものを紹介していますので宜しければ。
関連:AIに愛の告白をしてみた、恋愛そして結婚へー(ChatGPT) | ONE NOTES

OpenAI APIのパラメータ

各種パラメータを設定していますが、チャットによる会話がメインとなる場合のパラメータ設定になっています。
例えば、翻訳にしたい場合は「temperature」を「0.1」、「top_p」を「-2」にると決まった結果を得やすくなります。

また、目的が翻訳であれば「model」を「text-curie-001」にしても十分に機能します。
「text-curie-001」ならAPIの利用料金が10分の1になります。
関連:OpenAI | APIの利用料金と無料分など、ChatGPTモデルは高額になりやすい? | ONE NOTES