見出し画像

【AI】ChatGPT + Googleスプレッドシート + GAS で自作関数作ったら、意外とアレが使えたって話

Excel 新関数シリーズ の途中ですが、流行りのChatGPTに乗っかった 臨時記事を入れます。

アーリーアダプターな方々が次々に発信をしていて面白そうだなと思って、とりあえずYahooの記事を参考に 簡単に使える GAS と Googleスプレッドシートと組み合わせた自作関数の GPT関数を試してみました。

普通に使えたけど、単にミーハーなユーザーとして使ってみたってだけなんで、わざわざ note に書くことも無いかなーって思ってたんですが・・・。

困った仕様に対して 意外とアレが使えるってのがわかったんで、noteにまとめてみました!

本来のシリーズの 前回の記事

(Excel 14の新関数シリーズ で、前回までで 配列操作系の11関数が終わって、いよいよ テキスト操作系の TEXTSPLIT関数をってとこでしたが。こちらは1週ズレて次回書きます)



Googleスプレッドシートで 自作関数で 流行りの ChatGPT(GPT3)を使う方法

現状、簡単に始めるには 以下の2つの方法があるようです。

  1. GASでコードを書いて(コピペ)して自作関数を作成する

  2. スプレッドシートのアドオンを追加して 使う

どちらを使うにしても、

  • OpenAIのアカウント取得

  • OpenAIのAPI Keyを取得

は自分で対応する必要があります。

とりあえず 2023年1月時点では 無料でスタートできるんで、試しにサイン アップして登録してみるのも良いでしょう。

でも、メールアドレスに加えて SMS認証で スマホの 電話番号を登録しないといけないんで、少し抵抗感がある人もいるかも。


Open AI に登録して出来ること。

無料でスタートと書きましたが、あくまでも無料お試し枠として $18 分だけ使えるみたいです。

クレジットの有効期限もあるので、登録したら早めに色々試すべきですね。

Chromeの日本語翻訳利用

ちなみに Googleスプレッドシートで使う場合でも 自作関数としてではなく、実行ボタン(メニュー)を用意して 使う方法もあります。



サイトで ChatGPT とチャットで会話できる

Open AIに登録すれば、スプレッドシートと連携しなくても、直接 ブラウザから AIチャットが試せます。

まじめかよ!

2021年時点の普遍的な知識がベース、かつ 自力ではWeb検索は出来ないらしいので、最新情報の質問には対応できません。

しかも 間違った回答を自信満々に返すこともありますw

これは無理だった?

それでも、他のAIチャットボットに比べると確かに自然なやりとりが出来る印象。さすがに、無茶ぶりすると こんなことになりますが・・・

萌え、萌え、きゅーん とは返してくれないかw

あと、回答速度はちと遅めかなと思います。これは無料版だからってのもあるのかと。

一気に拡散されて処理が込み合ってるみたいで、何度か サイトに入れなかったりもしました。



API Keyを発行して 自作アプリや Googleスプレッドシートで利用できる

こっちが今回の目的。

API Keyを作成して Googleスプレッドシート、Googleドキュメント、その他自作アプリなどで利用することが出来ます。

Microsoftも かなり力を入れて投資もしていくようで、今後は Excelなどffice製品でも利用できるようになっていくみたい。



ChatGPT 自作関数を Googleスプレッドシートで使う際の 参考サイト

実際に利用する際に参考にしたサイトです。

コードを書く(コピペする)方法

とりあえず mirは、Yahooの記事 + そこからリンクで飛べる記事 を参考に試してみたんですが、コードの内容を意識しなくても コピペで使えるし、ほぼ10分程度で AI自作関数が使えるようになります。

