AIやChatGPTについて改めてまとめてみた

## はじめに
今年のITトレンドを語る上で欠かせないのは間違いなく生成AIだろう。ChatGPTを始めとした生成AIの躍進は2023年を語る上で欠かせないトピックの一つだ。

個人的にChatGPTの衝撃は、メタバースやVR・AR以上のインパクトがあった。機械と対話して様々な回答が生み出される様は、テック関連の話題では久々に未来を感じた瞬間であった。　
　
そんな訳で2023年のアドベントカレンダーの記事には生成AI、主にChatGPTについて書いてみたいと思う。
もちろん擦り切れるほど語られたテーマであることは承知の上だし、目新しい話題も恐らくないと思う。
AIの専門家ではないので、いまだに理解できていない部分も非常に多いのだけれども、今年こそ「AI」そして「ChatGPT」というテーマを語る上でふさわしい年もないであろう。

という訳で素人が素人なりにAI、ひいてはChatGPTに関してまとめてみる。
## AIとは
まずAIについて、その歴史を振り返ってみる。

 https://www.mki.co.jp/knowledge/column39.html

改めて確認してみてみると、<b>AIの歴史は1950年代後半から概念のようなものが生まれていた</b>ようだ。
自分が「AI」という単語を初めて知ったのは、上記URLの冒頭にもあったファミコン版のドラゴンクエスト4であった。

それまでのドラゴンクエストシリーズは、二作目のドラゴンクエスト2以降は複数人でパーティーを組むことが出来ていたものの、プレーヤー自ら各キャラクターのコマンド入力を行うなどしていたが、ドラゴンクエスト4では各キャラクターが、作戦というおおよその方針に沿った動作をその状況に応じて自動で行っていた。

クリフトというキャラクターのザラキ連発など突っ込みどころはあったにせよ、自動で行動するキャラクターに大いに感動したものだ。

その後AIという単語を再び頻繁に見かけるようになったのは「機械学習」「ディープラーニング」という単語が広がり始めた「第三次AIブーム(2000年代～現在)」だった。
いわゆるスーパーマリオブラザーズを遺伝的アルゴリズムで攻略するといった動画が複数出始めたタイミングだと思う。

https://www.nicovideo.jp/watch/sm18721450

AIと呼ばれるものには随分前から自然と触れてきてはいたものの、結局「AI」というものに対して、いまだに漠然としている中で下記の記事を見つけた。

https://monstar-lab.com/dx/technology/about-ai/

<b>AIの定義は研究者によって異なっている</b>のが現状のようだ。
現在もブラウザやアプリなど様々なシーンでAIが使われる中、今後も恐らく家電や車など様々な媒体で利用されるであろうAIは“人工的につくられた、知能を持つ実体。”という説明が個人的に一番しっくり来るように感じる。


## ChatGPTとは
少しずつではあるが、AIに対し理解が深まってきた。
次はここに記すまでもないがChatGPTのことも改めて振り返っていきたいと思う。

https://www.hitachi-solutions-create.co.jp/column/technology/chatgpt.html

まずポイントとして挙げられるのは、<b>ChatGPTが対話型のAIサービスである</b>という事だ。
対話型のAIとはユーザがAIと対話をすることで、ユーザの要望に応じた回答を返してくれる技術のことだ。あらかじめプログラムされた返答パターンに応じて回答を行うのではなく、インターネット上の膨大な学習データから精度の高い返答を行う。

特に秀逸なのは、その会話の自然さだ。
ChatGPT 3.5では回答の内容が誤っていることが多かったが、AIとの会話が不自然だと感じたことは記憶にないように思う。

ChatGPTが自然な会話をできる仕組みに関しては、下記記事が参考になった。

https://emira-t.jp/special/22675/

余談だが対話型のAIというのはChatGPTが初めてと言うわけではなく、イライザ（ELIZA）という精神科のセラピストとしてプログラムされたものが始祖とされているようだ。

https://ja.wikipedia.org/wiki/ELIZA

もっともChatoGPTのように大規模なデータから回答を導きだすというものではなく、今で言うチャットボットのようなもので、相手の発言に対し複数の回答パターンの中からマッチしたものを返答し会話するとのこと。

ちなみにELIZAのプログラムはオープンソースとして今なお存在しており、下記URLではjavaScript版のELIZAと会話が出来たり、実際にダウンロードして自分の環境で実装することが可能だ。

https://www.masswerk.at/elizabot/


## いろいろと試してみた
AIに関しての歴史や、背景についての振り返りが出来たところで、実際にChatGPTにいろいろと質問をして試してみたいと思う。


### 除雪に関する質問
冬季の悩み事といえば、まずは除雪だ。家で除雪を行うのは本当に骨が折れる作業なので「効率的な除雪の方法」をChatGPTに聞いてみた。

![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/2b744662-446f-456c-57eb-1e00eb63b973.png)

全体的に納得感はあるが、チームワークという回答は正直身も蓋もない回答であった。
改めて効率的に除雪できるシステムやマシーンがあるか聞いてみた。

![image12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/44a6a984-6ab3-5f08-fe04-ca200e23fa8e.png)

最後に一般家庭でも導入できるものがあるか聞いてみた。
![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/485295f1-5e72-cce5-2ad5-13232b7534b9.png)

最初の質問では、前提条件である「家で除雪を行う」ということを伝えていなかった為、少し突飛な回答が出てきたが、追加で条件を伝えると回答の軌道修正できたように思う。


### HTMLとCSS、Javascriptで作るオセロ

一般的な質問の次は、何かプログラミングをさせてみたいと考えた。
そこで、HTML、CSS、Javascriptを使用してオセロを作ってほしいと伝えてみた。

