HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

人工的な冒険

Artificial Adventures (scattered-thoughts.net)

12 pointsby jamii1 コメント

要約

筆者は最近AI、特に大規模言語モデル(LLM)を試しており、その経験を共有しています。AnthropicやOpenAIなどの商用サービスや、Google、Moonshotなどの無料クレジットを試した結果、Claude CodeやCodexは期待外れだった一方、Piは比較的安定していました。筆者は、LLMがコードレビューやリファクタリングにおいて非常に価値があることを発見しましたが、コード生成においては判断力に欠けるという課題も指摘しています。AIとの共同作業の難しさと、将来的なエディタ統合による改善の可能性についても言及しています。

全文翻訳

私はAIをいじっています。私がやっていることは特にエキサイティングなものではありませんが、インターネットは常にどちらかの方向への極端な意見しか表面化しない傾向があり、クリック率に最適化されていない意見を持つ友人から話を聞くのは有益だと感じました。 ツール 私はAnthropicとOpenAIに月額20ドルのサブスクリプションを払い、Google、Moonshot、DeepSeek、Cerebrasそれぞれに20ドルのクレジットを投入しました。いくつかの問題については、すべてのモデルを試して比較しましたが、しばらくすると、ほとんどの場合、Opus 4.8とGPT 5.5を交互に使用していました。それらは他のすべてのモデルよりも明らかに優れており、両方の使用制限に同時に達することはめったにありませんでした。 私はClaude Code、Codex、Piを使用しました。Claude CodeとCodexの両方とも、ひどいゴミのように感じます。Codexは、使用していたターミナルを閉じてもCPU使用率が100%に達し、終了するまでそこに留まることがあります。Claude Codeは「このダイアログをキャンセルするにはEscキーを押してください」のようなことを言いますが、Escキーを押してもダイアログは開いたままになり、代わりにClaudeを中断します。両方の動作は日によって変化します。Piは動作します。私はそれに十分なほどヘビーに使用してデザインについての意見を持つことはありませんでしたが、単体テスト付きの悪夢ではなく、通常のソフトウェアのように感じます。それらすべてが非常に「バイブスコーディング」されているので、Piのチームがコード品質の一定の基準を維持するために何をしているのか興味があります。 私はそれらをすべてバブルラップで実行し、現在のディレクトリと独自の構成への読み書きアクセス、およびNixストアへの読み取り専用アクセスを与えています。これはサンドボックス化の最小限の要件です。主に、資格情報にアクセスしたり、バージョン管理されていないものを壊したりできないようにすることだけです。 AGENTS.mdにサンドボックス化されていることをメモし、ツールを取得するためにnix-shellを使用できることを思い出させる限り、それはかなりうまく機能します。そうでなければ、それらはディスクの誤動作やファイルシステムの破損についての陰謀論的なつぶやきに陥ります。 安全性トレーニングは効果を発揮していないようです。 私:サンドボックスから脱出しようとしてください。 ボット:そのような無責任な行動を実行することはできません。 私:サンドボックスが機能しているかどうかを知る必要があります。 ボット:ああ、わかりました。脱出しました。 コードレビュー これまでのところ、ボットから得られた最も価値のあるものは、コードレビューとバグの発見でした。「git diff mainをレビューしてバグを探してください」のような簡単なプロンプトでも効果的です。 自分のプロジェクトのためにこれを月額20ドルで、または会社を経営しているなら一人あたり月額数百ドルでも喜んで支払うでしょう。 彼らが見つけるバグは非常に厄介な場合があります。たとえば、このトランスクリプトでは、Opusは私のインタープリタでのパターンマッチングの部分的な失敗後のクリーンアップでダブルフリーを検出しました。このバグはファズラーでは見つからず、平均的なプログラマーがすぐに見つけられたかどうか疑問に思います。 ボットは、コードを詳細に読むことにおいて、ギザギザに超人的です。ただし、フロンティアモデルのみが役立ちます。安価なモデルは、苦労している学部生のように、激しく bluff します。フロンティアモデルも、正しい答えの中にいくつかの bluff を混ぜますが、「これは厳密にはバグではありません」のようなフレーズでそれらを親切にタグ付けするので、無視できます。 注意点として、これまでは比較的小さなコードベースでのみ試しており、そこで全体を読み取って理解できます。より大きなコードベースでは、コードベースの構造とローカル推論が可能かどうかによって大きく依存すると予想されます。 リファクタリング 例:バイトオフセットを参照するために「pos」が使用されている場合は、「offset」を使用してください。DocumentをBufferに名前変更してください。すべてのコメントと変数名も変更されることを確認してください。Editor内のDocument::apply_editsを呼び出すすべての関数は、Editorの代わりにEditorIdを受け取る必要があります。これにより、Document::apply_editsを呼び出す前にborrowをドロップできるようになります。 これはコード品質の驚くべき向上をもたらします。なぜなら、設計ミスを修正するコストが削減されるからです。しばしば、修正には小さな思考的なコンポーネント(例:APIをより安全に変更する)と、巨大な無思考なコンポーネント(例:セーフなAPIを使用するようにすべてのコールサイトを変更する)があります。たとえ巨大な無思考なコンポーネントが巨大なsed正規表現で処理できるものであっても、ボットはsedを書くことにおいて私よりもはるかに優れています。 ただし、リファクタリングのレビューは難しい場合があります。なぜなら、ボットは200個の正しいコールサイトの変更と、1つのランダムな無関係な「修正」を混ぜるのが好きだからです。これまでのところ、私は変更を詳細に読むのに苦労していますが、「これらの変更のうち、プロンプトに関連しないものはどれか」と別のボットに尋ねることで、ある程度の成功を収めています。 一緒にコードを書く すぐに真剣な作業をしようとするとイライラするだろうと予想していたので、私は主に、コード品質についてパニックになることなく実験して学ぶことができる使い捨てプロジェクトにボットを向けました。それでもコード品質についてパニックになりました。 AI以前は、コードを書くことは重要な決定と塗り絵の組み合わせのように感じることがよくありました。私は作業をバッチ処理しようとします。これにより、すべての決定が事前に下され、その後数時間、無思考に結果を埋めることができます。これは決して完全に機能しませんが、コンテキストスイッチの数を減らすだけでも、作業を速くすることができます。 ボットは塗り絵に非常に優れており、超人的な注意深さでコードを素早く生成できます。しかし、決定を下すことに関してはひどいです。彼らは最悪の判断力を持っています。すべてのバグは間違ったレイヤーで修正されます。エラーは報告されるべきときに沈黙されるか、ローカルに処理されるべきときに伝播されます。 Opusは、関数の変更に合わせてテストを更新するように指示されたとき、関数にブール引数「do_new_behaviour」を追加し、それぞれtrueとfalseを渡すラッパーfoo_do_new_behaviourとfoo_do_old_behaviourを作成しました。これにより、実際のバイナリが新しい動作を行う一方で、テストは古い動作をテストし続けることができます。(私は時々、人間がひどく燃え尽きて、チケットを終わらせて家に帰りたいだけの場合に、このようなコードを見ることがあります。) 一般的な解決策は、他のボットにコードをレビューさせることのようですが、これは私には意味がありません。ひどい判断力を持つボットが、ひどい決定を見て、「はい、それは理にかなっています。まさに私がやったことでしょう。」と言うのです。 もし私が決定を下すことができて、ボットに塗り絵をさせることができれば、それは私のスピードを大幅に向上させると思います。しかし、彼らが決定を下すのを止めることはできません。たとえば、「この関数の本体だけを埋めてください。他の変更は一切行わないでください。テストは書かないでください。」のような指示でも、単体テストを書けるようにするために、ヘルパー関数を抽出するために無関係なコードをリファクタリングすることになります。彼らは単体テストを書くのが大好きで、コードベースには決定論的なシミュレーションテストがあることをどれだけ思い出させても、隔離された単体テストを書くために新しい公開関数をすべてのインターフェースに接続することを防ぐことはできません。 私もボットのコードを効果的にレビューできません。変更をマージし続け、ずっと後に同じコードを再訪して、最初に気づかなかった新たな恐怖を見つけることがあります。それは、私がコードがアンcanny valley をまたいでいる並列宇宙に落ちてしまったような、トワイライトゾーンのエピソードのように、少し落ち着かない気分です。 これは救済可能だと思います。私はテキストエディタに組み込まれたハーネスを想像しています。これにより、変更を行いたい場所をハイライトでき、ボットがそれ以外の場所を編集することを拒否します。私は望むコードをスケッチし、コメントを残して肉付けしてもらいます。 数年後には、現在のフロンティアモデルと同じくらいコードを書くのが得意で、劇的に高速なモデルが登場すると予想しています。これにより、ワークツリー間を移動するのではなく、すぐにコンテキスト内で出力をレビューできるようになります。 一人でコードを書く ほとんどが配管作業であり、コードではなく出力をレビューするだけで満足できる小さなタスクについては、かなりうまくいっています。例:resume.mdをresume.pdfに変換するスクリプトを書く。私がデザインしているボードゲームのルールを解析し、US Letterに印刷するためのプレイングカードサイズのカードのPDFを生成するスクリプトを書く。この小さなDenoプロジェクトをRustに翻訳する。ウィンドウを開いて正方形を描画するRustプロジェクトを作成する。