
8,738 文字

今日はな、OpenAI の O1 モデルについて話すで。コードネーム Strawberry 言うてたやつやな。これ書いてる時点で1ヶ月ほど前のもんや。
手短に言うとな、経験豊富なプロのプログラマーほど上手くはコード書けへんねん。プログラミングせえへん人が、むやみやたらと本番環境で動かすコード生成させたら、えらいことになるで。
まあ、バグの缶詰やな。でもな、O1 のできることは凄いもんで、できへんことの例を見つけるんが難しくなってきてるんや。できへんことはようけあるんやけど、ビデオで説明するには複雑すぎるもんばっかりやねん。ちょうどええ具合の例を見つけるんが難しいんや。
それに、もっと大事なんは、O1 がどれくらいうまくできるか、できへんかの予想が外れたことや。使い方のアイデアもな、良くも悪くも間違ってたわ。
それに、言いたくないけど、ほんまに言いたくないけど、これは初めてや。コーディングが十分にできるAIで、新入社員と同じくらい、もしかしたらそれ以上にできる仕事が少しあるんや。まあ、新入社員が数ヶ月経験積むまでの話やけどな。
これはプログラマーの仕事に色んな影響があるわ。もっと詳しく話していくで。
ええニュースは、ワイの考えではな、これでプログラマーの仕事がとうに必要やった方向に進むんちゃうかってことや。
悪いニュースは、そうなるまでの間、この業界はめちゃくちゃになりそうやってことやな。
(金属音)
(ビープ音)
(アップビートな音楽)
ここは Internet of Bugs、ワイはカールや。35年もコンピューターの仕事してきて、インターネットをバグの少ない場所にしようとしてるんや。今日はほんまに大変な仕事が待ってるで。
O1 の評価に3週間もかかるとは思ってへんかったわ。でも、考えなあかんことがようけあってな。何時間も実験の画面録画したんやけど、まだ整理して、面白いとこだけ切り取って、説明つけてアップロードせなあかんのや。証拠として出すためにな。それができたら、説明欄にリンク貼って、コミュニティのタブに投稿するわ。興味あるなら登録しといてな。
そこから深掘りするビデオも作るで。チャンネルメンバーに公開するわ。今日の話の中で、具体的に触れていくで。
このビデオは、ワイの発見のまとめと、それがプログラマーの仕事にどんな意味を持つか、ってことやな。ここで言っとくけど、ワイはプログラマーの仕事に関係するO1の使い方だけ話すで。司法試験に受かるかとか、ベンチマークでどれくらい点数取れるかとか、他の職種の人の代わりになれるかとかは、ワイの知ったこっちゃない。少なくとも、この動画では触れへんで。
O1 についての最初の簡単な動画で、前に色んなAIエディターを比較した時に使った CodeCrafters の「Python で簡単な HTTP サーバーを作る」チャレンジを O1 にもやらせてみたんや。
O1 はそのテストをほぼ完璧にこなしたから、もっと難しいもんを試さなあかんかったな。ええニュースは、CodeCrafters にはいろんなチャレンジがあるってことや。興味あるなら、アフィリエイトリンク下に置いとくで。
今回は「Rust で grep コマンドを作る」チャレンジを O1 にやらせてみたんや。
これ、AI にとっては難しいねん。だって、Python のコードに比べて Rust のんはようけ少ないやろ。だから、参考にできる Rust の例が少ないんや。でも、Rust の中では比較的簡単なもんやけどな。
まず、これは基本的に文字列マッチングの作業やねん。これ、面接でよく出るおもちゃみたいな問題の一つで、ネットにはようけ例があるんや。
次に、Rust としては本当に簡単なんや。Rust の難しいとこは、状態を一箇所だけで変更したり、所有権を一箇所だけに持たせたりして、借用チェッカーに怒られへんようにすることやねん。でも、この課題ではそんなことせんでもええんや。
この課題を選んだんは、正規表現について話したかったからや。正規表現は全てのプログラマーが学ぶべき本当に役立つもんやねん。
ワイの動画のコメント欄で誰かと正規表現について話してたから、まだ正規表現に慣れてない人もおるんやろうなって分かったんや。この動画では正規表現について詳しくは話さへんで、たくさんの人は興味ないやろうからな。でも、チャンネルメンバー向けに計画してる深掘りコード動画では、かなり詳しく話すつもりや。
今言えることは、ワイはほぼ毎日使ってるし、ワイの道具箱の中で最も価値のあるツールの一つやってことや。全てのプログラマーが知っとくと得するもんやと思うで。正規表現はいろんなことができるんやけど、RegEx を初めて見る人は、メールアドレスにマッチする、こんな感じのもんを見ることが多いんや。
これはほんまに悪夢みたいなもんや。これは RegEx 版の圧縮された JavaScript とか、難読化された C プログラムみたいなもんやな。こんなん作ったり、こんなんをコードベースにチェックインさせたりしたらあかんで。
正規表現を学ぶなら、少しずつ学んで、時間をかけて知識を積み重ねていくんや。そして、このチャレンジはまさにそういう風に設計されてるんや。
まあ、RegEx についてはこれから出すチャンネルメンバー向けの深掘り動画で詳しく話すわ。
比較のために、この grep RegEx チャレンジを ChatGPT-4-0 にもやらせてみたんやけど、完全に失敗したわ。4-0 とは40分から45分ほど付き合ったけど、20回くらい試行させて、無限ループを作ってしまって、でっかいログファイルを生成する始末や。
ワイが諦めた時点で、まだ4つのステップが残ってたから、これは O1 にとってええテストになるやろうと思ったんや。そして O1 は全てのチャレンジをクリアしたんや。完璧やなかったけど、許容できるレベルの仕事をしたわ。正直に言うとな、ちょっと気に食わんかったわ。
そこで、ワイはもっと難しくしてやったんや。チャレンジのように一つずつ小さなステップを与えるんやなくて、チャレンジの全てのステップのプロンプトを一つのプロンプトファイルにまとめてしもたんや。計画の段階で躓くやろうと思ったんやけど、ほんま見事に外れたわ。
一つのプロンプトで全ての要求を与えた方が、ずっとええ仕事をしたんや。完璧やなかったけど、かなりよくなってた。実際、Rust を書くのに関しては、ワイよりもええ仕事をして、しかも速かったと言えるわ。
まあ、ワイは Rust をちょっと触ったことあるだけで、実際のプロジェクトでは使ったことないんや。専門家やないけど、ワイではあんなに速くできへんかったわ。
正直、信じられへんかったわ。運が良かっただけかもしれへんと思ってな。そこで、新しい会話を始めて、同じ組み合わせたプロンプトをもう一度与えてみたんや。そしたら、同じようにうまくいったんや。
ちょっとした文法エラーはあったけど、それを乗り越えたら、チャレンジを完璧にこなしたんや。そして、同じことを繰り返さへんかったな。二つの実装は全く違うもんやったけど、どっちもこのチャレンジの全てのテストケースで動いたんや。
常識チェックとして、ChatGPT-4-0 に戻って、同じ組み合わせたプロンプトを与えてみたんや。そしたら、要件を一つずつ与えた時よりもずっと悪い結果になったんや。これはワイの予想通りやったな。でも、O1 は全然違う動き方をするんや。
それから、CodeCrafters のチャレンジから全ての指示を取り除いて、プロンプトファイルの中身を grep の man ページの正規表現のセクションに置き換えてみたんや。
man ページを開いて、正規表現の部分を取り出して、それをプロンプトに入れて、全部 O1 に渡したんや。そしたら、同じくらいうまく対応したんや。この O1 ってのは違うわ。完璧やないけど、全然違うんや。全然違う動き方をするんや。
ワイは何ヶ月も前から、AI はプログラマーの仕事はできへんって言うてきたし、それは正しかったし、今でもかなりの部分で正しいんや。でも、一つの一般的なケースでは、以前ほど正しくなくなってきてるんや。もしまだ正しいとしてもな。
ワイは大学の CS 学科を出たばっかりの新入社員とようけ仕事してきたで。普通、この新入社員は、実際のプロジェクトで使われてるフレームワークに慣れてへんのや。
しばらくの間、近くで監督せなあかんし、他のもんを壊したり、リグレッションを起こしたりせんように、自己完結した小さなコードの部分だけを任せなあかんのや。多くの人は、宿題の答えを作る以外に何か作ったことがないんや。
中には、紙に印刷して採点されるもの以外、何も書いたことがない人もおるし、ソース管理に触れたことすらない人もおるんや。この O1 ってのは、そういう新卒の CS 卒業生のほとんど、もしかしたら全員よりも生産的やねん。
まあ、数ヶ月経つと、新卒も仕事に慣れてきて、そこからはほとんどの場合、O1 よりも新卒の方がプロジェクトに欲しくなるわ。もし二つのうちどっちかを選ばなあかんとしたらな。でも、そこまでになるのに時間がかかるんや。
正直に言うとな、これは AI がすごいってことよりも、今のコンピューターサイエンス学科や企業の構造への批判やと思うで。
「アジャイルがプログラマーにとっての AI 危機を引き起こした」ってビデオや「面接の仕方が壊れてる」ってビデオで言うたように、この業界は AI がすんなり入り込めるような仕事をようけ定義してしもたんや。
ワイはずっとそれはアホらしいと思ってたし、選べるときは、学問的で理論的なプログラミングの理解しかなくて、お客さんに向けて何も作ったことのない人は絶対に雇わへんようにしてるんや。自分のために作っただけでもええんやけどな。
でも、テック業界では、多くの会社が新卒向けのエントリーレベルの職を特別に作ってるんや。Git やプルリクエスト、ユニットテスト、継続的インテグレーション、複雑なシステムでユーザーから報告された問題を修正することについて何も知らへんけど、面接で LeetCode の問題に答えられる人向けにな。
ワイはかなり自信持って言えるんやけど、O1 は、ほとんどの候補者よりも、ほとんど全ての LeetCode の問題にうまく答えられるやろうな。そして、最初の数ヶ月間、これらの開発者ができるほとんどの作業をより良くこなすやろう。
ワイの意見では、実践的な経験なしで雇える、そういう職種は、以前からアホらしかったし、今では完全に無意味になったんや。でも、そういう職種がまだ存在する限り、そして O1 が存在する今、少なくともプログラミングに関しては、人間よりも AI の方がうまくできる仕事がないとは、もう正直に言えへんのや。
じゃあ、AI に何ができへんのかって? 3月に出した「アジャイルが AI ハイプへの道を開いた」ってビデオでも言うたけど、そのうち AI がワイの嫌いなバックログの作業をようけこなせるようになるって。ワイは O1 がまだそこまでいってるとは思わへんけど、そっちの方向に向かってるんは確かやな。
AI は既存のコードに段階的な変更を加えるのが苦手やし、既存の大きなコードベースを理解するのも苦手や。残念ながら、これをビデオで見せるのは難しいんや。プロンプトに大きなコードベースを丸ごと入れて、バグを処理するためにどこをどう選ぶべきか理解してもらうのは無理やろ。だから、どうやって示したらええか分からへんのやけど、そういう作業は全然うまくできへんのや。
今のところ、大きな見慣れないコードベースに対して、どこをどう変更すべきか見つけ出すのは、一般的に O1 よりも人間の方がまだ上手いんや。でも、それがいつまで続くか分からへんな。
もっとええ質問は、エントリーレベルのプログラマーにできて AI にできへんことは何か?ってことや。少なくとも、チャンスが与えられた場合にな。
まず、AI には新卒が持ってる自主性がないんや。まあ、新卒も実際の経験を積んでからでないとその能力を発揮できへんけどな。これは諸刃の剣で、最初のうちはようけ失敗するんや。彼らが見せる自主性は、大抵全然違う方向に行ってまうんや。
だからこそ、新米プログラマーは宿題の問題やなくて、実際のユーザーの問題を解決するもんを作るべきなんや。そうすれば、自主性を発揮する学習プロセスを早めることができるんや。
この AI はテストを書くのも上手くないんが面白いな。Claude 3.5 のデモで使われた問題を与えてみたんやけど、関数が正しく円を作ってるかどうかチェックしてくれって頼んだら、極端な4つの角だけチェックして、それがええなら全体が円やと思い込むような、クソみたいなテストを書きよったわ。
Claude と同じようなアホなやり方でテスト書いてたんや。最近変わったことや判断力が必要なことには弱いんや。これについては前にも話したな。エラトステネスの篩とか、他のこともな。
これを説明するために、また CodeCrafters に戻って、別のチャレンジを選んだんや。今度は Zig 言語で超シンプルな SQLite リーダーを書くってもんやった。これは SQLite ができることのほんの一部しかできへんのや。挿入や、テーブル作成、結合すらできへんで、本当に単純な一般的なデータ構造の生の読み取りだけなんや。
O1 は全然 Zig のコードをコンパイルできるように書けへんかったわ。書いた Zig コードは一見コンパイルできそうに見えたけど、何度も試してもできへんかったんや。一貫して Zig の関数を間違った使い方してたんや。去年の11月頃の Zig のバージョン0.10にこだわってるみたいやったな。
関数定義を聞いたら、そのバージョンの答えが返ってきたんや。CodeCrafters は新しいバージョンを使ってたから、O1 が吐き出す古いもんはコンパイルできへんかったんや。0.10以降の Zig の関数にどんな文法の変更があったか聞いたら、正しい答えをくれたんや。だから、変更があったことは知ってたんや。
ファイルのコンパイルエラーを見せたら、「あ、これは Zig のバージョンの互換性の問題やな」って正しく言うて、その1行だけを新しいバージョンに更新するんやけど、ファイル内の他の古い使い方は全部そのままやねん。
何回もこれを繰り返して、何回もエラーを与えたけど、一つの関数呼び出しを0.10より新しいバージョンに更新する必要があるなら、変更された全ての関数呼び出しを0.10より新しいバージョンに更新せなあかんって気づかへんのや。0.10では変更がようけあったんやで。
もしかしたら、そのうち気づいたかもしれへんけど、ワイの O1 の実行割り当てが切れてもうたんや。ワイが今まで一緒に仕事したプログラマーで、新しいバージョンを使わなあかんって気づいたら、古いバージョンは使えへんってすぐに分からへん人はおらへんと思うで。少なくとも、一回か二回コンパイルエラーが出た後なら。
Proof News とのビデオで言うたように、AI はよく、どの選択肢を使うべきか判断する能力がないんや。二つの選択肢があって、0.12や0.13よりも0.10の例をようけ見てるから、確率的に重みが高い方を選んでまうんや。どっちを使うべきか判断する能力がないんや。
だから、ワイからしたら、O1 が人間のような推論能力に達したって主張は、根拠のないハイプに過ぎへんのや。
じゃあ、これでどうなるんや? AI は判断力、テスト、自主性が苦手や。そして、これら三つのことは、大手テック企業では一般的にエントリーレベルのプログラマーには期待されてへんし、許可もされへんことが多いんや。
O1 は、エリートコード面接で聞かれるほとんど全ての質問に、ほとんどどの候補者よりもうまく答えられるんや。だから、問題はこうなるわ:「シニア開発者プラスこの AI の方が、シニア開発者プラス新卒数人よりも、これから数ヶ月の間に多くの仕事をこなせるなら、従来の新卒エントリーレベルプログラマーの仕事にどんな意味があるんや?」
パニックになる前に聞いてな、こういう状況は前にもあったんや。
プログラミングの重要なスキルが道具によって時代遅れになることは何度もあったんや。ワイが90年代に学校出た頃は、メモリ管理、ハンガリアン記法、SunOS、Solaris、HP UX、AIX の API の違いが重要なスキルやったんや。
ガベージコレクションができて、ほとんどの場合メモリのことを気にせんでもよくなったんや。ハンガリアン記法ってのは、全ての関数やクラスの始めに、そのパラメータの型を書くってもんやった。オートコンプリートでそれが全く必要なくなったんや。そして Linux が出てきて、各ベンダーが独自の Unix バージョンを持つ必要がなくなって、SunOS と Solaris と HP UX と AIX の違いを気にせんでもよくなったんや。
その後すぐに、ウェブページの Document Object Model オブジェクトを個別に歩いて操作する方法が大事やったんや。DOM って聞いたことあるやろ?それの略やねん。そして jQuery が出てきたんや。最近では、モバイルの世界が Objective-C と Java の代わりに Swift と Kotlin を使うようになってきたんや。
こういうことはよくあるんや。でも痛みを伴うんや。古いルールが通用せんくなる。安定した就職への道が安定せんくなる。チームの組織の仕方も今までの方法が意味をなさんくなって、新しいルールが定着するまでに時間がかかるんや。
これは、新しい技術を使って新しいスキルを持つ人を雇う会社、普通は小さい会社、時には個人事業主が競争上の優位性を持つってことでもあるんや。少なくともしばらくの間はな。新しいルールを正しく理解できた会社がな。
そして、古い大企業、ここ数年で大々的に「会社をアジャイルに移行する」計画を始めた会社、そういうとこは10年か20年経ってから新しいやり方を考え始めるんや。その頃には他の全ての人間が次に移ってるけどな。
これがお前らにとってどういう意味を持つんや? ワイはまだ、判断力の問題が解決される証拠を見てへんのや。それに、LLM が要件を交渉したり、ソフトウェア開発者の仕事の対人コミュニケーションの部分を扱えるようになる証拠も見てへんのや。だから、人工汎用知能やプログラマーの完全な置き換えはまだまだ先やと思うで。
だからワイは、予見可能な未来においては、まだようけの人間プログラマーの仕事があると思うんや。でも、その仕事、特にジュニアの仕事は、近いうちに少なくともある程度変わる可能性が高いんやと思うで。
でも、こう考えてみてな。大企業はこういう時期に問題を抱えるんや。AI みたいな新しい技術にすぐに適応できへん、固まった手順がようけあるんや。それに、多くの大企業は自社の大事なコードが漏れるのを恐れて、AI を全く使わへんのや。使おうとしても、うまくいかへんやろうな。だって、大企業には独自の内部ライブラリやプロセス、パターンがようけあって、全てのプロジェクトでそれを使うことが求められるけど、AI はそんなもんで訓練されてへんからな。
これは、小さくて機動力のある新しい世代の会社が、大企業に対して優位に立つチャンスなんや。お前らの中には、そういう会社の一員になれる人もおるやろう。ワイも前にそういう経験したことあるけど、めっちゃ楽しいで。リスクもあるし、ハードワークやけどな、でも楽しいで。
これは、たとえ自分でやらなあかんとしても、自分で何か作って公開せなあかん理由がもう一つ増えたってことやな。そうすれば、この新しい生態系でもっとええ位置に立てるんや。
そのことについてのビデオも作ったで、下にリンク貼っとくわ。そのパスについてのビデオはもっと出すつもりや。
でも一番大事なんは、もうすべてのプログラマーがこういうツールの使い方を知っとかなあかん時代になったってことや。プログラマーの仕事の条件になるのも時間の問題やと思うで。
今のところ、こういう風に動くのは OpenAI の ChatGPT-O1 プレビューモデルだけやけど、近い将来、他の全ての LLM ベンダー、Meta の Llama みたいなオープンウェイトのんでさえ、O1 が持ってる「思考の連鎖」の改善に相当するもんを持つようになると思うで。
そして、4月の AI テストのビデオで言うたように、自動テストがもっと重要になると思うんや。だって、AI は人間じゃ絶対せえへんような判断ミスをようけするからな。それが、前例のないほどの量の、もっと奇妙で見つけにくいバグを引き起こすんや。
人々が AI の出力のテストに、それにふさわしい優先度を与えてくれることを願うばかりや。だって、今でもバグ多すぎるのに、AI が吐き出せる量のコードじゃ、もっとひどいことになるからな。
でも、どうなるか見てみようや。間違いなく面白いことになるで。
次回までや、見てくれてありがとう。気をつけていこな。
コメント