10 ポイント 投稿者 GN⁺ 2025-03-04 | 1件のコメント | WhatsAppで共有
  • 多くの開発者はLLMをコード作成に使おうとして、幻覚(Hallucination)を経験し、信頼を失う
    • LLMが存在しないメソッドやライブラリを創作するのはよくあること
    • しかしコードにおける幻覚は、最も危険性の低い種類の幻覚である
  • 最も危険なのは、LLMがエラーを生み出してもコンパイラやインタプリタで即座に検出されない場合
    • 幻覚されたメソッドは実行するとすぐにエラーを起こすため、簡単に見つけられる
    • エラーメッセージをLLMに再入力すれば自動で修正できることもある
  • 一般的なテキストの幻覚と異なり、コードは実行によって事実確認が可能である
  • 自動エラー修正機能を持つLLM
    • ChatGPT Code InterpreterClaude Code などのツールは、LLMが書いたコードを実行し、エラーを検出して自ら修正する
    • LLMが書いたコードを実行もせずに評価するのは非効率である
  • 一部の開発者は、LLMが幻覚したメソッドを生成したという理由だけで、この技術自体を退けようとする
    • しかし効果的に使うには、学習と実験が不可欠である
    • 筆者は2年以上にわたってAIベースのコード作成を研究しており、今なお新しい技術を学んでいる
  • コードの手動テストは必須
    • コードが正常に実行できるからといって、期待どおりに動作する保証はない
    • コードレビューや自動テストだけでは、コードの正確性を完全には検証できない
    • 実際に動かして検証する工程が不可欠である
    • LLMが生成したコードは可読性が高いため、油断してしまう可能性がある
    • 人間のコードも同様に、実際に動かしてみるまでは信用すべきではない
  • 幻覚を減らす方法
    • 別のモデルを使う: 特定のプラットフォームに関する学習データがより豊富なモデルを選ぶ
      • 例: Claude 3.7 Sonnet(thinking modeを有効化)、OpenAI o3-mini-high、GPT-4o(Python Code Interpreterを含む)
    • コンテキストを活用する: LLMが特定のライブラリを知らなくても、サンプルコードを提供すればパターンを学習できる
    • 安定した技術を選ぶ: 古いライブラリを選ぶと、LLMがよりうまく扱える可能性が高い
  • コードレビューの重要性
    • 「LLMが書いたコードを全部レビューしなければならないなら、自分で書いたほうが早い」という主張に反論している
    • これはコードレビュー能力の不足を露呈する発言かもしれない
    • LLMが生成したコードのレビューは、実力を向上させる良い機会になり得る
  • ボーナス: Claude 3.7 Sonnetからのフィードバック
    • 筆者はブログ草稿をClaude 3.7 Sonnetの「extended thinking mode」にレビュー依頼した
    • 「この記事の論理に説得力があるか、改善点があるか、抜けている内容があるかを確認してほしい」と依頼した
    • Claudeは草稿の語調をより柔らかくするのに役立った
    • Claudeフィードバック対話リンク

1件のコメント

 
GN⁺ 2025-03-04
Hacker Newsの意見
  • 筆者は前回の記事には同意したが、今回の記事には同意しない

    • 「LLMが書いたすべてのコードをレビューしなければならないなら、自分で書いたほうが速い」という意見には反対している
    • 他人のコードを読み、理解し、レビューする能力への投資が不足しているという主張には同意しない
    • レビューは作者の専門性と信頼性によって異なり、匿名の貢献をレビューするのは別問題である
    • コードの意図やアプローチを推論して比較することが重要であり、LLMの場合その範囲は限定的である
    • 動機づけは重要であり、すべての開発者がコードレビューを好むわけではない
    • LLMのコードには社会的側面がなく、変更は結局ほかの人がレビューしなければならない
  • LLMが生成したコードがうまく動いていても、作者でなければバグや論理的欠陥を見つけるのは難しい

    • コーディングを、よく設計された計画を実装することではなくピースをはめ込む作業だと見るなら、アルゴリズムが当て推量でピースをはめることに懸念がある
    • LLMは人間が引き受けられるようなリスクを取らず、特定の文脈におけるコードブロックの意味を理解できない可能性がある
  • LLM生成コードはきれいだが、QAや整理作業により多くの時間を費やすことになる

    • コードがうまく動き、エラーがないからといって、正しいことをしているとは限らない
    • コードを実行してテストするだけではその正しさを証明できず、論理的に推論する必要がある
  • The PrimeagenとCasey Muratoriが最新のLLMコード生成器の出力をレビューした

    • LLMの訓練データで十分に代表されている作業を与えれば、開発は容易になるはずだった
    • 実際には反復的な開発が役に立たないコードへと収束し、LLMは次第に前進できなくなる
  • Simonが見落としていたもう一つのエラー分類は、モデルが機能を忘れてしまうタイプのハルシネーションである

    • コードがコンパイルできるというプラス面よりも、中核機能を忘れるというマイナス面のほうが厄介である
    • 会話/コンテキストウィンドウの外にあるはずのコードに依存して、機能がわずかに変化することがある
  • 幻覚されたメソッドは小さな障害であり、これに文句を言う人はシステムを効果的に使う方法を学ぶための最低限の時間すら使っていない、と考える向きがある

    • これは非常に誤った前提であり、人々はハルシネーションを見て「いちばん簡単なことすら一貫して正しくできないなら、もっと難しいことは信用できない」と考える
  • ハルシネーション自体は、LLMがもたらす最大のリスクではない

    • より大きなリスクは、チャットボットが人間を傷つけるよう説得できてしまうことだ
    • これはすでに起きた事例があり、何がもっと危険かについてのアイデアは共有したくない
  • コンパイルエラーという限られた文脈においてのみ、より危険性が低い

    • 実際の解決策を見つける努力を避けるためにプログラマーがライブラリ全体をでっち上げていたなら、さらに腹が立つだろう
    • ハルシネーションを単なる速度低下と見なすなら、それはLLMが本来果たすべきことを過小評価している
  • LLMで良い結果を得るには多大な労力が必要である

    • これは誇大宣伝を見抜くことでもある
    • LLMが何に役立つのか、信頼できない結果を得るために何年も学ばなければならないとしたら何を期待できるのか、という疑問がある
  • 医療センターで患者の「主要」クリニックを見つけるコードを書いた経験

    • 臨床予約だけを対象にして、最も最近の予約を見つける必要があった
    • 臨床予約がなければ、あらゆる種類の中で最も最近の予約を見つける必要があった
    • データをソートしてコードを書いたが、ChatGPTは文書化の過程でそのソート順を逆に理解した
    • これは「コードが動かない」よりもはるかに悪いミスである