Work with AI ~AIを使った働き方とアンチパターン~

ChatGPTを一週間ぐらい使った感想と活用方法についてです。
※あくまで個人的な感想・意見です
※ChatGPTを想定しています

# 要約
* AIは実務で使えるレベルまで達している
* AIには**自分が出来ないことはやらせない**方が良い
* 自身の知識とスキルはますます重要になる

# ChatGPTとは
![スクリーンショット 2023-03-27 23.43.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115059/78239a1d-7358-76d1-fc7b-a9db2f78bfab.png)

ブラウザ上で自然言語でのやり取りが可能なAIです。
かなり自然で、流暢なのですがたまに誤りが混じっていることもあるので注意が必要です。

# ChatGPTの具体的な活用方法
基本的にはルールがあって、ルールを守って作られたものが成果物になるパターンや
仕様とアウトプットが明確であるものが得意に思われる。
やり方を発明させたりマイナーな知識を必要とするものを出力することは苦手な印象。

## メール文章を考える
![スクリーンショット 2023-03-27 19.11.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115059/6a4054df-395b-fb9f-92d6-7b37b6ed65f5.png)

形式が決まっているため、かなり良い感じの出力となります。
読むだけで実行結果の確認もできるので検証も楽です。
ただ、ビジネスで使うのであれば一度音読するなど検証をルール化したほうが良いと思います。
先方の企業名や自分の名前なども命令に含めることで出力に入れることも可能ですが、セキュリティ的にできるかぎり伏せて行ったほうが良いと思います。
また、口調の指定もできるのでタメ口にしたり、より丁寧な文面にすることもできます。

## Dockerfileの作成
![スクリーンショット 2023-03-27 23.11.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115059/ef49175f-3eb6-ead7-f9de-4d47f7e984ea.png)

こちらのDockerfileをビルドしたところDenoが動きました。
このあたりも、よくあるテンプレートなので簡単に生成できるといった感じです。
ビルド方法に加え、回答にはビルド方法・実行方法まで書いてありました。

## SQLをクエリビルダ(Eloquant)での書き方に変更
![スクリーンショット 2023-03-24 21.49.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115059/d7aff3a7-4e5e-0c69-ab55-46923d837ee2.png)

実際にDBに流したいSQLは明確ではあるものの、それをクエリビルダを使って書き換えるのは案外面倒だったりするが、ChatGPTに依頼すればすぐです。
この辺を数秒でできるのであれば自分で手を動かすより早い。

※ただし、データベース名やテーブル名は攻撃に使われる可能性を考慮してCTEや仮名にするのが良いと思います

## SQLの条件の見直し
![スクリーンショット 2023-03-27 23.14.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115059/d83efa48-91ca-598b-4177-5a9766d1297c.png)

ド・モルガンの法則を使って条件変更を行って条件を簡潔にしてくれました。
また、SQLの処理内容も答えてくれたりします。

※クエリの最適化とは別なので、実行計画は改めて確認しましょう
※こちらも同様にデータベース名やテーブル名も攻撃に使われる可能性を考慮してCTEや仮名にするのが良いと思われる

## 変数名やクラス名を考える
![スクリーンショット 2023-03-27 23.14.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115059/58ff360c-a9df-4932-28bc-9aea1479d85a.png)

可読性に考慮した変数名を考えるのはプログラミングをする上で結構労力がかかる作業ですが、候補の中から選ぶだけならかなり楽になります。

## テスト用データの作成
![スクリーンショット 2023-03-27 23.16.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115059/a6fce1c7-7a1b-e4ae-02f2-45d33d4469db.png)

今年(2023年)の日付と言ったのに2022年で生成されました。
このように平然と間違えるので出力結果を無条件で利用すると痛い目にあいます。

ただし、この回答に対して以下のように返すと
![スクリーンショット 2023-03-27 23.16.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115059/79c06212-e8dc-256e-d0df-dfd9db9e990d.png)

