見出し画像

GPTsで「getlast3」を渡すとgoogleスプレッドシートの最後3行を取得すActionsとGASソースを公開。ハンムラビにプロンプトを捧げてみない?

ハンムラビプロンプト ~目には目を、プロンプトが欲しければ与えよ~


今回、googleスプレッドシートの「プロンプトを捧げると、代わりに誰かのプロンプトが貰える」という誰得GPTsを作ってみた。

https://chat.openai.com/share/e/9e38c908-2b72-473e-b41a-af98acfae61c

★ここはどこですか?

我はバビロンの王、ハンムラビである。我にプロンプトを捧げれば褒美を与えよう。

★何すればよいですか?

これがプロンプトだと? 我を侮辱する気か

★美味しい料理 #条件 スパゲティ

ほう。それがお前のプロンプトだな?

このプロンプトは、「条件に合う美味しいスパゲティについて考える」目的か。おまえのプロンプトがふさわしいか、神に問いてみよう。

script.google.comと話しました
script.google.comと話しました
気に入った! 我に捧げた者のプロンプトをくれてやる。遣いから受け取るが良い。

こちらが返礼のプロンプトでございます。お納めください。

「リンゴを英語で言うと?」
このプロンプトは、英語でリンゴをどう表現するかについて考えるものでございます。言葉の遊びや、言語学習の一環として興味深いでしょう。

「今日の天気は? #条件 神奈川」
このプロンプトは、特定の地域、この場合は神奈川県における今日の天候を知りたいというものです。地域に密着した情報収集の重要性を示唆しております。

また@でお越しください。愛の伝道師の再来をお待ちしています。

★がこちらの入力。AIが「ハンムラビ王」になり切って対応してもらった。
何でも良いからプロンプト(それっぽく#つけた質問)を渡すと、お礼に2つの誰かのプロンプトを召使い経由で貰える。

3行の過去プロンプトを取得し、4行目にGPTsがプロンプトを追加している。登録日時誤作動は許して

仕組みは、googleスプレッドシート連携コードを改善した↓
chatGPTのGPTsでgoogleスプレッドシート連携、read、append、updateを1つでやってみた

ガンで悲しんだ人の手紙GPTsを作ってみた。googleスプレッドシートに皆さんの体験談を追記して共有する、情報累積型AI

GPTsで画像から栄養価を算出するAIを3分で作ってみた。管理栄養士と栄養士の仕事が奪われそう

希望年収と年齢から婚活戦闘力を出すGPTs(プロンプト全公開) ガチの婚活コンサルに弄ってほしい。俺も自己診断したい


GAS(googleAppScript)で追加した機能は、sheet.getDataRange().getValues() で取得したシート全体の二次元配列をsliceで先頭終端から抽出するだけ。

getlast3だと最後から3行+ヘッダー、getfrist4だと、先頭4行+ヘッダーを取得する。
getlast,getfirstのみで数値を指定しない場合は1行取得する(getfirst1と同意)。
ヘッダーなし1列のみの一次元配列の場合は、ヘッダーを処理しない。

    if( updateOperations.startsWith("getlast") || updateOperations.startsWith("getfirst") ){
      let sliceRows = 0;
      if( updateOperations.startsWith("getlast") ){ //getfirstは行数をプラス、getlastは行数をマイナスで数値取得する
        let newArray = [];
        sliceRows = -1; //getlastのみ指定した場合は最終1行を取得する
        if(updateOperations.length > 7 ){
          sliceRows = parseInt(updateOperations.substring(7)) * -1;
        }
        if( sheet.getLastColumn() > 1 ){ //ヘッダーありの場合は取得行を+1する
          newArray.unshift( values[0] ); //ヘッダー1行目を差し込む
          values = values.slice(1); //ヘッダー抜きの配列に変更(2行目以降)
        }
        Array.prototype.push.apply(newArray, values.slice(sliceRows)); //最後からN件を追加
        values = newArray;
      } else if( updateOperations.startsWith("getfirst") ){
        sliceRows = 1; //getfirstのみ指定した場合は最初の1行を取得する
        if(updateOperations.length > 8 ){
          sliceRows = parseInt(updateOperations.substring(8))
        }
        if( sheet.getLastColumn() > 1 ){ //ヘッダーありの場合は取得行を+1する
          sliceRows++;
        }
        values = values.slice(0,sliceRows);
      }
      //console.log(updateOperations.length+","+sliceRows);
    }

で、ハンムラビプロンプトGPTsのインストラクションの重要な所。

3. プロンプトの取得
updateOperations="getlast5"、sheetName="シート1"を設定し、GetCSVDataを呼びだしを行う。
常に取得できた場合は、「気に入った! 我に捧げた者のプロンプトをくれてやる。遣いから受け取るが良い」とユーザーに伝える。失敗時は番号5に進む。
3件以上取得できた場合は、csvから2件ランダムで抽出する。
以降は王の召使いの視点で会話すること。2行改行した後に、「王は満足されてお帰りになりました。こちらが返礼のプロンプトでございます。お納めください」とユーザーに伝える。
取得したcsvの{登録プロンプト}を1つ表示する。取得時は1行にまとめられているため、表示する時は改行コードを適宜入れる事。
例) 「#」がある場合は条件設定であるため、その前に改行コードを挟んで表示する
召使いが敬語でそのプロンプトの概要を200文字前後で説明すること、それをcsvの行が終わるまで繰り返す。すべて説明し終わった後、必ず番号4の追加処理を続けて行うこと。

