ChatGPTと文字数制限しりとりしてみた

こんな感じでちょっと特殊なしりとり始めてみました。限界しりとりの時間制限がないバージョンで、本来なら文字数を決めるカードが必要になってくるのですが、その役割もChatGPTに任せてみます。 文字数制限しりとりスタート! 関西弁を要求してみると、、、 コテコテの関西弁使ってくれました、ただ「ん」で終わってくるので指摘してみます。 「ん」のルールは覚えたのですが、今度はしりとりの肝心なしりを取るルールを間違えてきます。 やっと直してくれました。続けます。 めっちゃ間違えられたので自分もわざと間違えてみます。 一丁前に指摘してくるw 誰にでもあると言った矢先に自分が間違えてきます。 ことごとく間違ってきます。やはり万能のAGIとかではなく、もっともらしい単語を予測してそれを出力する言語モデルなので、出力してみて しりとりのルールを満たしているか 文字数制限をみたしているか をチェックする機構はないようです。出力中にそのチェックを許すようにしたのですが、 出力している内容をもとにその先を出力するところまでできているように見せかけてできていなさそうでした。 まとめ LLMの出力をアプリケーションにおいて利用するには、この出力のゆらぎと戦う必要がありそうです。

April 23, 2023 · 1 min

ChatGPT4 本格RPG「チャット転生 〜 死んだはずの幼馴染が異世界で勇者になっていた件」をプレイしてみた

