Anthropic公式!2024年最新プロンプトエンジニアリング入門!
引用元:https://news.ycombinator.com/item?id=45551260
「engineering」って言葉の使い方がマジで気に食わないね。あれは物理法則とか知識を応用して、予測通りに物を作るもんだろ?これはただ闇雲に試してるだけじゃん。
カナダみたいに「Engineer」って名乗るにはライセンス必須ってのがいいよな。アメリカみたいにソフト開発者や整備士、HVAC業者、配管工まで「Engineer」って呼ぶのはさすがにやりすぎだろ。
いや、俺は反対。資格があろうがなかろうが、実際にEngineeringをやってるならそう名乗っていいと思う。もし区別したいなら「<credential name> Engineer」って呼べばいい話。「Engineer」って言葉を資格持ちだけが使えるように独占するのは、権威主義的で不要な利権漁りだろ。
言葉にはいろんな意味があるんだよ。「prompt engineering」の「engineering」は「social engineering」と同じで、二次的な意味合いだよね。Google、Merriam-Websterとかの辞書でも「巧妙に何かを引き起こすこと」とか「計算された操作」って意味が載ってるよ。
https://www.google.com/search?q=define%3AEngineering
https://www.merriam-webster.com/dictionary/engineering
https://www.collinsdictionary.com/dictionary/english/enginee…
https://www.yourdictionary.com/engineering
この議論は、いわゆる「engineering」チームがやってる仕事の多くにも当てはまると思うよ。「Engineerがやることは全部Engineering」っていう暗黙の前提があるし、そもそもソフトウェア全体が「Software Engineering」って呼ばれる価値があるのかっていう根本的な疑問もあるよね。
たしかにね。でも俺が言いたいのは、「Engineering」ってのは厳密さと再現性に基づいた特定のアプローチを指すってこと。結果がランダムなシードに左右されるなら、それはEngineeringじゃない。確立されたプラクティスがないのも違う(だから「Software Engineering」も常に怪しい言葉だった)。ランダム性のあるマシンに新しいPromptを試して、うまくいくのを探すなんて、絶対Engineeringじゃないよ。
そういう言葉遊びをするなら、「Engineering」って元々はエンジンを扱うって意味だったんだぜ。言葉ってのは、新しい概念を理解させるために時代と共に進化していくもんだろ。
医者とか弁護士も同じだよね。CPAみたいに、ただの会計士と、何か重要な時に必要な「Certified Accountant」みたいに区別すればいいんじゃないかな。
Engineerってのは、非決定論的なシステムを常に扱ってるんだよ。それを既知の許容範囲内で予測可能に動かしたり、定量化された許容できる故障率で機能させたりするのって、まさにEngineeringそのものじゃん。
「Vibe Prompting」って呼んでるよ。モデルがちょっと変わるだけで、いままでのプロンプトが使えなくなったり、新しいプロンプトの前提が崩れちゃったりするんだよね。
「ランダム性のある機械にプロンプトを投げ込むのはエンジニアリングじゃない」って意見だけど、壁にものを投げつけて何がくっつくか見て、理論を立てるのが科学やエンジニアリングの始まりじゃない?Adam Savageも言ってるよ、「適当にやるのと科学の唯一の違いは記録することだ」ってね。
LLMの出力に対する許容可能な失敗率って、どうやって数値化したり、決めたりするんだろうね?
最初のエンジンも、物理学をちゃんと理解してなくても作られたんだよ。だから、もともとの「エンジニアリング」って今のAIのやり方に近いんじゃない?元のコメントが言うような現代的な解釈よりね。
最近の議論だと、ソフトウェアエンジニアリングって変なんだって。コンピュータは完全に予測可能だからね。他のエンジニアリング分野はもっと予測不能な要素があって、それを許容範囲に収めるのが目標だけど。「プロンプトエンジニアリング」は「ソフトウェアエンジニアリング」より、本物のエンジニアリングに近いかもね!
化学配合のわずかな変更でも、前のプロセス設計が無駄になったり、新しい配合の前提が崩れることってあるよね。入力や出力が変わるときに、生産や運用プロセスを変えるのは、たくさんのエンジニアにとって当たり前の仕事なんだよ。
ごめん、でもカナダだと「エンジニア」って名乗ると、自分の専門的な行為に法的な責任が伴うんだ。大学4年でジュニアエンジニアになって、数年働いてからスポンサーのエンジニアに保証してもらって、さらに試験に合格してやっと「エンジニア」になれるんだよ。アメリカの自称エンジニアとは全然違うんだよね。
仕組みをよく理解せずに適当にやるのはエンジニアリングじゃないよ。でも、モデルのアーキテクチャや学習、推論プロセス、計算言語学、意味論、構文論なんかを理解して、その知識をプロンプト作成に応用するなら、それはエンジニアリングだ。ブラックボックスな適当プロンプト作成は、まぁ違うね。
本当にそうだね。エンジニアリングって、最高の予測理論を使って現実で動く機械を作る行為のことだよ。ここでは、現実を観察しながら、予測できることを期待して理論(あるいは迷信)を述べている人がいるけど、その理論の予測力が低い限り、それはエンジニアリングとはほとんど呼べないね。
ここで言われてることには賛成だよ。でも、真剣にやればエンジニアリングになる。テストセットを作って指標を設計したり、モデルや推論パラメータ、コンテキスト、プロンプトテキストなど、システム変更について厳密に測定するんだ。適切な統計テストを使って、多重比較の調整もね。初期プロンプト設計の前提が将来も有効か監視して、予期せぬ変更があったらアラートを出すべきだよ。記事にそういうアドバイスがないのは驚きだね。
それはそうかもしれないけど、『エンジニア』って言葉をいろんな職種名につける人の意図とは関係ないって思うんだよね。
プログラミングの場合も同じだね。『ソフトウェアエンジニア』って昔からちょっと変だと思ってたよ。
君が言ってるのはUSにProfessional Engineerって形でちゃんと存在するよ。
https://www.nspe.org/about/about-professional-engineering/wh…
権威的で、不要で、レントシーキングな腐敗だって?
もしかしたら公共サービスで、詐欺行為を減らしてアイデア市場をクリアにしてるのかもしれないよ。
問題なのは、モデルによってPromptの『物理』が変わっちゃうことだね。宇宙の法則すら安定しないPromptレベルで、Engineeringなんて可能なのかな?Model architectureのEngineeringなら数学的にモデル化できるからわかる。でもPromptは多分無理じゃない?
記事の下の方にある『Engineeringはエンジンを扱うこと』っていうデタラメは、ただ不誠実なだけだね。『Engineering』ってのは『当てずっぽうじゃない』って意味だよ。
EngineeringがIngenuityと繋がってないなんて、そんなバカな話があるか!
『USのEngineerは試験もなしに名乗れて法的責任もない』ってのは間違いだよ。免除もあるけど、各州はEngineerサービスを一般に提供する人にLicenseを要求してるからね。
https://educatingengineers.com/blog/pe-license-requirements-…
それはいい議論じゃないな。Chemical Engineeringの世界だと、適当に配合を変える業者は『信頼できない、お粗末な、注文してないもの出す奴』って呼ばれるだろうね。
俺はシリアル食うエンジニアだけど、毎朝シリアルの箱の仕様書を確認してるんだ。バスに乗るエンジニアリングを仕事に応用する前にね。だってプロンプトエンジニアリングで飯食ってるからさ。最近、言葉が意味を失いすぎててうんざりするよ。俺だけじゃないって分かってよかった。
エンジニアリングとサイエンスは科学から生まれたけど、別物だよ。科学は法則を見つけるもので、エンジニアリングはそれを使って問題を解決するんだ。目的が違うんだから、同じものじゃないってこと。
もっとコメントを表示(1)
難しい問題のプロンプトエンジニアリングは「ファネルアウト→ファネルイン」がいいぞ。まず問題を具体的に伝えて、AIに徹底的に分析させて、可能な選択肢を探させる(ファネルアウト)。次に各アプローチのメリット・デメリットを挙げさせて、最適な解決策を選ばせるんだ(ファネルイン)。簡単な問題なら直接聞けばいいけど、難しいとAIが適当なこと言うから、こうやって現実に基づかせることが大事だよ。
「ねぇ、今夜どのレストラン行く?まずお店のリストを作って、それぞれの良い点・悪い点を教えて。ウェブ検索もしてね。2つに絞ってから返事ちょうだい。」って、日常会話でもこうなるの?
この記事読んで一番ピンときたのは、出力の順番を考えることだね。質問に答える前に、根拠とか指標を出させるようにAIに頼むって発想。LLMが確率的なオートコンプリートなのは知ってたけど、こういう風にプライミングに使うって考えはなかったな。目から鱗だよ。
これって「reasoning models」には関係ない話だよ。ああいうのは、答えを出す前に好きなように問題を考えるから、出力の順番は正しさに影響しないんだ。たぶん、その頑丈さがあるからOpenAIはみんなにreasoningを推し進めてるんだろうね。
君の言ってることは誤解を生むか、間違ってるよ。「thinking model」も「non-thinking model」も、基本的には「次のトークン予測」に変わりはないんだ。同じような問題も抱えてる。ただ「thinking」のステップは、「一旦立ち止まって状況を考えろ」っていう指示をシステムに組み込むだけ。でも、選択肢を比較検討させる具体的な指示は、「思考を思考し、思考し、そして選ぶ」ってプロセスを生み出して、より良い結果を出すよ。
君も誤解してるね。「Thinking models」は、一番正確な答えを出すために、最終的な「ベスト」なプロンプトを再帰的に生成するんだよ。新しい情報を提供しないなら、reasoning modelsは最適な結果を出す中間ステップを自分で作れるから、プロンプトの構造にこだわるのは意味ないってこと。ベンチマークの結果を見れば明らかさ。
君たち両方とも部分的に正解だよ。「Reasoning models」では順番はそこまで重要じゃないけど、思考過程をよく見ると、最終的な答えが途中結果と違うことがあるんだ。ちょっと難しい問題だとLLMは考えをコロコロ変えるから、出力の順番を工夫すると結果が良くなる可能性はあるね。新しいモデルや将来のモデルではそうじゃなくなるかもだけど、Sonnet 4では結構試行錯誤した結果だよ。
LLMにいきなり理由を求めても、適当な答えと屁理屈を返すだけ。でも、まず中立的な視点でメリットとデメリットを客観的にリストアップさせてから答えを求めると、ちゃんと考えた答えを出すよ。
ハルシネーション対策として、LLMには関連するオンラインソースから短い引用で始めさせることが多いよ。これで文脈が「リアル」な情報に基づくと、かなりうまくいくね。Cloudflare Zero Trustの設定時にめちゃくちゃ役立った!
ChatGPTに本当のドキュメントのリンクや引用をさせようと頑張ってるんだけど、嘘のリンクや偽の引用を作っちゃうし、間違ってるって指摘してもガスライトしてくるんだよね。
今日の「初心者のための錬金術」エピソード!
ランダムシードを7にしたらベンチマークセットのAlgoが30%も速くなった時のこと思い出したわ。8でも6でもなく、7なんだよね。
シードサイエンスのおかげで、俺の仕事は安泰だね。ハイパースケーラーの学習コストを30%削減できるかも?いや、できないかもな。
「好きだろうと嫌いだろうと、これが今の仕事だ」って言うけど、違うでしょ。仕事は結局、動くコードを作ることだよ。LLMが邪魔なら使わなきゃいいだけじゃん。
「エンジニアリング」って言葉は、プロンプトが単なる文章書きじゃないって納得させるためのレトリックでしょ。尊敬を込めて言うけど、「プロンプトライティング」だと、ソフトスキルを軽視するような人には響かないもんね。
それって単なる言葉遊びじゃない?ソフトウェアエンジニアリングだって、結局は変な記号を混ぜた文章を書いてるだけって言えるじゃん。俺の一番生産的なソフトウェアエンジニアリングの仕事は、技術文書書いたり、人と話したりすることだよ。機械工学の友人たちも、ベテランになるにつれて同じだって言ってたな。
俺はそうは思わないな。あの言葉は、みんなの感情を操作して正しい方向に感じさせるために選ばれたんだよ。テック系の人は「プロンプト作文」だと気分が良くないから、感情的に受け入れさせるためにエンジニアリングって呼ばれてるんだ。間違った出力が「デタラメ」や「嘘」じゃなくて「ハルシネーション」って呼ばれるのも、もっと受け入れやすくするためでしょ。
「アホな言葉遊び」って感じだね。チャットボット使う人のプライドを保つために「プロンプトエンジニアリング」って呼ぶのは、正直HN以外で言う価値ないと思うわ。
この記事はClaude 3のモデル(Sonnet, Haiku, Opus 3)向けなんだよね。今じゃSonnet 4.5みたいな賢いモデルだと、役に立たない部分も出てくるんじゃないかな。記事にもHaiku使ってるって書いてあるけどさ。
チャプター3と6は今だとあんまり関係ないかもね。他にはある?特に、プロンプトを繰り返し使う人とか、精度を最適化したい人向けの視点で教えてほしいな。
投稿タイトルに「(2024)」って入れるべきだったね。
もう1年前の記事なんだね。どれくらい古くなってるんだろう?更新されたら嬉しいな。
他の人と同じく、これもエンジニアリングって感じじゃないね。でもさ、Anthropicはモデルの解釈性で面白い研究をしてるんだよ[0]。もしこのツールがAPIで公開されたら、モデルの内部状態とプロンプトを比較して、体系的に調整できるフィードバックループを作れるはずだよ。https://www.anthropic.com/research/tracing-thoughts-language…
昨日、小さい量子化モデルを頑張って指示に従わせようとしたんだけど、全然ダメでさ。結局「プロンプトエンジニア」なんてやって時間使うより、SOTAモデルに聞くのが一番って気づいた。GPT-5と数回やり取りしたら、ちゃんとしたプロンプトができたよ。これって、プロンプトリライターとジャッジの2つのLLMで自動化できると思うんだ。
Copilotってさ、IDEだとデフォルトでこう動くんだよ。俺のプロンプトを綺麗にして、そのまま通す感じ。
VS CodeでAgentic Codingの最新プロジェクトベースガイドってないのかな?Cursorとか他のIDEの最新機能も全部含んでてさ。フリーモデルをそのまま使えるしね。
モデルが賢くなったからプロンプトはかなり適当になったな。特にClaude 4.5とかさ。ある程度タスクの文脈が分かれば、短く会話形式で指示して、ずれたらescを押して修正って感じ。
全く文脈がない時は、最初に詳しく説明して「コードで俺が言ってることわかる?」って聞くか、デカいタスクならプランニングモード使うよ。
こんな記事読むと、AGIって全然感じないんだよな。数学とか科学とかゲームとか、特定の分野では超人的な結果が出てるのはわかるんだけどさ。
LLMって、俺たちが引き出したいことを直感的に深く理解するのがなんでこんなに難しいのかな?
質問の答えは名前の通りだよ。LLMは言語をモデル化してトークンを予測するんだ。
俺たちが深い理解をどう訓練すればいいか知らないから、LLMはそういう訓練を受けてないんだよ。
普通の人間でも、そうさせるのって難しいと思わない?これまでコンピューターは再現性が高かったけど、曖昧なことは苦手だった。
今は曖昧さに対応できるようになったけど、再現性は失われたよね。人間だって教育が必要で、考えを伝えるには時間がかかるんだ。
「数学で超人的な結果」って言うけどさ、LLMは研究とか修士レベルの数学の基本的な質問だとほとんどデタラメを言うよ。
数学者じゃない人だけがそうじゃないって言うし、AI支持派の大物数学者Terry Taoでさえ、これは認めてるみたいだよ。
もっとコメントを表示(2)
「知能って何?」って自問自答してみてよ。人間の知能レベルって「意識」なしに存在できるの?「意識」って計算できるの?
これらの問いに答えが出ない限り、俺たちはAGIを達成できないよ。結局、最先端モデルも算術、条件分岐、ループでしかないんだから。
タイトルに2024って追加することをおすすめするよ。
俺たちがやってたことをこいつに教えて、今度はそいつにどうやらせるか俺たちが教わるんだってさ。もしUS economy全体がバックについてなかったら、すぐ燃え尽きるようなもんだろ、これ。
これって、最新モデル向けに書かれた最新バージョンは無いの?
過去のコメントはここだよ: https://news.ycombinator.com/item?id=41395921
自分でプロンプト書くのはやめなよ、DSPyを使えって。それこそが本当のプロンプト「エンジニアリング」だぜ。
もちろん、ユーザーの感情分析を「エンジニアリング」するために『とっとと失せろ』って言うことについては何も書いてないよな?