前回の除雪の質問の際に、前提条件を予め伝えることが重要だと分かった。
今回は検証する意味も込めて少し雑に質問してみた。

![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/e80428e2-db5e-284e-b463-0db02cfe1ed2.png)

![image10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/347fa4f9-f2ff-5e66-6e03-2458a424ac41.png)

![image9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/60849f01-1ffb-63f0-8d09-265c9503f091.png)
石の反転のロジックが無かったので追加で質問してみた。


![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/e249e5a4-819d-19d2-0de4-47a231b77db8.png)

出力されたソースコードはこちら
```JavaScript:script.js
const boardSize = 8;
const gameBoard = document.getElementById('gameBoard');
let board = [];
let currentPlayer = 'black';

function initBoard() {
    for (let i = 0; i < boardSize; i++) {
        board[i] = [];
        for (let j = 0; j < boardSize; j++) {
            board[i][j] = null;
            const cell = document.createElement('div');
            cell.classList.add('cell');
            cell.dataset.row = i;
            cell.dataset.col = j;
            gameBoard.appendChild(cell);

            cell.addEventListener('click', () => {
                if (placeDisc(i, j)) {
                    currentPlayer = currentPlayer === 'black' ? 'white' : 'black';
                }
            });
        }
    }
    // 初期配置
    board[3][3] = 'white';
    board[3][4] = 'black';
    board[4][3] = 'black';
    board[4][4] = 'white';
    updateBoard();
}

function placeDisc(row, col) {
    if (board[row][col] !== null) return false;

    let flipped = false;
    for (let dx = -1; dx <= 1; dx++) {
        for (let dy = -1; dy <= 1; dy++) {
            if (dx === 0 && dy === 0) continue;
            let x = row + dx;
            let y = col + dy;
            let flippedThisDirection = false;
            while (x >= 0 && x < boardSize && y >= 0 && y < boardSize && board[x][y] === (currentPlayer === 'black' ? 'white' : 'black')) {
                x += dx;
                y += dy;
                flippedThisDirection = true;
            }
            if (flippedThisDirection && x >= 0 && x < boardSize && y >= 0 && y < boardSize && board[x][y] === currentPlayer) {
                while (x !== row || y !== col) {
                    x -= dx;
                    y -= dy;
                    board[x][y] = currentPlayer;
                }
                flipped = true;
            }
        }
    }
    if (flipped) {
        board[row][col] = currentPlayer;
        updateBoard();
    }
    return flipped;
}

function updateBoard() {
    for (let i = 0; i < boardSize; i++) {
        for (let j = 0; j < boardSize; j++) {
            const cell = gameBoard.children[i * boardSize + j];
            cell.innerHTML = board[i][j] ? `<div class="disc ${board[i][j]}"></div>` : '';
        }
    }
}

initBoard();

```

そして完成したのがこちら。
https://kamo-shika-sato.github.io/chatgpt/

しっかりオセロになっている。。。
そもそもオセロがどんなゲームであるかを説明せず、「HTML、CSS、Javascriptでオセロ作って」だけで、この結果が出力されたのには正直驚いた。



### チラシの制作

プログラミングの次はデザインかと思い、最後にデザイン展のチラシを作成してもらった。

デザイン展を開催する体で、そのチラシのデザインをChatGPTにお願いしてみた。
デザインの方向性は具体的な指示をしたが、展示会名やどういった作家が出展するかなどのディテールは省いて指示を出してみる。

![image13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/28841c17-a4a3-08e0-7f4d-d338b2a59e84.png)


実際に生成された画像はこちら。
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/ed02163d-c9de-1999-f283-4bb21c44c770.png)
肝心の内容は指示をしていなかったこともあり、雰囲気だけのチラシになってしまったが、ものの数秒でこのデザインカンプが作成できれば制作の際の壁打ちには使えるのではないだろうか。

その後、より具体的に詳細を伝えたが
![image7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/65567650-3bbc-6cab-58e2-fc6bc8059eb7.jpeg)

![image11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630721/13734641-db7b-7b64-056d-daec783a96dd.jpeg)

正確なテキストが入った画像を生成することは出来なかった。
この辺りはプロンプトが原因かDALL-E3の問題か不明だが、他のブログなどを見る限りひらがなやカタカナなどの日本語の生成が出来ていなかったので、恐らくDALL-E3の問題なのだと思う。

## アフターAI、ChatGPT
ChatGPTに対しいろいろと試してきたが、予想以上にケースに様々なケースで利用できそうだと感じた。
最後にこのままAiの進歩が進み、AIが一般化することで社会が今後どうなっていくかを考えてみたいと思う。

ちなみに自分は「今後AIに人間の仕事が奪われる」という考えは正直あまりない。
その理由は、これまでの歴史の中でも様々な技術革新が行われてきたが、社会がそれに適応し変化していったからだ。

活版印刷が発明され書物が一般の人々にまで広がることで民衆の知識を高めたり、PCやインターネットの普及により情報の伝達速度が飛躍的に高まりビジネスやコミュニケーションの形が変わったように、AIが進化することで人々の生活も良いように変わっていくのだと思う。

https://forbesjapan.com/articles/detail/17853

同時にその先の未来で必要なのは、AIを扱う人間の知識だと感じた。
ChatGPTを試した際に、前提条件を伝えなかったことで出力される結果が少し的外れだったように、AIを扱う人間が何を求め何をAIに伝えるかによって出力される結果は変化する。
プロンプトの技術云々というよりは、その人の持つ知識量や使い方によってAIの可能性の大きさは変わってくるように感じた。

AIはとても便利なツールだ。
だからこそ、このツールをより便利に活用する力が必要なのだと思う。

この文書は人間が書きました。