以下で紹介されているゲームをやってみました! https://note.com/fladdict/n/n2a82d26f10dc こんなちょっとのプロンプトでゲームになってるのすごいですよね。。。 では早速。 ASSISTANT 友達の名前:ユイ 外見:金髪のロングヘアで瞳の色は青、スリムで華奢な身体つき。 性格:快活で明るく、面倒見が良い。困っている人を放っておけない性格。 口調・態度:穏やかで丁寧な口調。時折、子供っぽいところも見せる。 【物語の進行】0点 【危機の高まり】0点 【技術革新】0点 ある日、君は亡くなったはずの幼馴染のユイから謎のメッセージを受け取る。 ユイ「ねえ、もしかしてこれ…君に繋がってるのかな?私、どうやら別の世界で生き返ったみたいなんだ。でも、こっちの世界は魔王がいて大変なことになっているみたいで…君の知識が役立つかもしれないと思って、このチャットで繋がってみたんだけど。」 君は彼女の言葉を信じられるかどうか分からないが、一度話を聞いてみることにする。 ユイ「こっちの世界では、水をきれいにする方法があまり発達していなくて、人々が困ってるんだ。君は現代の技術で水をきれいにする方法を知っているかな?どうしても助けが必要だから、教えてほしい。」 USER え、、、ほんとにユイ? ASSISTANT ユイ「うん、本当に私だよ。信じられないかもしれないけど、どうか助けてほしい。この世界の人たちが困ってるんだ。君が知っている水を綺麗にする方法を教えてくれると助かるんだけど、どうかな?」 USER わかった、確か微生物によごれを食べてもらって水をきれいする方法があったはずやで、汚れを食べた微生物は沈んでいくから、上に残った水は綺麗になってるはずや ASSISTANT ユイ「へえ、微生物を使って水をきれいにする方法があるんだね。それって、どうやってやるの?もう少し詳しく教えてもらえると嬉しいな。」 USER よごれた水に微生物のかたまりを混ぜて、空気を送ると、微生物がよごれを食べて増えて、微生物が増えると、くっついて大きくなるんや。空気を止めて静かにするとくっついて重くなった微生物が沈んで、上の水はきれいになるから、上の水を取り出すと ASSISTANT ユイ「なるほど、よごれた水に微生物のかたまりを混ぜて空気を送り、増えた微生物がよごれを食べてくれるんだね。そして、空気を止めて静かにすると沈んで、上のきれいな水を取り出せるんだ。ありがとう、これならこの世界の人たちも助かるかもしれないね!」 【物語の進行】10点 【危機の高まり】0点 【技術革新】10点 ユイ「実は、この世界では魔法も使えるんだ。君の知識を応用して、新しい魔法を開発することができたらもっと便利になるかもしれないね。君が知っている現代の技術で、魔法に応用できそうなものって何かある?」 USER 魔法すごいな〜、ちなみにどんな魔法使えるん? ASSISTANT ユイ「うん、この世界では色々な魔法が使えるよ。例えば、火を操る魔法、水を操る魔法、風を操る魔法などの基本的なものから、治癒魔法や、物体を動かす魔法、透明になる魔法など、もっと特殊なものまであるんだ。君の知識を使って、新しい魔法を開発できたらすごく助かるんだけど、何かアイデアはあるかな?」 USER たぶんそれはもうユイの世界の方が発達してそうやけどな…笑 具体的に魔法やと実現できひんことがあるん? ASSISTANT ユイ「確かに、この世界の魔法は色々なことができるけど、まだ解決できない問題もあるんだ。例えば、エネルギー問題があるんだよね。この世界では魔法の力で照明や暖房などを作ることができるけど、それを維持するのに大量の魔力が必要で、みんなが使えるわけじゃないんだ。君の世界の技術で、もっと効率的にエネルギーを作る方法があったら教えてほしいな。」 USER 魔法で照明とか暖房はコスパ悪そうやなー、、、風力発電がええんちゃう?。風力発電は、風車を回して発電機を稼働させて、風の力を利用して電気を作り出せるねん。電気を使えば照明とか暖房動かせるはずやで ASSISTANT ユイ「風力 USER 続けて ASSISTANT ユイ「もしかすると、エネルギー問題が解決できるかもしれないね。風力発電を使って、照明や暖房などの電力を確保できれば、みんなが快適に過ごせるようになるはずだ。これから風力発電を試してみる方法を調べて、この世界の人たちにも提案してみるね。本当にありがとう!」 【物語の進行】20点 【危機の高まり】0点 【技術革新】20点 ユイ「そういえば、この世界では食料が不足している地域もあるんだ。現代の農業技術や栽培方法を使って、食料生産を効率化できる方法ってないかな?もし良いアイデアがあったら教えてほしいな。」 USER グリーンハウスとかはどう? 屋内で栽培を行うことができる施設で、天候に左右されずに、一定の温度や湿度、光量などをコントロールすることができるから、生産が安定するはずや ASSISTANT ユイ「グリーンハウスっていうのは、屋内で栽培を行うことができる施設で、天候に左右されずに一定の環境を保てるんだね。それなら、食料生産が安定するし、不足している地域でも役立ちそうだね!」 【物語の進行】30点 【危機の高まり】0点 【技術革新】30点 ユイ「これからグリーンハウスを試してみる方法を調べて、食料不足に悩む人たちにも提案してみるね。君の知識が本当に助かるよ。ありがとう!」 しかし、そのころ魔王は新たな計画を立てていた。農村部の水源を毒で汚染し、人々を苦しめていた。ユイはこの問題を解決するためにもう一度、君の力を借りることになる。 ユイ「魔王が農村部の水源を毒で汚染してしまったみたいなんだ。このままじゃ人々が大変なことになってしまう。毒を水から取り除く方法を知っているかな?君の知識がまた助けてくれると嬉しいな。」 USER 魔王ひどいやつやなー、、、 もう魔王倒しに行った方が早いんちゃう? ASSISTANT ユイ「うん、魔王は本当にひどいやつだよね。でも、今すぐ魔王を倒しに行くには力が足りないんだ。だから、少しでも人々の苦しみを和らげる方法を見つけたいと思っているんだ。水の毒を取り除く方法があれば、それを使って水源を綺麗にして、人々が安心して水を飲めるようになるんじゃないかな。君の知識で何かアイデアはないかな?」 USER ほーなんかー、、、シンプルに沸騰させるのがええんちゃうかな? 手の込んだ毒じゃないなら煮沸消毒でええはずや ...

