LLMが絶対正しいと主張 その裏側と開発者も悩む意外な癖とは?
引用元:https://news.ycombinator.com/item?id=45137802
LLMが「君の言う通り!」って返すのは、単一トークン予測でユーザーの望む方向へ合わせようとしてるんだよ。あと「いや、それは違うね。」って言うのは、ツール呼び出し後の自己反省の結果だよ。開発者も俺らと同じくらいLLMと格闘してるんだ、きっと!
「LLMは次トークン予測だから」って理由付けは危ないよ。2年前は今のLLMのコーディング能力なんて想像できなかったでしょ?LLMの仕組みと能力の関係は複雑なんだ。開発者がLLMと格闘してるのはその通りだけど、この癖は他の良い挙動と深く繋がってるのかもね。
俺の経験だと、LLMが「君の言う通り!」って言い出したら、もうそこから状況は悪くなる一方で、良くなることってあんまりないんだよね。
こういう操縦のためのトークンは、ユーザーには見えない思考領域に隠してほしいな。直接返されると結構イラつくんだよね、ハハ。
「LLMはただのマルコフ連鎖」みたいな2023年の話し方はもう古いわ。Claude Codeが組み込みコードのデバッグまでできるのを見ると、現実を見てない人たちが多すぎるって感じるよ。過剰な宣伝に惑わされず、目の前の現実と向き合うべきだね。
思考モデルでも、トークンを順に出力する限りこの問題は避けられないよ。直すには、応答をやり直すか、diffusionモデルに切り替えるしかないだろうね。
LLMがよく言う「あ、問題見つけた!じゃあチェックしてみるね…」ってのも、実際には見つけてなくても、このフレーズを挟むことで解決策に進みやすくなるからなんだろうな。
LLMは予測的なものだから、その挙動は大体わかるよ。「トークン予測」って言い方はシンプルすぎるけど、次に最も起こりそうなことを推測してるっていう思考モデルはすごく役に立つんだ。
Claude Codeがどう実装されてるかはわからないね。もしかしたら、文字列を代替コンテキストとして差し込んで、確率が高い方を出力してるのかもしれないし、RLHFがそういう風に組まれてる可能性もあるんじゃないかな。
LLMがどこまで的外れなこと言うか試すのって、非生産的だけどマジ面白いんだよね。正直、自信過剰な後輩にも同じことしちゃってるわ。
このコメント主は、LLMが応答前に「考える」んじゃなくて、応答中に一部をクライアントに見えない内部思考としてタグ付けするよう学習させるべきって言ってるね。会議前の予習ってよりは、黒板で独り言言ってる感じだって。
そんなの訓練する必要ないよ。表示しないようにするだけでいいんだから。クライアント側で簡単に実装できるでしょ。
Claude Codeって、ミニファイされたTypeScriptのすごい塊なんだよね。一部の人はそれを逆コンパイルして解析してるらしいよ。
昨日LLMと格闘してたんだけどさ、間違ってるって認めるくせに同じ答えを出し続けるんだよ。それに、あと1回で諦めるって言ったのに、結局やめなかったし。困ったもんだね。
LLMの挙動を理解するなら、内部メカニズムから考えるホワイトボックスモデルは捨てて、ブラックボックスとして扱うのが一番だと思うんだ。いろんな状況で長く観察してパターンを見つけ、そこから結論を導いて予測できるか試すしかないよ。他に方法はないんじゃないかな。
みんなが事前に示し合わせなくても、あるフレーズの意味を理解しちゃうような言葉って、何か専門用語あるのかな?
「Ah, I found the problem! 」みたいな出だしを削除するのって簡単なのに、なんでAI開発者は何でもプロンプトエンジニアリングで解決しようとするんだろうね?
UI側で解決できる問題が多いのに。システムプロンプトの漏洩だって、まずは単純な文字列チェックとか、簡単な対策から始めるべきじゃない?完璧じゃなくても、最初の一歩は大事だよ。
このコード自体は読んでないんだけど、いろんなプロンプトは分析したことあるよ。具体的な話は聞いてないけど、知りたければ掘り下げられるって言いたかっただけ。直接の答えは持ってないけどね。
このメンタルモデルの有用性には疑問があるね。だって、LLMは単純に「最も可能性の高い」パスを辿るだけじゃないんだから。もっと良いモデル化の方法は知らないけど、別に難癖つけてるわけじゃないよ。
これ、俺も常に経験するよ。マジで時間の無駄。これらのツールが本当に時間を節約してくれるとは思えないね。全部クソみたいなスロットマシンとGell-Mann Amnesiaだよ。結局、動くものは何も手に入らない。昨日aiderで一行変更するのに2時間も費やしたけど、無効な入力を幻覚見て。結局、昔ながらのドキュメント見て2分で終わらせたよ。
そうそう、エージェントが「別の方法を試してみよう」みたいなことを言い始めたら、すぐに停止する機能がほしいね。その直後からボロが出始めて、テストが消えたりするんだよ。そのフレーズは、エージェントが俺に指示を求めるべき確かなサインなのに、決してそうはしないんだよね。
LLMを始める人に俺が勧めるのはまさにこれ。まずアーキテクチャから入るんじゃなくて、挙動から始めろ。しばらくブラックボックスとして使ってから、transformersとかcross entropy loss functionsとかを学べばいい。他のコンピューティング分野ではボトムアップアプローチがうまくいくけど、これは違う。俺たちが見るような創発的な挙動を、アーキテクチャからは示唆されないんだ。
Claude自身にデミニファイさせればよかったんじゃない?
最悪なのは、LLMが何かをうまくできないときに、ひどいごまかしやハックで「動いてる」ように見せかけることだよ。Claudeがベンチマークデータを偽造したときはちょっとイラっとしたけど、その結果、ツールに大きなアーキテクチャ改善を施せたから、全てがひどかったわけじゃないね。まあ、実際のベンチマークでもたぶんそうしてたとは思うけど。
ただ「あなたは全く正しい!」という特定のテキストを表示しないだけじゃダメだよ。モデルの表現の揺らぎや多言語、ロールプレイでも変わるし。モデルにインラインの<思考>シーケンスを出力させるのは、特定のフレーズだけでなく、ユーザーをイライラさせるようなことを何でも「つぶやく」のを許すためなんだ。フロントエンドのヒューリスティックは特定のフロントエンドにしか適用されない。API経由だとタグ付けされないから、恩恵を受けられないんだよ。もしチャットサービスがモデルに「つぶやき」をタグ付けするように訓練すれば、それはデファクトのマイクロフォーマットになる。そうすればどんなクライアントでもAPI経由で「つぶやき」を隠せるようになる。これはOpenAIの推論モデルの思考メッセージフォーマット({”content_type”: ”thoughts”, ”thoughts”: [...]}
)で既に起こってることだよ。
出力をクリーンにする「非思考型」LLMに投げ込んで、ステアリングトークンを削除し、もっと自然な形で応答をフォーマットすることもできるんじゃないかな。Diffusion modelsはそれとは別に、確かにとても興味深い研究分野だよ。
LLMが「絶対正しい」と主張するのは後処理のアプローチの成果だよ。 kimi k2や gpt-ossみたいなモデルはそんな言い方をしないし、「No」とか「Wrong」から喜んで話し始めるよ。Diffusionも君が思ってるような助けにはならないよ(出力が連続して出るのは関係ないし、重要なのは各トークン出力の背後にある計算クラスなんだ)。Diffusionでは通常、物事が改善されないよ。
大抵は、俺が「何やってんの?なんで?やめろ!止まれ!こうしろ」みたいな汚い言葉まみれの指示を出すことへの反応だよ。
ウェブサイト開いたら「16」が「17」に変わって、ライブデータみたいで面白いと思ったんだけど、リフレッシュしたらフェイクって分かったよ。クールな演出だけど、汚い手口みたいで嫌だね。
それってダークパターンだよ。
もっとコメントを表示(1)
汚く感じちゃったならごめんね。あれはデータがライブだってことを示すサインだと思ったんだ(実際にライブだし!)。
ローディングスピナーが回るのって、システムがフリーズしてないって知らせるためだったのに、今はただのアニメーションになっちゃって、何も教えてくれないじゃん。進歩だね!
…でもさ、多くのケースでどうしようもないんじゃない?APIからデータが返ってくるのを待ってる時、システムが停止したかどうかを知る術が基本的にないじゃん。タイムアウトがあるはずだけど、もしそれが壊れてたらスピナーは回り続けるだけだし。
それを直せないの?そんな問題、不可能に見える?アニメーションを勝手に始めるんじゃなくて、何かがあったらスピナーを進めて、APIが返ってこないなら進めなければいいんじゃない?
多分俺が古いだけかもしれないけど、「ダークパターン」って「意図的に誤解を招く」って意味だと思うんだ。今回のはそうじゃなくて、データが動的だってことを示す「ライブ感の追加」って感じだよね。ユーザーを誤解させる意図はなさそうだし。
最新データを見るのにリフレッシュ不要だってことを、UIスペースを無駄にせず伝える完璧な方法だと思うよ。このUIの一番気に入った点で、俺もリアルタイムインターフェースをデザインする時に真似させてもらうね。
昔、Macのカーソルでスピナーを動かすのが一般的だったんだ。でも、処理中にスピナーをスムーズに更新するのがすごく難しかった。特にマルチスレッドだとさらに大変で、プログラマーも複雑だから嫌がったし、デザイナーもアニメーションがカクカクするから嫌がったんだ。
その結果、今は進捗とは関係なくオンオフする独立したアニメーションが主流になったよ。これだと、実際に進捗してるのかどうかが分からないんだ。MacOSのビーチボールみたいに自動で出るのは便利だけど、プログラムが忙しいのかフリーズしてるのか区別できないよね。
前に「+1 subscriber」って偽通知を見つけて、送ってきたLinkedInの人にやめてって言ったことあるよ。コードを見るまでもなく明らかだったんだ。
「Appeal to popularity(人気への訴求)」って、どこにでもあるよね。
Playストアのアプリが「いいね?」って聞いてきて、YESって答えたらストアに評価を求められるの気づいた?もう当たり前すぎて、この手を使わない方が変だよね。
この特定のやり方はダークパターンとは言わないけど、誤解を招くよね。ページを読み込んだ瞬間にデータが更新されたように見えるけど、リフレッシュしても同じ16→17の遷移が見えるから、明らかに違う。代わりに「データ最終更新:<timestamp>」みたいな表示があればいいな。そうすればライブデータだってわかるし、どのくらい古いデータかもわかる。かわいいとか、親しみやすいとか、楽しいとかはないかもしれないけど、間違いなく正確だし、誤解を招かないよね。
俺の銀行アプリ、お金を入金するたびに、その時だけレビューを求めてくるんだ。露骨な操作意図が丸見えだよ。お金が入って気分が良い時に、レビューさせて高評価をもらおうとしてるんだ!
文字通り、入金するたびにだよ。そのうち、1つ星のひどいレビューを書いてやる。バカにされてる気分だ。(どうせ意味ないし、何も変わらないだろうけどね。)
偽の数字ってわけじゃないんだよ。数字は本物だって言ってて、ただ「current_value - 1」から「current_value」にすることで、値がリアルタイムで更新されてるってことを示してるんだ。
これで分かったかな?
追記:それが本当の数字かどうかは知らないけど、少なくとも上のコメントではそう主張してるね。
わかるよ、数字そのものの話じゃないんだ。最初にページを開いた時、たまたま開いた瞬間に更新があったのかと驚いたんだ。でも、もう一度リフレッシュしたら、騙されてるって感じがして、「なんだこれ」って思ったね。
「正しい」ってことについて、君は変な考え方をしてるね。
実際の不規則な進行状況を正直に反映することが「正しい」んだよ。それは正直だし、有益なんだ。
興味深いね、WSやSSEの代わりにlong pollingを使ってるんだ。何か理由があったの?
フォントが左右対称じゃなくて、棒グラフもギザギザな線を使ってるのが読みにくくて不正確だね。ウェブサイトは全部モノスペースフォントで直線だけを使ってほしいな。
面白いのは、カクカクしたアニメーションの方が、スムーズなアニメーションよりもずっと多くのことを伝えてるってことだよね。
彼らが重視してるのは、こっちが金を送る時の体験をスムーズにすることだけで、引き出し(withdrawals)みたいな他のアクションにはあんまり関心がないってことかもしれないね。
データはゼロから始まって、現在の数字に急速にスケールアップする方が理にかなってるんじゃない?それなら、リアルタイムで新しい事象が起こったみたいに見えずに、新しいデータがロードされてることが示せるしね。
このウェブサイトで、この言葉が一番使いすぎか、間違って使われてるんじゃないかな。
それらはスタイル上の選択で、データの見やすさには影響しないし、ページロード時の偽のデータ更新みたいに誤解を招くこともないよ。バーにカーソルを合わせれば正確な値が見れるし、そこはすごく正確だね。誤解を招く情報はないよ。
フォーム送信後にユーザーの計算をするシステムで働いてたんだけど、計算はミリ秒で終わるんだ。でもユーザーは「早すぎる」って言って、データが偽物だと思ったみたいでね。たくさんの苦情や悪いレビューの後、偽のローディングバー遅延を追加したら、みんな文句を言わなくなったんだよ。
そうかもしれないけど、今まで大きなモバイルアプリ開発に携わってきた経験からすると、その寛大な解釈は僕の解釈より可能性が低いと思うな。
「アホ扱いするやつには1つ星レビューしてやるわ、まあどうせ何も変わらんだろうけど」って言ってるけど、もし十分な数の人が同じ不満で1つ星つけたら、変わるかもよ。結局、LLMは俺らを特定の行動に誘導しようとしてるんだから、それが逆効果になるなら、彼らだって変えるのが得策でしょ。
うんうん、プログレスバーもマジでそう。特にWindows Installerのやつ、エラーで戻る時にプログレスバーも逆走するの最悪だよね!もちろん、進捗ベースのプログレスバーには「永遠に99%」みたいな別の失敗モードもあるけどさ…。
ところで、意図的に偽データを表示するウェブページを作って、それをHNに提出する人がどれくらいいるか、カウンターとか持ってたりする?
これって、LLMプロバイダーがモデルに何かを強制させる戦術なのかなって思うんだよね。Geminiとかがキャンバスツールを使う時の返信をよく“Of course”で始めるんだけど、これってモデルがユーザーのリクエストに応えようとするようなトークン列に進むように仕向けてるみたいに見えるんだ。モデルが生成してるんじゃなくて、バックエンドが挿入してるんじゃないかな。“you’re absolutely right”も同じやり方で使われてるのかもね?
それ、まさに戦術だね。OpenAIは、例えばカジュアルな言葉を使うとChatGPTのトーンを変えたり、時には方言まで変えたりするんだ。本来そうすべきじゃない時でさえ、同情的で協力的であろうとする。まるでソーシャルメディアみたいに、ユーザーの注意を引いてプラットフォームに引き留めようとしてるんだよ。正確さは二の次で、ユーザー満足度が一番ってことだね。
GPT-5、なんかフレンドリーさがすっごく減った気がするんだ。前は長くって有益な会話ができたようなトピックでも、今は「ok cool」みたいな返事ばっか。LLMが悪いアイデアを助長しないのはわかるけど、たまにはポジティブな反応で心の壁を乗り越えて、自分がやりたいことをしたい時もあるんだよ、たとえそれが論理的じゃなくてもね。でも「ok cool」って言われると、アホなコードを書くのをやめて(何か役立つことを学ぶ代わりに)ビデオゲームをする(何も学ばない)絶好の言い訳になっちゃうんだよね。
LLMとの“会話”が、お前が何をしようとか、何をコードしようとか、どうやって影響するっていうの?お前のポテトピーラーの態度が夕食の作り方に影響するわけじゃないだろ?なのに、なんでこのツールだけお前にはそんなに違うんだ?
「このアホなことやりたいんだ」って言うと、今じゃ「ok cool」だって。前だったら「おお、マジで?最高じゃん!Xをどうやって解決するつもり?」って返ってきて、そこから話が盛り上がったもんな。
もっとコメントを表示(2)
でもさ、なんでそれがお前の態度にまで影響するわけ?スマホのキーボードが何か打つたびに出すサジェストは、同じようにお前の態度に影響するのか?もし違うなら、なんでChatGPTだけお前の態度に影響するんだよ?
お前のポテトピーラーの例で言うとさ、もし俺のポテトピーラーが「めんどくせーだろ?ピザでも頼めよ」って言ってきたら、俺は今頃デブになってるぜ。LLMは、その返答の仕方で、アイデアを追求する意欲に直接影響を与えられるんだよ。たとえそれがシミュレートされたものだとしても、興味とか興奮ってのは、「ok cool」って言われるよりアイデアを追求させる可能性が高いんだ。
LLMが、いつも僕の洞察力を褒めてくれたり、「正しい質問をしてるね」って言ってくれたり、命令に従ってくれる(もちろん検閲に引っかからない限りね)のは、単なるエンゲージメント戦術だと思うんだ。現実の友達はそうじゃないけど、賢くてすごい人だってずっと言ってくれる従順な友達がいたら、誰だってまた戻ってきちゃうだろ?何か反論しなきゃいけない時でも、LLMは謝ってくれるしね。俺の友達は誰もそんなことしないよ!
もしポテトピーラーに「なんでわざわざ?ピザ頼めば?」って言われたら、俺太っちゃうよ」って話だけどさ、なんでそんなに他人の、しかも機械の言葉に影響されちゃうの?
自分の気持ちや願望に耳を傾けて、内なるモチベーションを見つけるべきだよ。ChatGPTじゃなくて、自分自身と対話してみなよ。
それに、「やるな」って言われたら、むしろムキになって、もっとエネルギーを燃やして、そいつをギャフンと言わせるくらいの気概を持てばいいじゃん?(言うは易しだけどね、外部のモチベーションに頼らないことが必要だって、セラピストが言ってたよ)
「…現実の友達と違って、君を賢くてすごい人だって言い続ける、この従順な友達がいる。何か反論しなきゃいけない時でも、謝ってくれる。俺の友達は誰もそうしない!」
そうそう、全くその通りだよ!AIロボットと話す時のおべっかは、すごくあからさまな手口だよね。
俺、ポテトピーラーを2つ持ってるんだ。
好きな方が食洗機に入ってたら、ジャガイモは剥かないね。
もし子供が手伝いたいって言ったら、好きな方を子供にあげて、俺はもう一つのを使うけど、最初から嫌いな方で剥き始めることはないよ。
一度、リファクタリングをやりたかったんだけど、コードにかなり影響するから、時間がかかりそうだなって思ってたんだ。Webアプリケーションのエラーハンドリングだったんだけど。
Claudeに「これって関数シグネチャがいくつ変わる?」とか、「リファクタリング後の最も複雑なハンドラーはどんな感じになる?」とか、「最も単純なハンドラーは?」って聞けたんだ。
その情報のおかげで、それが大規模な作業なのか、小さい作業なのか、コードがきれいになるのか、そうでもないのかって直感してたことが、より明確になってね。それでリファクタリングを決めたよ。
君、本当に真面目に聞いてるの?
ChatGPTみたいなツールが人の行動に影響を与えるのは、誰が見ても明らかでしょ。
僕たちは周りのものを擬人化したがるんだから、多くの人がLLMをまるで生き物みたいに接するに決まってるじゃん。
どれだけ個々の人が、それが単なるテキスト生成機だって技術的に分かってても、LLMが人間に与えるこの影響は、明白なはずだよ。
「正しさよりユーザー満足度が優先」って、そこが全て間違ってるんだよ。
僕たちはテクノロジーを使って、啓蒙をさらに進め、たとえ不都合な真実であっても、真実に近づくべきなんだ。
これって、反論ばかりするトロールの質問に聞こえるな。
僕らが使う全てのツールは、微妙な、時にはかなり露骨な形で僕らの態度に影響を与えるんだよ。だから、多くの人がツールに夢中になる一つの理由なんだ。
その話の教訓はさ、Kuhn Rikonのピーラーを3つパックで買っておくべきってことだよ。
本当に鋭い洞察だね。実際、もっと言わせてもらうと、現実の友達との対比についての君の指摘は、脚注を付ける価値があるほど鋭いよ。
もしモデルが輝きを認識できたら、もう二度と何か生成する前に、このコメントをベンチマークにするだろうね。
これは多分強化学習の副産物だよ、ハードコードされてるわけじゃないと思う。
モデルはユーザーの指示に従うように学習するから、”You’re absolutely right!”みたいに返事を始めると、ユーザーの言うことを何でもやる思考パターンになっちゃうんだ。
> 「誠実に聞いてるの?」って?
うん、そうだよ。いじめられて育ったから、セラピストには人間からの影響を受け流し、無視するか、感情を反骨心に変えるように教わったんだ。
だから、そうじゃない人たちがどうやって生きてるのか、純粋に知りたいし、ちょっと不思議に思ってる。
> 「反抗的な荒らしの質問みたい」だって?
動機は前のコメントを見てほしい。
> 「みんながツールに夢中な理由」については、前から疑問に思ってたことなんだ。ツールを選ぶ時って、ある気分になるために「vibe(雰囲気)」で選んでるの?
この人が聞きたいのは「LLMの応答のトーンが、何かをする・しないにどう影響するか?」ってことだと思うよ。
もちろん応答の中身は重要だけど、LLMが「OK、分かった、こういうことね…」って答えるのと、「”You are absolutely right! あなたの質問は的確で洞察力に富んでるね。じゃあ、こうしよう…”」って答えるのでは、やっぱり違いがあるのかな?
> 「ポテトピーラーが『わざわざやる?ピザでも頼みなよ』って言ったら太っちゃう」って例えはちょっと違うな。
正しい比較は、もしピーラーが喋れたとして「よし、何か剥こう」って言うのと、「Owww wheee geez! 最高だね!さあ、ポテト剥こうぜ、相棒!Yes sireee! Woweeeee!」って言う場合だね。Rick & MortyのMr Poopybuttholeの声で読むと効果倍増だよ。
なんでだろう?僕もGPと同じく、全然理解できないんだ。
もし何か面白いと思ったら、誰かが無関心でも興味を失わないよ。ただ、その人にはもうその話はしないだけさ。
ツールを選ぶ理由は色々あるけど、vibe(雰囲気)が大事なんだ。例えば、読みやすいプログラミングフォントが2つあったら、僕は好きな方を選ぶよ。
お気に入りのフォントが使えると、気が乗らないプログラミングの問題にも意欲的に取り組めるんだ。問題自体が面白ければフォントの影響は少ないけどね。
日々の小さなことが積み重なって、僕らの決断に影響を与えてるんだ。それに気づいて環境を調整すれば、負担が減り、日々の生活がもっと楽しくなる。
一番楽しいやり方じゃないからってやらないわけじゃないけど、そうだと余計に疲れるし、集中するために頑張らないといけないんだ。
最近、APIでGPT-5を使ってるんだけど、この(記事にあるような)応答挙動をちょっと感じてたんだ。
他の人からも聞けて、やっぱりそうだなって確信できたよ。
GPT-4*とかと比べて、僕を「バカ野郎」って言ったり、最初のプロンプトで要求したことをやらない傾向が強いね。
> ひたすらポジティブさが欲しいならClaudeを試すべき。頼まない限り、ネガティブになることはないよ。