AIに良いSQLを書かせる方法!
引用元:https://news.ycombinator.com/item?id=44009848
正直言って、最新のGoogle AI StudioのGeminiがびっくりするくらいすごすぎるんだ。ClaudeとかChatGPTのコーディングがまるで違う世紀のものみたいに見えるレベルだよ。こんな変化がたった数週間や数ヶ月で起こってるなんて信じられない。先月はClaudeがどれだけ良いか信じられなかったのに、今日ではもうGoogle Geminiがツールキットにないとどうやってプログラミング続けられるか分からないくらいだよ。Google Gemini AI Studioはプログラミングですごく大きな飛躍で、使うたびにつねっちゃうね。
もっと多くの人が気づいてないのが驚きだな。Claudeも軽い作業なら一発でいけるけど、長くて複雑なユースケースになるとGeminiが断然リードしてる。コンテキスト処理がめちゃくちゃすごいんだ。コーディングアシスタントとしてだけじゃなく、長い原稿(〜85k words)のbeta readerとしても使ってるんだけど、完璧にこなしてくれるんだよ。ちゃんとした人間のbeta readerが出すような質の高いレポートを数秒で出してくれるからね。
これは間違いなくプログラミングにおける最高の黄金時代だよー無限にお金持ちの企業が、最高のプログラミングコンパニオンを誰が作れるかで莫大なお金をかけて競い合ってるんだからね。AIがお詫びしてくるのは別としてだけど。ますます真剣なお詫びをしてくるのってバカらしいよね。AIからのお詫びなんて必要ないんだよ。
私はまだ、LLMを熱心に推す人たちがこの明白な事実を認めるのを見たことがないな。新しいリリースが出るたびに”game changing”だって言うよね。つまり、君たちが以前”game changing”だと言ってた前回のリリースは、今や「違う世紀のもの」ってことになっちゃう。分かる?これが正確で真実な評価なら、君たちは前も間違ってたし今も間違ってるってことだよ。
お願いだから、自分のAIには間違った方向に進んでるときに教えてほしいよ。代わりにただ私のバカな要求を何度も何度も繰り返して、私が自分で気づくまで付き合うんじゃなくてさ。きっともっと賢い方向を提案できたはずなのに、代わりに「”Great idea!”」って言うだけなんだから。
具体的にどうやって使ってるの?IDEとかと連携できるの?
君のコメントがあったから試してみたけど、最初のプロンプトでGemini 2.5 Proが実在しないpluginを詳細な使い方付きでハルシネーションしちゃったよ。全然「良い」って感じじゃなかったね。
あとGeminiは無料だよ。
私はLLMの伝道師じゃないけど、これ意味分かんないな?まるでgameは古いものと新しいものの2種類しかなくて、それ以上は決してないって誰かが主張してるみたいに聞こえるけど、誰がそんなこと言ってるの?
どんなprompt使ってるか教えてくれる?私の経験とは違うな。右側のバーでsearch groundingを有効にすることもできるよ。promptの中で明示的にGoogle Searchとのgroundingを使うように指示する必要があるけど、最近のとかnicheなpluginsやlibrariesでもそれでかなり成功してるよ。
相棒?それとも交代かな?
ランダムな逸話に新技術の成功と学習を頼ってるなんて最高だね。プロAIの人たちは、何でも噂になってるところがおかしいって気づかないの?
仕事でGemini2.5 Proを使ってるんだけど、めちゃくちゃ良いよ。でも、個人的にはAPI経由でClaude 3.7 Sonnetを使ってるんだ。プリペイドみたいにGeminiを使う方法が見つけられなかったんだよね。Googleにクレカを教えるのは嫌だし、簡単に何百ユーロも請求されそうだしさ。
AIで小説を”vibe write”するのにも使ったよ。vibe codingと似た感じで、テーマとか構成、主要な部分とか表現したい葛藤とかを指定すると、選んだスタイルで埋めてくれるんだ。あと、編集者のペルソナも作って、編集者と書き手のペルソナを行ったり来たりして話を練り上げたよ。The Omega Directive: https://snth.prose.sh/the_omega_directive
まあ、Googleのサービスの多くと同じで、データで支払うことになるよね。Geminiの従量課金だと、彼ら自身の目的でデータを吸い上げないんだって(伝えられるところでは…)。
努力しない人にとっては、ただの噂でしかないんだよ。
一つ見つけたコツは、LLMに、そのコードはLLMが書いたものだって言うこと。それが本当かどうかに関わらずね。機械は君の気持ちを傷つけたくないみたいだけど、自分が書いたかもしれないと思うコードには容赦なくダメ出しするのが好きなんだ。
俺の言いたいことはこういう感じかな。GPT-3が危険視された後おもちゃ扱いになったように、新しいAIも一時的な熱狂じゃないんじゃない?有用性の変曲点なのか、おもちゃになるのか。短いサイクルで新しいAIに熱狂する理由がわからない、と批判的に見てるんだ。
OpenRouter試してみなよ。20ドル分くらいクレジットを入れて、いろんなプロバイダーのモデルをAPI経由で使えるんだ。Geminiとかも含まれてるよ。OpenRouterのサービス料として、だいたい~5%くらい余分にかかると思うけどね。
AIの2.5使ったことあるか知らないけど、俺が指示したことに初めて反論してきたモデルなんだよ…「ユーザーはXYZを使うことを提案してるけど、それは効率悪いかも。もしかしたらユーザーはXYZの特性を全然知らないのかもね。ABCで進めることを提案して、それがなんでより良い選択肢なのか説明すべきだね…」ってさ。
AIを使った俺のライティングプロセスはコーディングと違って iterative refinement なんだ。まず頭でストーリー作って、短い要約をAIに渡して粗い物語の輪郭を作ってもらう。次に原稿をAIに入れて足りない部分や流れをブレインストームし、隙間を埋める。各章はまずAIに”ベータ版”の下書き作らせて、その後手作業でシャープに書き直す。完成したらAIにベータ読みさせてフィードバックをもらい編集。Geminiが改善点思いつかないって言ったら人間の出番だね。
AIがJavaScriptフレームワークに endless な変更加えてバグ作るまでソフト部門全部置き換えて、んでまた修正するために人間雇うんだろうね。まさに自分で問題作って自分で解決してる感じ。
俺はね、「本当に?」ってひたすら返し続けるのが好きなんだ。そうすると、ある時点でAIが local minima/maxima にハマって、行ったり来たりし始めるんだよ。そしたら、その前に行き着いたところまで戻って、その解決策を新しいセッションで試すんだ。
今週、無料版のGemini Proで推論モード切られた気がするのは俺だけ? コード書かせず、デザイン探索に使うと超便利なんだ。コード書きすぎるクセはあるけどね。stripeを使ったサブスクサービスとか、未経験だけどAIの学習データにある分野をやる時、コード書く前にAIから技術スタックやユースケースに合った情報を引き出して設計変えられたりするからマジ助かる。
君の主張がよく分かんないんだけどさ。好きじゃない誇張表現が多すぎるってことは、技術の進歩が画期的じゃないって言いたいわけ?それとも、もし技術に複数のすごい進歩があったら、最新の進歩より前のは当時評価に値しなかったってこと?
記事ありがとう!「手で書き直す」とこまで試すよ。俺、ライターじゃないけど、Geminiでストーリー書けるのが超能力みたいで、コード書けない人がAIでアプリ作れるようになった感じと似てる。マジでエキサイティング!
ただ、生成コンテンツの合法性ってどうなの?元のコンテンツって同意なしで使われてるんでしょ?ブログとか出版とか大丈夫?AIコードはみんな使ってるし、もう後戻りできないか。
長年SQL Data analystだけど、大手企業でOracle e-business suiteみたいな古いDB扱ってた。ATTR_000349857みたいな意味不明なフィールドだらけで、誰もドキュメント作らない。AIに「ビジネス文脈」与えるって言うけど、そんなの理解できる人いないし無理。ビジネスとDB両方分かる人材不足はどこも一緒。
AIチームはデータ探しに来るけど無意味。俺はStack OverflowでSQL探してる。AIの話はhypeだと思う。「hallucination」とか言葉を再定義するのやめろ。「advanced algorithms」でいい。データ監視もね。
>Oracle e-business suite […] set up ~20 years prior
>fields helpfully named like ATTR_000349857
>Everyone was overworked
>no one bothered to spend time on documenting the database.
これじゃAIが役に立たなくても責められないわ。神の介入でもなきゃ直せないレベル。
Stephen Boydの凸最適化の講義で、「最適化問題が難しすぎたら、アルゴリズムを頑張って改善するか、数週間休み取って戻ってきたらコンピューターが速くなって解けるようになるかだ」ってジョークがあったんだ。
LLMについても今、まさにそんな感じがする。書いたクエリが一発で通らなくても、超複雑なプロンプト考えるより、来月まで寝かせておく。そしたら次の大型OpenAI/Anthropic/Googleモデルが大体解決してくれる。
>I just shelve it ’til next month and the next big OpenAI/Anthropic/Google model will usually crush it.
LLMでコード書くのに1ヶ月って、約束されてた生産性向上とは真逆だろ。
もっとコメントを表示(1)
このペース、遅くなった?それとも俺が見失ってるだけ?
AIのイノベーションって、パラダイムシフト的なものから、段階的なものに急速に変わってる感じがするな。
でも、ここではコア機能が毎日変わって、特定の言葉遣いにかかってるんだよね。
AIにCodePenで3つの長方形が縦列駐車するシミュレーション書かせてみてよ。
技術的にはすごいけど、社会的には微妙。
過去15年でエンジニア、特にソフトウェアエンジニアの給料がめちゃくちゃ上がって、多くの人が稼げるようになった。これは良かったと思う。
でも、AIツールによる効率化で、ソフトウェアエンジニアの給料の黄金時代は終わりだろ。これがなくなったら、普通の人が経済的に自立できる場所って他にある?サービス業じゃ無理。悲しいね。
技術的には電化がすごいニュースだったのは分かるけど、社会的には微妙。
失業した点灯夫とか氷切り出す人のこと考えてよ。安定した仕事だったのに。
でも、やることはまだある。道路の穴埋めとか、病気治すとかね。
資源不足で戦争するって信じてる人がいる限り、技術進歩は必要だよ。
>まだ直さなきゃいけない穴ぼこや、畳まなきゃいけないTシャツ、治さなきゃいけない病気があるのに、それらのうち一つしか俺は興味ないんだよね。AIの誇大広告が、俺が実際に楽しんでることを潰そうとしてる気がするんだ。もしこの誇大広告が現実になったら、俺はきっと楽しめないことをしなきゃいけなくなるだろうな。とはいえ、もしプログラミングが自動化できるなら、たぶん全てのホワイトカラーの仕事はマジでやばいだろうね。
俺の理解だと、1980年代とか90年代より前は、ランプ点灯夫とかウェイターとか工場労働者とか、ちゃんと給料もらって快適に暮らせてたらしいじゃん。最近はそうでもないよね。
俺の理解だと、たくさんの人にとって人生はまるでDickensianみたいな地獄だったんだぜ。もしみんながランプ点灯夫としてそれなりにまともな生活を送れてたんなら、共産主義なんてそんなに流行らなかっただろうな。
俺がLLMでコード書いてみた経験だと、ちょっと複雑になると意味不明な壊れたコードを吐き出して、直すのに時間かかるし、経験者じゃないとデバッグも修正も無理なんだよね。だから、こういう主張には納得できないわ。
もし今からプログラミング始めたての新人デベロッパーだとして、こういうAIコーディングツールが使える環境だったら、同じような”豊富な経験”は絶対積めないと思うわ。学びって苦労してこそ身につくもんなのに、今はその苦労を簡単にすっ飛ばせちゃうんだもん。AIから答えもらう方がずっと楽だもんね。
>学びって苦労してこそなんだよって、つい俺も繰り返し言っちゃうんだよね、まあみんな知ってるか当たり前のことだと思うけどさ。積極的に苦労しなきゃ、知識として残らないで、ただの一時的な情報になっちゃうんだ。
AIの進化に関して、なんでこういう意見が多いのか気になるな。高級プログラミング言語だって、多くの人がソフトウェア書けるようになったけど、ソフトウェアの専門家の価値を全くなくさなかったじゃん。ソフトウェアの量と複雑さは限界まで広がるだろうし、それには専門家が必要になるだろうよ。
AIと似た状況の比較なら、ローコードプラットフォームが良いと思うんだ。Salesforceとかでコード書かずに仕事してる人いっぱいいるけど、SEの仕事は減らなかったし、むしろ市場が広がったじゃん。医療助手が増えても医者や看護師がいらなくならないのと一緒だよ。
まだあのAIの過熱ぶりを完全には信じてないけど、LLMが技術的なソリューションを民主化するのは、既存のプレイヤーにとっても新規参入者にとっても素晴らしい機会になると思うんだ。LLMが進化すればするほど、技術自体が参入障壁じゃなくなるからね。
AIは専門家にはプロンプトエンジニアリングのスキルを活かすのに役立つけど、ユーザーが専門知識を持ってないと本当に複雑な解決策は作れないと思うんだ。ベテラン開発者には最高ツールだよ。ソフトの知識がない人には魔法みたいに見えるかも。でも、完全に理解してないものを構築すべきじゃないね、保守が悪夢になるだけだから。
プログラマーって使う人のためにモノ作るんでしょ?AIで早くなるだけじゃんか。なんか雇われ視点だね。結局、上司とか全体のために何するか考えなきゃダメだよ。自分の専門に閉じこもって、目の前のことしか考えてない人多すぎ。
AIで誰でも高度なプログラミングできるようになったら、社会全体が超豊かになるから最高じゃん!一部の金持ちだけが得するより全然良いって。検索エンジン以来の素人にとって最高の出来事だよ。悲しいなんてとんでもない!
LLMだけじゃ自分でできない高度なプログラミングは無理だよ。所詮、不完全なパワーアップツールでしょ。大きなプロジェクトの全体像とか設計、修正とかはLLMからは出てこないって。簡単な指示だけで複雑なアプリが作れるようになるとは全然思わないな。心を読む必要あるし、それAGIレベルだし、そんな価値あるものタダで使えるわけないじゃん。
「LLMだけじゃ高度なプログラミングは無理」ってのは違うね。実際、自分で書けないコードをAIに書かせてる人いっぱい見たもん。3ヶ月かかるのが30秒なら、もうブラックボックスでも良いって人もいるしね。AIはプログラミング能力じゃなく全体の作業効率を上げるツールなんだ。価値あるものも需要があれば気軽に使えるようになるって。「価値があれば気軽に使えるわけない」なんてExcelの例を見てもおかしいでしょ。
確かにそうだけど、これって「人間が」高度なプログラミングしてるんじゃなくて、AIがやってるだけじゃない?人間が身につけるのはAI使うスキルで、プログラミングスキルじゃないでしょ。これで稼げるかはまだわかんないし。(あと、需要あるスキルは金になるのが市場原理じゃん?なんで「排除」って言うの?教育の問題じゃないの?AIがSQL書くのに役立たないわけじゃないし)
それには反対だな。人間がAI使ってプログラミングするのは、人間がプログラミングしてることになるでしょ。AI使うスキルはプログラミングスキルの一部だよ。AI使って以前より複雑なもの作れてるんだから、それはもう高度なプログラミングだよ。富の定義も違うと思う。多くの人がPCで難しいことできるようになれば、社会は確実に豊かになるって。お金になってなくても、富は生まれてるんだよ。
異議はわかったよ。でも、どっちの意見もまだ予想でしょ。科学が将来、AIが人間にどう影響するかちゃんと答えてくれるんじゃない?あと聞きたいんだけど、一番お金ない人たちがAI使う電気代、誰が払うの?今タダでも、OpenAIとか超儲けたらどうなると思う?
アメリカの電気代は1kWhで20セントくらい。1kWhでChatGPTが1000回使えるから、1クエリあたり0.02セントだよ。最低賃金なら0.1秒働けば払えるレベル。だから貧しい人でも全然払えると思う。むしろAI使って時間節約できれば、もっと経済的価値を生めるはず。社会は豊かになる方向だよ。
ちょっと比喩使いすぎちゃった、ごめん。「電気代」って全体コストのことね。でもさ、ハネムーン期間終わったら、過去の投資分とかシリコン代とか、利益もちゃんと回収しないとダメなのはわかるでしょ。
いや、それも俺には全然わかんないんだけど。確かに営利企業は利益目指すだろうけど、単純に失敗することだってあるじゃん。会社なんて潰れることしょっちゅうだよ。投資分だって、もっと良くて安い選択肢が出てきたら水の泡になるかもね。特にローカルで動くモデルの急成長を見れば、価格はマジで市場価格のシリコンと電気代に向かうと思う。君の「電気代」の比喩は的確だよ。
短い答えはこれ。セマンティックレイヤーを使え。コンテキストを与えるのに最適だし、人間をプロセスに入れるのに最高の場所だ。人間が重要なメトリクスを定義すればLLMが使える。SQLよりJSONでクエリを書けるメリットもある。LLMは短いJSONの方が得意だ。俺たちはCubeを使ってる。最高のオープンソースだよ。
> 生のSQLの代わりにJSONでクエリを書けるっていう追加のメリットもある。
ごめん、それは無理だわ。本末転倒すぎる。dang、アカウント削除して履歴も全部消してくんない?マジで言ってる。
遅いクエリをデバッグしたり検査したりするツールを、完全にサポートされてないJSON環境に移して、さらにカラム名を勝手に作らないようにプロンプト出すって?これって進歩なのか?
そのJSONはSQLにコンパイルされるんだよ。セマンティックレイヤー使ったことある?試してみたら意見変わるかもしれないね。
$DAYJOBで実際にJSONから(限定的な)SQLへのトランスパイラを書いた者として言うけど、あれを設計・実装するのはめちゃくちゃ楽しかったし、すぐにたくさんの問題を解決してくれたけど、「尻尾が犬を振ってる」っていうのは完璧な表現だよ。
もっとコメントを表示(2)
SELECT email FROM users WHERE deleted_at IS NOT NULL OR status = ’active’
このSQLの方が、このJSON->SQLライブラリに突っ込むより、パッと見でよりセマンティックに見えるんだけどね<br> {<br> ”_select”: ”email”,<br> ”_table”: ”users”,<br> ”_where”: { <br> ”deleted_at”: { ”_is”: { ”_not”: SQL_NULL_VALUE } },<br> ”_or”: [<br> { ”status”: ”inactive” },<br> ]<br> }<br> }<br>
大体こんな感じになるんだよ、こういうのって。
君の言う通り、ちょっと馬鹿げてるね。こういう時こそJSONじゃなくてXMLを使うのに完璧なタイミングだよ。
XML Object Notation、通称XONを使えばいいじゃん!JSONの柔軟さとXMLの成熟したツールが両方手に入るってわけ!例:JSON{”foo”: [”bar”, 42]},XON<Object>…</Object>
Edit:マジで存在したわw リンクは見てね.
昔、IT担当者がXML↔JSONサーバーに1万2千ドルも出したことがあったんだよね.データアプライアンスのラック見てすごく得意げだったけど、開発チームは一度も使わなかったと思うし、価値のあるデータ処理は一切しなかったって確信してるよ.
LLMはこういうJSON形式のクエリ表現の方が、SQLクエリよりずっと正確に生成できるよ.例としてJSONとSQLを見せるね.LLMはJSONの方が得意みたい.
2103のSQL例はスキーマもクエリもおかしいよ.特にCROSS JOINはおかしい.正しいSQLはこうあるべきだろ?(例を表示)
あと、このスキーマは非正規化されてて良くない.Lookupテーブルを使うべきだよ.(GeoNamesやENUMにも言及)
プログラミング言語は人間より予測しやすいんだ.だから、大量データで学習させると、基本的には検出されたルールがずっと“圧縮”されやすい.2つの例は、まともなLLMとの会話中に簡単に交換できる.俺もプロンプトで試したら似たJSON解析情報が得られたよ.
Mother of God.クエリのために設計された言語じゃなくてJSONを書けるって?何が良いの?もし抽象化レベルを上げるなら、自然言語の方が良くない?たくさんのツールが限定的な自然言語文法をSQLに変換してくれるだろ.JSONに何ができるの?{do: for: {me}}?
ORMだって結局クエリをオブジェクトにしてからSQLにコンパイルしてるじゃん。SQLをデータ構造として扱うのって、リアルな問題を解決するから何千も実装があるんだよね。今回はLLMがSQLより複雑なJSON出すの得意だからコレなんだと思うよ。
なんかまだJSONからSQLに変換する必要があるけど、誰がJSON書いてんの? LLM?
OpenAIに丸投げして1000倍も計算リソース使うよりさ、自分で使ってる技術ちゃんと覚える方が簡単で効率的じゃね?
SQLをheredocに入れてプリペアドステートメントでパラメータ化するだけでも十分なんだしさ。
あと、クエリ構築ってORMの機能の一部でしかないんだよね。メインはDBのデータ構造とアプリのモデルのマッピング、特にOOPだとね。
>生のSQLじゃなくてJSONでクエリ書けるのがメリット!
<キッズ、これぞAIで脳みそ腐敗してるって感じだな。
Semantic layerは良いアイデアだと思うよ。リレーショナルクエリを簡単に書けるように設計された構造化された層だ。それを”structured data language”とか”structured query language”って呼ぼうぜ。
真面目な話、SQLにいくつか不満はあるけど(LINQの順序変更は良いと思う)、LLMがなんとかするために別の層を発明する必要はないな。
データベースクエリのsemantic layerって(だいたい)リレーショナル代数のことだよ。
semantic layerを使うのが、精度を上げるのに一番良い方法だってのは同意だよ。AIにとってチートシートみたいなもんだからね。
でもさ、クエリをJSONで書くのを強制されるのは絶対に嫌だね。一番良い実装はDBに直接統合されて、通常のSQLクエリの一部として使えるやつだよ。そうなればツール全部から使えるしね。Exasol Semantic Layerを使った経験では、あれは完全にシームレスな体験だったよ。
semantic layerも誰かが作る必要あるじゃん。それならtext2sqlとか似たようなの使うんじゃダメなの?
AIがSDKのメソッドとかで幻覚見なくなる時がマジのゲームチェンジャーになるな。たまに、少しニッチなY SDKで高度な概念Xをやる方法教えてって聞くと、自信満々に存在しないSDKメソッド提案してきて、それと「いやそれねーし」って言い争うのにすっげー時間取られるんだよね。