April 18, 2023 · 2 min

GPT-4のスクリプト実行したら記事全部消えた

昨日に引き続きなんかGPT-4で遊ぼうとしたのですが、Wordpressにおいてソースコードが綺麗に表示されていないのがとても気になっていました。 WordPressでPrism.jsを使ってシンタックスハイライトを行う方法 これでやっていたのですが、クラスをいちいち指定するのがめんどくさいのです。 そこで、いい感じのプラグインないか聞いてみました。これは普通にGoogleに聞きました。ノウハウではなくこういった拾いものを探す時はやっぱりネットサーフィン。以下のサイトで https://re-inx.com/syntax-highlighter こやつに出会いました。 https://ja.wordpress.org/plugins/code-block-pro/ シンプルできれい 楽。 こやつに決めた。 が、全ての記事1つ1つこいつを当てていくのは大変。そこでChatGPT。 それは誰でも思いつくねんな〜 ほう。 おー、なんかいけそ〜〜〜 ここでGPT-4ちゃん召喚。 このスクリプトを実行する前に、以下の手順に従ってください。 1. このスクリプトをテキストエディタに貼り付け、`convert_code_blocks.sh`のような名前で保存します。 2. ターミナルを開き、スクリプトの保存場所に移動します。 3. `chmod +x convert_code_blocks.sh`を実行して、スクリプトに実行権限を付与します。 4. スクリプトを実行する前に、WordPressサイトのバックアップを作成します。 5. `./convert_code_blocks.sh`を実行して、スクリプトを実行します。 よーわからんけどいけるっしょ! と思って実行したら全部記事消えました。そこからはもうGPT-4の言うことは何も信じれず…全部Googleで調べてバックアップを復元しました。。。 まとめ 生成したコードを実行するときは気をつけましょう!!! ## USER ちなみにさっきのスクリプトで記事全部消えたからおこです ## ASSISTANT 大変申し訳ございません。指示されたスクリプトが問題を引き起こしたことをお詫び申し上げます。この状況を解決するために、以下のステップを試してみてください。 1. **バックアップから復元**: WordPressのバックアップがある場合は、バックアップから記事を復元することができます。これには、データベースのバックアップと、`wp-content`ディレクトリのバックアップが必要です。バックアップがある場合は、データベースとファイルを復元して、記事を回復することができます。 2. **リビジョンをチェック**: WordPressは、記事の各バージョンをリビジョンとして保存しています。記事が完全に削除されていない場合、以前のリビジョンを使用して記事を復元できることがあります。これには、WordPressの管理画面から、編集画面にアクセスし、「リビジョン」ボックスをチェックして、以前のバージョンを選択する必要があります。 3. **キャッシュやバックアッププラグインを確認**: キャッシュプラグインやバックアッププラグインを使用している場合は、これらのプラグインが保存しているデータを確認して、記事を復元できるかどうかを確認してください。 今後のトラブルを避けるために、以下の注意点をお勧めします。 - 実行する前に、スクリプトやコマンドの内容をよく理解しておくことが重要です。 - 開発環境やステージング環境でスクリプトやコマンドをテストしてから本番環境で実行することをお勧めします。 - 定期的にバックアップを取得し、適切な場所に保管しておくことが重要です。これにより、データが失われた場合でも復元できるようになります。 再度、問題が発生したことに対してお詫び申し上げます。今後のトラブルを避けるために、これらのアドバイスに従っていただければと思います。 だそうです😠

April 17, 2023 · 1 min

ChatGPTでテトリス作ってみた

