別件でCakePHP5のプログラミングの話をしている際に、ChatGPTのことについてちょっと触れましたが、ここではどんなことだったのか少しお話したいと思います。
昨今AIの技術が進み、色々な分野でAIが組み込まれ、今ではなくてはならない存在までなっています。
事務作業だけでなく、生産系やエンジニア系でも利用されて、とても便利なAI。
作業効率を高めるためとして利用するというのはとても良く分かります。
しかし、完全に信用しても良いものかというと自分はそれはいかがものかと思って利用しています。
それに値する理由の一つとして今回の話をします。
それは、CakePHP5を利用してWEBシステムを構築しているときのことです。
一つ目は、HTMLでチェックボックスを複数設置し、選択されたデータをDBで検索してデータを取得するという仕組みをプログラミングしていたとき、これをChatGPTでソースを生成してもらおうと思いました。
cakePHP5でDBからデータを取得するメソッドにどのようなものを追加するかを聞いてみると以下のような回答が返ってきました。
ちなみにDB側のcategoriesというカラムに、登録画面でチェックボックスから複数選択された値をカンマ区切りでvarchra型で保存されているものが20件登録されているとします。
class ModelController extends AppController
{
public function index()
{
// 検索条件を取得
$categories = $this->request->getQuery('categories');
// データベースからデータを取得
$query = $this->Model->find();
if (!empty($categories)) {
$query->where(['Models.categories IN' => $categories]);
}
$results = $query->all();
$this->set(compact('results'));
}
}
内容としては $query->where([‘Model.category IN’ => $categories]); という風にINを使って取得するという回答がありました。
実際にこれを使用してみると、データは取得できず0件となりました。
ちなみに、実行されたSQL文(FromとWhereの部分のみ抜粋)はこんな感じ
FROM
models Models
WHERE
(
Models.categories IN (
'val01', 'val02', 'val05'
)
もしかしてデータは取得できたけど、Controller内の変数の代入がおかしかったのかと思い、出力したSQL文をphpMyAdminでDBに直接実行してみましたが、0件でした。
じゃあ他の方法でやってみるか?と思い再びChatGPTに問いかけると別の方法が提案されました。
$query->where(['Model.categories LIKE' => '%' . $categories . '%']);
早速このソースを組み込んで実行してみると、
Cannot convert value `Array
(
[0] => 'val01',
[1] => 'val02',
[2] => 'val05',
)
` of type `array` to string
とエラーが表示されました。データ取得時に使用した変数はArray型で使用できませんよという感じ。
そらチェックボックスで選択したデータを送るのだからArray型ですよね。そのデータからどのような文でDBからデータ取得できますかということを問うているんですけどね。
エラー文を送り、また違う方法を聞いてみたところ、Array型をImplode()関数でカンマ区切りの文字列に変換してくださいとの回答があり、さらなる取得方法が提案されました。
$query->where(['FIND_IN_SET(categories, :searchString) > 0'])->bind(':searchString', implode(',', $categories));
ソースを書き換え、実行してみると・・・取得は0件でした。
全く解決にたどり着こうとしません。
そこから聞いても聞いても答えがループする感じで欲しい情報まで届く気配がありません。
そして最終的に解決に至ったのは、公式ドキュメントと独自の知識による力業でした。
どのような事かと言うと、チェックボックスを複数選択して飛んできたArray型のデータをforeachでDBに送るSQL文を生成するためのデータを用意し、クエリーに追加するという方法でした。
$ary = [];
foreach ($categories as $value) {
$ary[] = ['categories LIKE' => '%' . $value . '%'];
}
$query->where(['OR' => $ary]);
これにより生成された実行されたSQL文は以下のような感じになってました。
FROM
models Models
WHERE
(
(
categories LIKE '%val01%'
OR style LIKE '%val02%'
OR style LIKE '%val05%'
)
)
これにより、val01、val02、val05が含まれたデータを持つ情報が数件取得され、無事に表示されました。
結局は自分が持つCakePHP5の知識と、公式ドキュメントの内容を確認し、トライ&エラーで試行錯誤して情報取得にたどり着きました。
AIへの命令は細かく理解しやすい内容で行うほど期待する回答が返ってきやすいという話を聞きますが、自分が行った今回の結果は全く持って残念な結果となりました。
命令文が悪かったと言われればそれまでなのですが、人間の脳で行う解釈とAIの機械で行う解釈は別物です。
AIを使う時は、元々その作業を解決できる技術や知識あり、その作業の効率を向上させるためにプログラミングや情報整理など時間や手間がかかることをAIに行ってもらうというのが理想のような気がします。
生成した内容が正解か不正解かも分からない人がAIで十分と自信を持ち、行動するのはあまりよろしくないかなと。
AIの使い方の勉強もいいですが、自分が行っている分野の勉強はある程度した方がいいと思います。
AIが出した回答が間違っていたりしても、その間違いから修復したり変更したりして利用する実力があってこそが大事なのではないでしょうか。