VScodeを知っていますか?これを読んでいる人はほとんどが知ってはいると思います。皆が使っている高機能エディタです。私は最近使い始めました、で感じたことを技術的なことは知りませんというか、わからないので、教えてもらうために書きました。
私はずっとエディタにはTeraPadを20年以上、というかメモ帳の延長でしか、コードを書くことがなかった、書いてもコピペだったので、スペースやタブや改行を含んで置換ができれば何でもよかったので、サクラエディタと迷ってこれを選択し、OSがアップデートされてそのままじゃ表示がにじんでも互換性設定(高DPI設定)をしてまで使ってました。
高機能なエディタの存在は当然知っていましたが、乗り換えるのが面倒というか、必要に迫られてなかったのでしてなかったのですが、最近AIの発達により、コードを自分でも書くことが逆に増えたので複数行の最初のスペースをそろえられないTeraPadでは満足できなくなりました。それと文字化けが起きてしまうことが増えた、前はメモ帳ではコピペしたら情報が消えるからTeraPadにしたのに、逆にメモ帳がリッチになって絵文字などにも対応したのに、対応してないTeraPadは化けてしまうと、なので私の用途では使えなくなりました。で乗り換えるならコードの補完を体験しようとVSCodeに乗り換えました。ここまででもてだらだらしているのに、この記事ではそれについてだらだら書きます。
で用途はサイトの記述とコードの生成ですが、絵文字はなんで?となるわけですが、私はハロープロジェクトのオタクで、そのブログの解析や、大好きな宮本佳林さんのファンサイトをやり始めたので、その更新のために使っているために必要なのです。
https://karin.heavy.jp/
でこのサイトは厳密にはデータベースではありません、ただアーカイブしているサイトなのですが、それに近いものがあるので、検索エンジンやAIなりに読んでもらいやすく記述する必要があります。そのために構造化データ(JSON-LD)というものがあると最近知りました、公開時は知らなかったので書いてなかったのですが、そんなぴったりなものがあるのかと、ほとんどのページに記述しました。
何が言いたいんだと思っているかもしれませんが、私は記述方法を知らなかったので Claude Codeに聞いたら、正解を教えてくれました。全部書いてもらうことも簡単ですが、ここを間違ってはならないので、数十くらいなので、一つ一つ正確に書きました。
でサイトの文脈のため、以下を延々と記述する必要があります。
["name" => "Juice=Juice", "type" => "MusicGroup"]
で、このあとをちゃんと補完してくれました。その下に["name"まで、打ったら、それまでの記述もあり、行末まで、他のコードの記述に合わせて。流石VSCode、当たり前だと思う人も多いでしょうが、私はされることは知っていましたが、いざされると驚きますね。この補完はIntellisenseというみたいです。
["name" => "モーニング娘。", "type" => "MusicGroup"]や["name" => "アンジュルム", "type" => "MusicGroup"]などなど、最近のグループも書いているのに、その頻度が少ないためかBEYOOOOONDSまでだったので、OCHA NORMAとロージークロニクルを足して書き終わったところ、["name" => "ハロプロ研修生", "type" => "MusicGroup"]と行が補完されました。サイトには一文字も研修生のことは書いていないので、?となりました。
で、まあVSCodeに最初からFree Copilotが入ってるらしいので、それかなあと、それ言ったら上記もIntellisenseだけじゃなくこのおかげかもしれません。で、ポチポチ消していたわけです。でtypeを消したか消してないかくらいで、["name" => "ハロプロ研修生北海道", "type" => "MusicGroup"]、["name" => "ハロプロ研修生東北", "type" => "MusicGroup"]とかずらずら並んできたわけです。
ここで疑問がわきました。なぜなのかを、ここにはレイヤーがあるわけです、VSCodeが書いてくれた理由には。まず一つ目、ハロプロ研修生を私が書いてたから補完してくれた、要するにコード内の記述由来のIntellisenseの可能性です。これはありません、書いてないので。
で、誰もが思う、当たり前じゃんと、ハロプロのこと書いてんだから、それくらい書いてくれるだろと、インターネットにつながってるVSCodeに入ってるFree Copilotがその場でJuice=Juiceにモーニング娘。ならハロプロ研修生ですよね!インターネットの海から学習した結果を参照して、その後の記述を確率的に生成したという可能性です。これも当然あります。
で他になにがあるか考えた時に、コードの辞書参照モードみたいな状態で、インターネットの辞書をきちんと参照したのではないかと思いました。その中でモーニング娘。と一緒に記述されることが多い、ハロプロ研修生が出てきたのではないかと、なぜそうかはもう一段あって、先ほどモーニング娘。やアンジュルムを出したときに、順番が気になったのです。コード的には順番はどうでもいいので、それ自体はいいのですが、よく並べられるときに使われる、公式のHPなどでもそうなっている結成順なりあいうえお順とかに並んでいないことが気になった、インターネットの海から丸っと出してきたわけでなく、一つ一つ辞書を参照して生成してきたなら、そうなっていないことも納得します。
インターネットから引っ張ってきたのなら一緒だろと思うかもしれませんが、この違いはうまく説明できません、今回が後者じゃなく、前者な可能性はあります、もちろんどちらもあって混ざって生成されたとおもいますが、後者と前者には絶対的な差があると思います。
でこの上にもう一つ言いたいことがあって、先ほど言った通り、ハロプロ研修生をけそうとしたら、
["name" => "ハロプロ研修生北海道", "type" => "MusicGroup"],
["name" => "ハロプロ研修生東北", "type" => "MusicGroup"],
["name" => "ハロプロ研修生九州・沖縄", "type" => "MusicGroup"],
ここで知らない人に説明すると、ハロプロ研修生北海道というシステムはありますが、その他の地域のシステムはないはずです。それぞれの地方出身の研修生はいますが、その地方で研修システムは今もこれまでもなかったはずです。
https://suumo.jp/town/entry/kagoshima-kamirena/
こうやって記述した人がいたかもしれませんし、現在もそうなっているかもしれませんが、ここはAIが北海道から確率的に学習データから生成したのじゃないかと思います。行政の地方区分を並べた、北海道なら九州・沖縄に中国・四国にと、ハロプロ研修生九州・沖縄があると思いますか?ありえないとは言い切れない、鹿児島から飛行機に乗って東京までレッスンしにいっていた上村麗菜さんのような人もいるみたいですが、わざわざ東京ではなく福岡などで集まり、それを行政区分で切ってと、とは考えにくいです。あるなら中国地方の西からも来そうです。
これはよく言うハルシネーションというやつですが、その段階にもいろいろあるわけです。高度なモデルにもこれはもちろんありますが、出力をする前に自問自答して、矛盾してないか、間違っていないかを検証するプロセスがVSCodeのFree Copilotにはなかったのかもしれません。それよりも文法的に正しい記述を早く出せるかに振っていると思われます。
ぱっと見はおかしくないので、北海道を採用して、何も考えずに採用すると、ありもしない、ちょっと検索すれば、AIならすぐにわかる、存在しない研修システムの記述をすることろでした。ただのチャット上のハルシネーションなら、存在しないよ!で終わりですが、コードで出してきた、サイトに記述する前に気づいてよかったです。また知らなければ、研修生に地方区分を足すなんて思いつかないので、辞書を参照したかインターネットを参照して生成したので正しいのが、たちが悪いです。
まあ何が言いたいかというと、ハルシネーションに気をつけようねとなるわけですが、AIが確率的に生成したプロセスや間違いを出してきた原因を考えるのはおもしろいということです。