TECH BLOG
エクスクリエ
エクスクリエ

ChatGPT 〜クールでときどき嘘つきなコーチ〜

Cover Image for ChatGPT 〜クールでときどき嘘つきなコーチ〜
目次

    ChatGPTの快進撃

    explosion

    みなさん、ChatGPT使ってますか?

    こんにちは。今回の記事担当こむです。

    今年2月にChatGPTが発表されて2ヶ月、毎日のようにAIニュースが上がるようになりました。お昼のワイドショーにも取り上げられちゃってます。ChatGPT以外にもMicrosoft CopilotやGithub Copilot、画像を生成するStable Diffusionなどなど、ビジネスからクリエイティブまで様々な用途にAIが食い込んできました。

    ChatGPTって不思議で面白いですよね。元になる「GPT」は単純に次の文字や単語を予測するための人口知能として開発され、学習のためのデータ量が一定を超えたら急に賢さが跳ね上がった・・・といいます。賢くなった原因は分かってないようですが、そもそも人間だってなぜこれほど賢いのか、自我があるのかも解明されていないわけで、つまりAIが少し知性を持つ可能性が見えてきたような気がしています。

    ※ちなみにGPTがver3.5→4でデータ量をグッと増やしたら、難関試験の上位に入るほど賢くなったらしいのですが、データ量に応じて賢くなるパターンは限界が見えてきたとのことです。次はまた違うアプローチで壁を破らないといけなくて、壁の向こうはさらに人間に近いのかもしれません。

    ChatGPTで遊んでみる

    People who play with computers

    ChatGPTの嬉しいところ、登録がかんたん、しかも無料。エンジニアの端くれとして、時代に置いていかれないようにちょっと遊んでみたいと思います。

    ※ちなみに自分は記事を書くがてら、後発のModel-4が使える有料プランに入ってみました

    単純なアドバイスをいただく

    データベースのテーブルにパーティションを作るヒントを聞いてみました。聞いた相手(のModel)は1,2枚目がGPT-4で、3,4枚目がGPT-3.5です。

    chatgpt-model4-q1

    chatgpt-model4-q2

    chatgpt-3.5-q2

    chatgpt-3.5-q1

    なかなかいい感じの回答くれますね。GPT-4の方がちょっとだけ懸念点も教えてくれるものの、3.5と4で大差はなく、十分に自然な答えが返ってきています。

    おすすめの居酒屋を聞いてみる

    久々の友人(ちょっとお腹が弱い)と飲みに行きたいねという話になったので、あっさりしたものが食べられる居酒屋を尋ねてみました。

    chatgpt-umeda

    どうやらあっさり=鶏という認識のようです。たしかに鶏って牛や豚に比べるともたれにくいですよね。

    「鶏の刺身」はどうでしょう。お刺身は消化にいいけれど、鶏刺しはちょっと不安です。特にあっさりを希望している人にはあまり勧めないかも・・・

    あとは鶏焼酎。えっ ととととと鶏の焼酎??? 初めて聞きました。鶏を化学の力で分解して発酵させたんでしょうか。もし存在するとしたら、何となく脂で香ばしい感じになりそうだなあ・・・

    ちなみに5店舗とも食べログで検索しても出てきませんでした!

    ※2023/5/9追記

    食べログ、ChatGPTプラグインの提供を開始 -ChatGPTに食べログのネット予約情報を連携、ChatGPTを使ってネット予約が可能なお店を簡単に検索できます-|株式会社カカクコムのプレスリリース

    食べログ公式プラグイン(現時点ではウェイティングリストに登録しないと使えない)が登場したようです。プラグインで拡張できるのもChatGPTの良いところですね!

    プログラムのコードを評価してもらう

    以前書いたコードを読んでもらって、意味を教えてもらいました。コードの内容は…GPTさんの回答にお任せします。

    ※コードへのツッコミはご容赦ください・・・

    /**
         * テーブル詳細シートの作成
         *
         * @return SpreadsheetService
         */
        public function writeTableSheet($tableName)
        {
            $siteName = '';
            $dbms = 'MariaDB';
            $date = date('Y/m/d');
            $user = '(ツール)';
    
            $table = $this->database->getDbTable($tableName);
            if (!$table) {
                throw new \Exception("Error Processing Request", 1);
            }
    
            $sheet = clone $this->book->getSheetByName(self::BASE_SHEETNAME);
            $sheet->setTitle($table->name);
    
            // テーブル説明
            $sheet->setCellValue(self::CELL_TABLENAME, $table->name);
            $sheet->setCellValue(self::CELL_DBMS, $dbms);
            $sheet->setCellValue(self::CELL_COMMENT, $table->getComment());
            $sheet->setCellValue(self::CELL_CREATED_ON, $date);
            $sheet->setCellValue(self::CELL_CREATED_BY, $user);
            $sheet->setCellValue(self::CELL_UPDATED_ON, $date);
            $sheet->setCellValue(self::CELL_UPDATED_BY, $user);
    
            // インデックス見出し
            $indexBaseCell = Cell::fromAddress(self::CELL_IDX_START);
            foreach ($table->getIndexes() as $i => $index) {
                if ($i >= self::IDX_MAX) {
                    break;
                }
                $sheet->setCellValue($indexBaseCell->offset(0, $i)->address(), $index->short_type);
            }
    
            // 各カラム
            foreach ($table->getColumns() as $c_i => $column) {
                $sheet->setCellValue('A' . (self::ROW_COLUMN_START + $c_i), $c_i + 1);
                $sheet->setCellValue('B' . (self::ROW_COLUMN_START + $c_i), $column->auto_comment);
                $sheet->setCellValue('C' . (self::ROW_COLUMN_START + $c_i), $column->field);
                $sheet->setCellValue('D' . (self::ROW_COLUMN_START + $c_i), $column->type_only);
                $sheet->setCellValue('E' . (self::ROW_COLUMN_START + $c_i), $column->digits);
                $sheet->setCellValue('F' . (self::ROW_COLUMN_START + $c_i), $column->decimals);
    
                // インデックス番号
                foreach ($table->getIndexes() as $i_i => $index) {
                    if ($index->ordered->has($column->field)) {
                        $sheet->setCellValue($indexBaseCell->offset($c_i + 1, $i_i)->address(), $index->ordered->get($column->field));
                    }
                }
    
                $sheet->setCellValue('O' . (self::ROW_COLUMN_START + $c_i), $column->nullable() ? '' : '○');
                $sheet->setCellValue('P' . (self::ROW_COLUMN_START + $c_i), $column->explain);
            }
    
            $this->book->addSheet($sheet);
    
            return $this;
        }
    

    chatgpt-coderead2

    おっとコードを提示するのを忘れました。が、ChatGPTはコードがないよと教えてくれます。質問の回答以上に、こういう受け答えが一番すごさを実感します・・・

    chatgpt-coderead3

    いかがでしょう?コードを食べさせただけでやろうとしてる内容を把握するのって相当すごいプログラムだと思いませんか。ちなみに内容は(分かると思いますが)ちゃんと合ってます。 ついでに改善コードもお願いしてみました。全部は多いので、抜粋します。

    chatgpt-coderead1

    chatgpt-coderead4

    chatgpt-coderead5

    おお、いい感じですね。意味に応じて関数を分割するなどいい感じの提案をしてくれています。

    余談ですが「ありがとう」みたいな言葉を入れる方がいい回答になると聞いたことがあり、入れるように心がけています。よく「ChatGPTは部下」っていう比喩がありますが、それならちゃんと感謝を伝えないと信頼関係は築けませんからね。

    返答が人間すぎて、感謝の言葉を言うのに全然違和感ないからやっぱりすごい…

    全く知らない言語で、ごく軽量なTodoアプリを作ってみる(断念)

    …までやろうと思ったんですが、ボリュームも出てきたので無しです! 次回担当が回ってきたら書くかも・・・?(もっと書きたい内容が現れなければ)

    ちなみにやったのは「RustでWebチャットを作る」をテーマに。こちらは途中のエラーからいい答えがもらえずに断念。次に「RustでTodoアプリを作る」をテーマにしたら、「インメモリで実装までOK」→「SQLiteで永続化」まではいけました。もちろんRust言語を読み書きしたことは一切ありません。

    Google検索からだと目的の記事を選ぶ必要があるので、一気に答えをくれるのは迷いを減らしてくれます。一方、brewで入れない方法を提示されたり(brewでも入れられるのに)して、結局Googleで調べてみる、みたいなことはありました。

    ChatGPTで遊んでみた感想

    People who write about what they think

    すごい!

    この一言に尽きます。 ChatGPTを使った人も、まだだけど巷で記事を読んだ人も、そこにはほとんど異論ないんじゃないでしょうか。

    これからも色々遊んでみたいと思います。みなさまも是非!

    あと、実在する鶏焼酎をご存じの方がおられましたら、ぜひとも情報をご提供ください。 お酒大好きマンとして一度は味見してみたいものです…

    私たちは積極的に採用活動をしております。
    https://www.excrie.co.jp/recruit/

    Companies

    エクスクリエ
    クロス・マーケティンググループ
    メタサイト
    クロス・コミュニケーション

    Tags