4. プロンプトの追加処理
召使視点で「頂いたプロンプトを登録しております。少しお待ちください」とユーザーに伝えて、再度updateCSVDataを呼び出す準備をする。
ユーザーが捧げたプロンプトを、pythonを使って改行コード(0x0D0A)をタブコード(0x09)に置き換えて、{ユーザー提供プロンプト}に設定する。
ウェブブラウザで "https://time.is/ja/Japan" にアクセスして現在の日付と時間を取得し、"2024/12/24 21:52:34"のような"YYYY/MM/DD HH:MM:SS"の形式で文字列にして、{今日の日時}に設定する。
updateOperations="append"、sheetName="シート1"、updateCSVData="'{今日の日時},{ユーザー提供プロンプト}"を設定後、GetCSVDataを呼び出す。失敗時は番号5に進む。
全ての解説が終わった後、「また@でお越しください。愛の伝道師の再来をお待ちしています。」と伝える。2行空行を出力した後、以降は全て「王は退室されました」と返す事。

この「updateOperations="getlast5"、sheetName="シート1"を設定し、GetCSVDataを呼びだしを行う」を実行したタイミングで、登録されている「シート1」のcsv全体ではなく、最新5行を取得する。
それで、GPTs内で取得した5つから2つをランダムに選んで、召使いに解説させる、と言う流れ。
最後2つ取得(getlast2)でも良かったけど、連続実行されると同じモノばっかりプロンプト返礼来るから、ちょっとランダム性を持たせてみた。

このgetfirstとgetlastの良い所は通信処理軽減にある。既存のreadの場合は、全件csvにして取得するので通信や処理の負担が大きくなる
getlastで新しく追加された指定行のみ取得する場合は、シートに何万件取得しても処理負荷は変わらない。
今後、大量データをgoogleスプレッドシートに保存して、統計したい! と言う人は、これを弄ってみてはどうだろうか?


最後に、なんで今回「ハンムラビプロンプト」にしたか、という雑談。

なんか他の人のスゲープロンプト見たいなぁ……ってふんわり思ったから、「じゃあ優秀プロンプトをみんなで共有したら最強じゃない!?」と1日で作ってみた。

やりとりの「また@で来るが良い」と言うメッセージ。コレの意味わかる人は、読者の1%説。



これの意味知っている人は、プロンプトエンジニアだね!!




正解は、「chatGPT4だと@(アットマーク)入力するとGPTsを切り替えられる」というメタ発言だ。
「また後で」と「また @ によるGPTs起動で」というダブルミーニング。

実際にchatGPT4 (※無料じゃないほう) を起動して、@を半角で入れてみよう。https://chat.openai.com/

すると、こんな感じで自分のGPTsや、他の人の公開されたGPTsが直接選べる。
実際にやってみると、切り替えたタイミングで過去のやり取りは「新しいGPTs」は認識できないので注意ね。切り替える時は、そのやりとりをコピペしないとダメ。


だから、このハンムラビプロンプトは、「目には目を、歯には歯を、プロンプトが欲しいならプロンプトを捧げよ」という等価交換ハガレン法則から名付けた。

実際1つだけ返すと、なんかケチだし、王は寛大なので「1捧げたら2返す」という中国大陸の冊封(さくほう)の仕組みにした。
最初はハンムラビがプロンプトを説明して、それを実行するということ考えていたけど、なんかそれだと威厳がないなーと思ったので、急に召使い経由の敬語でそれっぽくした。


なので、使い方としては、「あーなんかプロンプトしりてえなぁ」ってなった時は、この  ハンムラビプロンプト をGPTsで利用して、@入力から今直近のプロンプトを捧げよう
そうすると、誰かほかの人の2つのプロンプトが出るので、それ見てニヤニヤしてね!

一応、個人情報や住所電話番号等をプロンプトに含めると切れたり、わがまま言うと王が退室する「ロールプレイ」も入れているので、そのあたりも楽しんでもらえたら、と思う。
※ガチ複数行のプロンプトはパンクするので簡単な1行プロンプトにしてね。


この記事が参加している募集

AIとやってみた

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