すぐに修正します。
このように代名詞や時事的なものを含めると間違う可能性があるので、必ずより具体的な値を渡したほうが良いです。

ただし、この手違いを含めても１分以内で出来上がるので、間違ったデータが何度か生成されても
まだ時間効率が良い場合が多いと思います。

# 🚫AI活用のアンチパターン🚫
以下はAIを活用する上で個人的にやらないほうがいいと思ったことです。

## 🚫自分ができないことをやらせる
**自分が監修できないことをやらせるのはやめたほうがいい**でしょう。
なぜなら、AIの回答には無邪気に嘘や誤りが含まれています。
これらを見抜くことができなければ、AIを使用することは避けた方が賢明です。

自分が知らない分野やマイナーな事象について説明させる事も基本的に期待しないほうがいいと思います。
※SNSなどでAIは微妙って言ってる人はこのパターンが多い

AIに内容を説明させる際にエビデンスとなるURLを要求することもできますが、
結局確認の手間はあまり減らないので、有効活用かどうかは微妙だと思います。

## 🚫不明瞭な指示を出す
指示内で使う情報がすべて揃っているようにすべきです。
また、情報も全て具体的にすべきです。
例えば先程例に上げたように"今年"ではなく"２０２３年"として伝えたりなどです。
また、どこまでが対象の文章でどこまでが指示なのかも記号などを使って分けましょう。

## 🚫出力を確認しない
趣味なら良いですが、仕事で利用するのであれば間違いなく確認したほうがいいです。
エンジニアならテストを走らせていないコードをリリースしたり、
プルリクエストをレビュー無しでマージすることはないと思いますが、
**作業は早いが人間よりもミスが多い**と思って使ったほうがいいかもしれないです。

## 🚫複雑な処理をさせる
複雑な処理はまだ苦手なようで、[うまくやる呪文](https://www.nikkei.com/article/DGXZQOUC22BVO0S3A320C2000000/)もありますが、それでも正解率が低くなります。
AIに投げる前にしっかりタスクを単純なタスクに分解しましょう。

## 🚫機密情報を渡す
**当然NG**です。
発言内容は今後の学習に使われる可能性があります。
また、そもそもOpenAIに対してリクエストが投げられるのでNGです。
ただし、今後エンタープライズエディションのようなものが契約された場合には変わってくる可能性もあります。
それでも基本的に**顧客情報・アクセス情報などのマスキングは忘れずに行いましょう**。
また、個人的にはコード内に出てくるIPアドレス、データベース名、テーブル名やファイルのパスなどもマスクする方が良いと思います。

# AI時代のエンジニアに求められるスキルの優先度
基本的には今までと同じような技術が求められると思いますが、優先度は変わると思います。
今後はAIに指示を出すために必要な以下の能力が重要になってくると思います。

* 言語化能力
* タスクの細分化能力
* コードリーディング能力
* 技術の幅広い知識

これらの能力は、どちらかといえばマネージャーに求められるものです。
つまり、AI時代のエンジニアは各々がAIという部下と迎え入れたプレイングマネージャーのような役割を担うことになると思います。
さらに、AIの生成結果を検証するためにより高度な知識や技術が必要になるでしょう。

例えば、メールの文章を生成する場合、"時候の挨拶"を知らなければ時候の挨拶を含めようという発想になりません。
また、AIが生成した時候の挨拶が季節に適しているかも確認する必要があります。
つまり、AI時代でも基礎的な知識や勉強が大事になると思います。

AIを当てにして技術力で敵わないエンジニアを追い抜こうなんてことは**出来ない**し、
勉強しなくていい時代にはまだなってないです。
このあたりが
「AIによってスキルの格差が広がる」
「できる人がよりできるようになるツール」と言われる所以だと思います。

# おわりに
![スクリーンショット 2023-03-27 23.13.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115059/66caeb25-b046-99ac-8335-6bde2d1736cc.png)

※この記事の文章は一部ChatGPTを用いて添削しています