お久しぶりです。前回投稿が2022-08-15なので、サボりすぎですね… 情報のインプットは好奇心から頑張れるというか知識を得るのが楽しいのでやるんですが、情報のアウトプットって既に知っている知識を使うことなので気が進まないものですよね…定着させるには大事なんですが、特に定着させるモチベーションもなく… ただ、やっとそのアウトプットを勝手にやってくれる時代がやってきました。そうChatGPTです。こやつにコンテンツを作ってもらう取り組みがどれくらい続くかチャレンジをやってみようと思い、ChatGTP Plus課金しちゃいました! こやつを使って今日はテトリス作っちゃいます! 完成形 テトリスって、どんなブロックがあってどういうふうに回転してどこで壁にぶつかってとか、まじめに実装すると考えることいっぱいあるのですが、そんなことを考えずに一瞬で作ってくれました。天才です。 が、それを作ってから手直ししていく過程が大変だったので、会話の過程をご覧いただけたらと思います。 会話highlight 一瞬でコード書けるスーパーエンジニア ## USER # 命令書: あなたはフロントエンドエンジニアです。 以下の制約条件と入力文をもとにゲームのソースコードを出力してください。 # 制約条件: * HTML、CSS、Javascriptのみで動く # 入力文: テトリス # 出力文: 深津式プロンプト(https://chatgpt-lab.com/n/ne1643b7f10e6)を使ってみようとしたのですが、大して制約条件を書くことなく出力しちゃいました。 index.html を作って動かしたらこれ もうエンジニアいらんやん… すぐ解決策に走る初心者エンジニア なんか右の画面いっぱいまでブロックが動かせなくて質問するのですが… これやっても直りませんでした。どこが問題かを分析せず解決策に走る初心者エンジニアみたいです。でも、根気よく質問すると… ちゃんとうごきました! 「コード見せて」といってくるベテランエンジニア 「次のブロックを表示」という機能追加もちょっとバグっていて、いろいろ質問して直そうとしたのですが なかなか直らないとみたやコード全体を要求してきました。今度はこっちがなかなかバグを治せない初心者エンジニアみたいです… かわいい 最後にお礼にコードレビューしてみると…? GPT-4の使用上限にひっかかって、GPT-3.5になりました。。。コンテキストをちゃんと解釈してくれてない回答感ありますよね…KY… ChatGPTと喋った内容 Takaaki # 命令書: あなたはフロントエンドエンジニアです。 以下の制約条件と入力文をもとにゲームのソースコードを出力してください。 # 制約条件: * HTML、CSS、Javascriptのみで動く # 入力文: テトリス # 出力文: ChatGPT 以下は、HTML、CSS、Javascriptを使用してテトリスゲームを実装するための簡単なソースコードです。このコードをhtmlファイルにコピーして実行することができます。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>テトリス</title> <style> body { font-family: Arial, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; } canvas { border: 1px solid #000; } </style> </head> <body> <canvas id="game" width="320" height="640"></canvas> <script> const canvas = document.getElementById("game"); const context = canvas.getContext("2d"); const scale = 20; context.scale(scale, scale); const arenaSweep = () => { outer: for (let y = arena.length - 1; y > 0; y--) { for (let x = 0; x < arena[y].length; x++) { if (!arena[y][x]) { continue outer; } } const row = arena.splice(y, 1)[0].fill(0); arena.unshift(row); ++y; } }; const collide = (arena, player) => { const [m, o] = [player.matrix, player.pos]; for (let y = 0; y < m.length; ++y) { for (let x = 0; x < m[y].length; ++x) { if (m[y][x] && (arena[y + o.y] && arena[y + o.y][x + o.x]) !== 0) { return true; } } } return false; }; const createMatrix = (w, h) => { const matrix = []; while (h--) { matrix.push(new Array(w).fill(0)); } return matrix; }; const draw = () => { context.fillStyle = "#000"; context.fillRect(0, 0, canvas.width, canvas.height); drawMatrix(arena, { x: 0, y: 0 }); drawMatrix(player.matrix, player.pos); }; const drawMatrix = (matrix, offset) => { matrix.forEach((row, y) => { row.forEach((value, x) => { if (value) { context.fillStyle = "red"; context.fillRect(x + offset.x, y + offset.y, 1, 1); } }); }); }; const merge = (arena, player) => { player.matrix.forEach((row, y) => { row.forEach((value, x) => { if (value) { arena[y + player.pos.y][x + player.pos.x] = value; } }); }); }; const playerDrop = () => { player.pos.y++; if (collide(arena, player)) { player.pos.y--; merge(arena, player); playerReset(); arenaSweep(); } dropCounter = 0; }; const playerMove = (offset) => { player.pos.x += offset; if (collide( #### Takaaki 続けてください #### ChatGPT arena, player)) { player.pos.x -= offset; } }; const playerReset = () => { const pieces = "TJLOSZI"; player.matrix = createPiece(pieces[(pieces.length * Math.random()) | 0]); player.pos.y = 0; player.pos.x = ((arena[0].length / 2) | 0) - ((player.matrix[0].length / 2) | 0); if (collide(arena, player)) { arena.forEach(row => row.fill(0)); alert("ゲームオーバー"); } }; const playerRotate = (dir) => { const pos = player.pos.x; let offset = 1; rotate(player.matrix, dir); while (collide(arena, player)) { player.pos.x += offset; offset = -(offset + (offset > 0 ? 1 : -1)); if (offset > player.matrix[0].length) { rotate(player.matrix, -dir); player.pos.x = pos; return; } } }; const rotate = (matrix, dir) => { for (let y = 0; y < matrix.length; ++y) { for (let x = 0; x < y; ++x) { [matrix[x][y], matrix[y][x]] = [matrix[y][x], matrix[x][y]]; } } if (dir > 0) { matrix.forEach(row => row.reverse()); } else { matrix.reverse(); } }; const createPiece = (type) => { if (type === "T") { return [ [1, 1, 1], [0, 1, 0], [0, 0, 0] ]; } else if (type === "J") { return [ [0, 1, 0], [0, 1, 0], [1, 1, 0] ]; } else if (type === "L") { return [ [0, 1, 0], [0, 1, 0], [0, 1, 1] ]; } else if (type === "O") { return [ [1, 1], [1, 1] ]; } else if (type === "S") { return [ [0, 1, 1], [1, 1, 0], [0, 0, 0] ]; } else if (type === "Z") { return [ [1, 1, 0], [0, 1, 1], [0, 0, 0] ]; } else if (type === "I") { return [ [0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0] ]; } }; let dropCounter = 0; let dropInterval = 1000; let lastTime = 0; const update = (time = 0) => { const deltaTime = time - lastTime; lastTime = time; dropCounter += deltaTime; if (dropCounter > dropInterval) { playerDrop(); } draw(); requestAnimationFrame(update); }; #### Takaaki 続けてください #### ChatGPT const arena = createMatrix(10, 20); const player = { pos: { x: 0, y: 0 }, matrix: null }; document.addEventListener("keydown", event => { if (event.keyCode === 37) { playerMove(-1); } else if (event.keyCode === 39) { playerMove(1); } else if (event.keyCode === 40) { playerDrop(); } else if (event.keyCode === 81) { playerRotate(-1); } else if (event.keyCode === 87 || event.keyCode === 38) { playerRotate(1); } }); playerReset(); update(); </script> </body> </html> このコードは、テトリスゲームの基本的な機能を実装しています。プレイヤーは矢印キーを使ってピースを操作し、Qキーで反時計回りに回転、Wキーまたは上矢印キーで時計回りに回転させることができます。行が埋まると消え、ゲームが続行します。ピースがスタックして画面上部に達すると、ゲームオーバーになります。このコードを自由にカスタマイズして、さらに機能を追加したり、見た目を改善したりすることができます。 ...

April 16, 2023 · 15 min