/**
* GPT-3 and Google Sheets
*
* @param {string} prompt Prompt.
* @param {number} temperature (Optional) Temperature.
* @param {string} model (Optional) GPT-3 Model.
* @return Response returned by GPT-3.
* @customfunction
/

const SECRET_KEY = "ここに取得した APIキーを入れる!";
const MODEL_NAME = "text-davinci-003"; // more structured and deterministic: for data
const MODEL_TEMP = 0.3;

function GPT(prompt,max_tokens=30) {
const url = "https://api.openai.com/v1/completions";
const payload = {
model: MODEL_NAME,
prompt: prompt,
temperature: MODEL_TEMP,
max_tokens: max_tokens
};

const options = {
contentType: "application/json",
headers: { Authorization: "Bearer " + SECRET_KEY },
payload: JSON.stringify(payload),
};

const res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
return res.choices[0].text.trim();
}

出典:liquidjumper.com 様 (不要な コメント箇所を一部削除)


GASを使った 自作関数については、過去にシート情報を取得する 自作関数の記事でも触れています。



アドオンを追加して 利用する方法

もう1つ、アドオンを使う方法があります。
「強く生きる」さんの note が参考になりました。


とりあえず GASを使ったことがある人なら、コピペで コードを貼りける方法で問題ないと思います。



GPT関数を使ってみた

こんな感じの使用感

=IF(ISBLANK(A4),,GPT(A4&":",400))

さて、式のほうも少しアレンジして A列にフリーワードで AIに 質問や依頼を投げかけ、B列に 400文字で回答するという処理にしてみました。

&":" は無くても動きますが、付けた方が 回答の語句がすっきりする気がします。(個人の感想です)

上のような シンプルな質問には 正しく答えてますね。さすがです!


うーん、この辺りになると怪しい感じ。

スラムダンクは、漫画家・藤子・F・不二雄によるバスケットボールを題材としたスポーツ漫画です。主人公の赤木剛憲は、高校バスケットボールを戦い抜くために、様々な難局を乗り越えていきます。ストーリーは、剛憲の成長を描いた物語で、彼が持つ熱い情熱と意志力が描かれています。

いきなり間違ってることを堂々と回答してる上に、なぜに ゴリが主人公??次回作の映画は 赤木が主人公っていう未来予測でしょうか?

もしや、AIにも「推し」があるのか??

「大判焼き」は知ったかぶりなのか、完全なる創作なのか・・・。


クリエイティブな依頼をしてみましたが、うーん 売れなそうw

「俺の頂点チョモランマ」のほうがセンスありますね。

それでも、アレクサに 歌を歌ってと言ったら 「アレクサ音頭」を歌い出した時の絶望感よりはマシですがw

とりあえず、ここまでは使ってみた感想。



【困ったこと】GASの自作関数は 開きなおした時 再計算が走る

で、こまったのがコレ

開きなおしたら 一気に再計算が・・・

GASで作成した自作関数は、他の端末で開いたり、閉じてから一定時間経過後に 再度スプレッドシートを開いた時に 再計算されてしまうのです。

GPT関数を数十個、数百個使っていた場合、再計算で 一気に Loading され結構待たされる上に、再度 APIを叩いてるわけですから 無料枠を無駄に消費してることになります。

さらに 回答が変わってしまう可能性がある というリスクもあります。

今度は 主人公は正しいですが「白鳥沢学園」って・・・。ハイキューとごっちゃになってるw

質問の回答もそうですが 創作系の依頼をした場合、せっかく良い文章を返してもらっても、コピー + 値を貼り付け を忘れてると・・・次に開いた時に まったく別モノになってることも。

GAS関数の仕様とはいえ、ちょっとこれは困りますね。

これをサクッと解決するのが、これまでも 何度か mirの noteでとりあげている アレ です!



【解決策のアレ】反復計算を使った式で AIからの回答を固定する

GASで自作した AI関数 が 、ブラウザを開きなおした際に 再計算される問題を解決する アレ とはなにか?

GASなしで タイムスタンプを実現する際にも使った 循環参照・反復計算 の利用です。

チェックボックスを使った 乱数の固定でも使いましたね。

「反復計算」という言葉から、計算量が増えそうな印象を受けますが、逆です!

これを使って 無駄な再計算が走らないように出来るんです!


事前に反復計算を オンに設定する

というわけで、事前に 反復計算を使うためのスプレッドシートの設定をしておきましょう。簡単です。

メニューバーから

ファイル > 設定 > 計算タブ と進み
反復計算を オン にして、設定を保存 とするだけ。

これで準備は完了。



自分自身のセルを参照する 式に変更する

■B4セルに入れる式 変更前
=IF(ISBLANK(A4),,GPT(A4&":",400))
 ↓
■B4セルに入れる式 変更後
=IFS(A4="",,B4<>0,B4,true,GPT(A4&":",400))

これが 自作関数の結果をロックする式

その上で、このように式を変更してみましょう。

IFS関数は

=IFS(論理式1, 真の場合1, 論理式2, 真の場合2, ...,

という 構成で、前(左)から順に チェックしていき、論理式(条件)が一致した時の 真の場合の結果を返して 終了となります。

つまり、「true が出たら そこで試合終了だよ」 です。
安西先生~。

なので、先に 優先度の高い 条件を入れていきます。
今回の場合は、以下のような順番と意味合いの式です。

=IFS(
 A4="",,
 A4セルが 空白なら 空白を返す

 B4<>0,B4,
 B4セルが 0 ではない(B4セルに回答が入っているなら) B4セルのまま

 true,GPT(A4&":",400)

 true(上の2つの条件に一致しない場合は全て)、GPT関数を実行
)

注意点として、Googleスプレッドシートの場合は 式を入れたセル(自分自身)を参照して 値が入っている・いないを 判断するの場合は、

B4<>"" ではなく B4 <>0 または B4 >0 

とします。

また、IFS関数は いずれの論理式でも true とならない場合、つまり「その他」のケースを指定する場合は 、IFSの 一番最後 の箇所を

true,  その他の時に返す結果

としてあげれば良いです。

今回の場合は、 A4が空白でなく、B4に回答が入ってない時だけ GPT関数を実行する という式になっています。

つまり B4 に既にGPT関数で返された 値(文字列)が入っていれば、その後に記載されている GPT関数 が動くことは無いんです。

あとは、この式を入れた B4セルをコピーして B5以下に貼付け。もしくはオートフィルすれば OK。 

一応試してみましたが、残念ながら Arrayformula は使えません



【注意点】一度式を消さないと再計算されない

これで シートを開きなおした際の不要な再計算が発生せず、勝手に回答が変わることもなくなりました。無料お試し枠も節約できますね!

映画版は ちょっと最新すぎる話題だったか

注意点として、既に回答が入っている状態では A列の 質問を編集 しても再計算はされません。一度 A列の質問を消して 横の B列のセルが空欄にする必要があります。

上のように 質問を編集して再計算させたい場合は、

質問を修正し確定 → B列の回答は変わらない

一度 Delete で 質問を削除 → B列の回答も消える

戻るボタン (Ctrl + z )で 削除を戻す → 再計算された回答が 入る

こんな感じの手順となります。



俺たちの AI活用は まだまだこれからだ!

mir先生の次回作をご期待ください。(完)
ってわけじゃないですがw とりあえずこのネタは終了です。

メッシが可愛らしい・・・だと

〇〇のように 振舞ってとか、〇〇として回答してといった 設定コントみたいなことも出来るので、まだまだ面白いネタはありそうですが、とりあえず 流行りの ChatGPTネタは この1回で終了 とします。

↓ こんな感じの使い方も。

流行ってるから スキルレベルの高い インフルエンサーな人たちが 色々発信してくれてますし、mir的にはまだインプット側でいいかなーと。

ちなみに、mirも ChatGPTが 関数で使える風に書いてますし、 「ChatGPTが Googleスプレッドシートで使える!」って完全に言いきっちゃってる サイトも多いですが、厳密には同じ Open AI の提供する 別のAIとなります。

ま、Chat-GPTが使える!って言った方がキャッチーですし、普通に使う分にはそこまで気にしなくていいかも。

別に 本家 ChatGPTの方が賢いってこともないみたい・・・


現在は ChatGPTが一気にブームになっていますが、 競合するサービス(AI)も 開発が進んでいたり、既にリリースされたりしているようです。

いろいろな AIが競い合って 賢くなっていくのは良いんですが、そのうち AIどうしが 自分の方が正しい、自分の方が賢いって感じで マウント取り出して、最終的に「戦争で決着をつける!」 ってならんことを祈るばかりですね。

だんだんと「火の鳥 未来編」の世界に近づいているのかもw

今後も 面白いネタや 他で取り上げてないような テクニックがあれば、また単発 noteで ChatGPT や AI 関連を取り上げるかもしれません。

※ 最初の頃は Chat-GPTって表記を多く見た記憶ですが、 ChatGPTみたいなんで修正しました



とりあえず今回は、今までに記事にしたテクニックが 活用できたよーって話でした。

来週から再び Excel新関数シリーズの続き を書いていきます。

この記事が気に入ったらサポートをしてみませんか?