OpenAI | APIとGoogle スプレッドシートを連携する方法

2023-02-09OpenAI

OpenAI | APIとGoogle スプレッドシートを連携する方法

ChatGPTで人気のOpenAIのAPIとGoogle スプレッドシートを連携訳させる方法、サンプルコードを紹介しています。

OpenAI APIとGoogle スプレッドシートを連携させる

ここでは簡単なサンプル用に日本語を英語に翻訳するスクリプトを記述しています。

例えば、以下のようなA列に日本語があり、B列に英語に翻訳した英語訳を表示していきます。

OpenAI APIと連携するシート
OpenAI APIと連携するシート

OpenAIのAPI キーを入手

OpenAIのAPIを利用するには、APIキーが必要です。

APIキーの入手方法は以下の記事にて紹介しています。

関連:OpenAI | APIキーを取得する方法 | ONE NOTES

Google Apps Scriptでスクリプトを作成

拡張機能からApp Scriptを起動
拡張機能からApp Scriptを起動

App Scriptが起動したら空のスクリプトファイルに以下のコードに書き換えます。

function Translate(text) {
	let API_URL = 'https://api.openai.com/v1/completions'
	let API_KEY = 'API KEY'
	prompt = "ja to en:" + "¥n" + text + "=>"

	let options = {
		'method': 'POST',
		'muteHttpExceptions': true,
		'headers': {
			'Content-type': 'application/json',
			'Authorization': 'Bearer ' + API_KEY,
		},
		'payload': JSON.stringify({
			'model': 'text-davinci-003',
			'prompt': prompt,
			'max_tokens': 100,
			'temperature': 0.9
		})
	}

	response = JSON.parse(UrlFetchApp.fetch(API_URL, options).getContentText())

	// console.log(response)

	return response.choices[0].text.trim()
}

AIモデルを「Davinci(text-davinci-003)」「Curie(text-curie-001)」かで悩みましたが、今のところトークンの消費量が少なかった「text-davinci-003」を指定しています。

追記:トークンあたりの価格が10倍違うので「Curie(text-curie-001)」でも結果が問題なければ、変更した方が良いですね。

コードは貼り付けてAPIキーを編集
コードは貼り付けてAPIキーを編集

セルにスクリプトを実行する関数を入力

英語に翻訳したいセル、B1、B2、B3…と作成したスクリプトを実行する関数を入力します。

セルB1に代入する関数は以下のようになります。

=Translate(A1)

B1に入力したセルをコピーしてセルB2に貼り付ければ自動的に以下のようになります。

=Translate(A2)

翻訳AIスクリプトの動作確認

スクリプトやコードに間違いがなければ、「loading..」と表示された後、翻訳された英文が表示されます。

日本語の名前も、一般的なものであれば正常に翻訳されます。試したところ、キラキラネームはやはり厳しいですね。

翻訳された英文がB列に表示されます
翻訳された英文がB列に表示されます

レスポンスデータ

上記のスクリプトを「どうしましたか?」で実行した場合のレスポンスデータは以下の通り。

返り値の「text」には空白や改行コードが混ざりやすいのでサンプルではtrim()してあります。

{ id: 'cmpl-6efhHv3ALyI4GGSBlRDD0y9wE4srA',
  object: 'text_completion',
  created: 1675151423,
  model: 'text-davinci-003',
  choices: 
   [ { text: ' What did you do?',
	   index: 0,
	   logprobs: null,
	   finish_reason: 'stop' } ],
  usage: { prompt_tokens: 22, completion_tokens: 5, total_tokens: 27 } }

使用トークンの節約

OpenAIのAPIはAPIへの送信データと返信データの情報量、文字数によって「token」が消費されます。

サンプルコードでは「token」の使用量を抑える為に「prompt」パラメータの文字数を翻訳する事を伝える事ができるギリギリまで減らしています。
「prompt_tokens」を確認する事で使用量を抑えます。

例えば、翻訳を伝える場合、以下のようなパターンがあります。
日本語は大きくなりやすいので、指定部分は英語を使うと良いかもしれません。

prompt = "ja to en:" + "¥n" + text + "=>"
// prompt_tokens: 19

prompt = "Translate Japanese to English:" + "¥n" + text + "=>"
// prompt_tokens: 21 

prompt = "日本語を英語に翻訳:" + "¥n" + text + "=>"
// prompt_tokens: 35

ここでのサンプルコードはあくまでテスト用です。

実際に運用するアプリケーションを実装する場合は、ひとつのリスエスト、スクリプトの実行ですべてのセルを処理した方がトークンを節約できると思います。

OpenAI

Posted by Yousuke.U