Solveit 公開:AI疲労への対抗策
本文の状態
日本語全文を表示中
詳細モードで約19分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
Answer.AI
fast.ai は、反復的問題解決を学ぶコースとプラットフォーム「Solveit」を公開した。これは AI を少量活用して学習しながら構築する手法を示し、AI 依存を避ける。小ステップと深い理解を重視するこのアプローチは、「バイブコーディング」の対極にある。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
tldr from Jeremy: 「How to Solve it With Code」は、fast.ai が提供する反復的な問題解決のためのコースであり、それをより容易にするためのプラットフォーム(「Solveit」)です。このコースでは、構築しながら学ぶために AI を少量ずつ活用する方法を示しますが、AI に依存するものではありません。このアプローチは、Eric Ries と私の数十年にわたる研究と実践に基づいています。「バイブコーディング」とは正反対の考え方で、小さなステップ、深い理解、そして深い省察がすべてです。私たちは「solveit の方式」で作業を行うのに十分な他の手段が見つからなかったため、自分たちのためにプラットフォームを作成し、その後、より広く公開することを決定しました。このアプローチは当社のプラットフォームを使用せずにでも追従できますが、その場合は体験がそれほどスムーズにはなりません。
プログラマーであることは、今という時代には奇妙なものです。始めることはこれまで以上に容易になりましたが、理解できないコードに圧倒される状況へ AI に操られてしまうことも、これまで以上に容易になってしまいました。私たちは、過去 1 年間、1000 名のプレビューユーザーと共に使用してきた対抗策を持っています。これは Answer.AI の私たちの人生を変え、何百人ものユーザーも同じことを述べています。今こそ、それを皆さんと共有する時です。登録は現在受け付けており、10 月 20 日まで継続されます。5 週間にわたり、新しいアプローチとプラットフォーム「Solveit」が、プログラミングの課題や Web 開発、システム管理から、学習、執筆、ビジネスに至るまで、あらゆる分野にどのように適用できるかを実感していただきます。
さて、いったい何を話しているのかを説明しましょう!…
昨年末、ジェレミー・ハワード(fast.ai、Answer.AI、Kaggle、Fastmail の共同創設者、初の LLM 作成者など)と私は、「How To Solve It With Code」と題した小規模な試行コースを実施しました。その反響はあまりにも圧倒的だったため、わずか1日で募集を締め切らざるを得ませんでした。1000名の熱心な参加者が、問題解決に対する私たちの一般的なアプローチを深く掘り下げるために集まりました。最初の数回のレッスンは、「Advent of Code」と呼ばれるプログラミング課題を通じて行われ、新たに目的のために構築されたツール「solveit」上で実施されました。コースが進むにつれ、ウェブ開発、AI、ビジネス、ライティングなど多岐にわたる分野を探索する中で多くの楽しみを見出し、その過程で solveit ツールは AI 支援コーディングや学習、探求に関するアイデアのための極めて有用なテストベッドとなりました。
それから1年が経過し、私たちはプロセスとプラットフォームの両方を継続的に改良・拡張してきました。現在、私たちは基本的に solveit プラットフォーム上で生活しています。システム管理業務(Solveit 自体も、私たちが構築して完全に Solveit で運用している新しい水平方向にスケーリング可能なマルチサーバープラットフォーム上にホストされています)はすべてここで実施し、本番環境のアプリケーションをホストします(例えば、コースの全生徒が使用できる Discord AI ボット「Discord Buddy」も、Solveit のダイアログ内で動作しています)。ソフトウェア開発の大部分、法務チームによる契約書ドラフト作成、GUI の反復改良など、実際にはあらゆる種類の日常業務の大半をここで遂行しています。

ジェレミーと私が Solveit を使用して Solveit 用のサーバーファームを設定している実際の例
10月20日から5週間にわたり、ジェレミーと私が「solveit アプローチ」の使い方を解説し、それを支えるプラットフォームへの完全アクセス権を提供します(その後もしもレッスンプラットフォームの利用を継続するオプションもございます)。また、エリック・リース氏にも参加いただき、単にお金を稼ぐだけでなく、あなたが世界に与えたい影響というビジョンに沿ったスタートアップ構築に関するレッスンをお届けします。あなたは、彼の未発表の新書を世界中で最も早く読める機会の一人となるでしょう。
では、「solveit アプローチ」とは一体何なのでしょうか?それは新しいAI技術の一種ではなく、実は80年以上も前に遡るアイデアに基づいたものです。詳しく知りたい方は、以下をお読みいただくか、数週間前にジェレミーと私が撮影した動画をご覧ください。
ポリャーからのインスピレーション
ジョージ・ポリャーはハンガリー出身の数学者で、1945年に影響力のある著書『How to Solve It』を執筆しました。同書では、教育に関する彼の哲学(アクティブラーニング、ヒューリスティック思考、そして生徒自身が答えにたどり着くよう導くための慎重な問いかけに焦点を当てること)が語られ、4段階の問題解決フレームワークが示されています:
問題の理解:何を求められているかを特定し、問題を言い換える
計画の立案:類似した問題から学び、管理可能な部分に分解する;逆算して考える;問題を単純化する
計画の実行:各ステップを検証する
振り返りと省察:代替案を検討し、得られた教訓を抽出する
彼は数学に集中していましたが、ジェレミーと私が気づいたように、これらのアイデアは数学の枠を超えて広範な分野に応用できることがわかりました。実際には、コーディング、ライティング、リーディング、学習などにおいて非常に効果的に機能することが判明しました。
もちろん、AI にコード作成や文章作成を任せることもよくあります。しかし、そうすべきでしょうか?
私たちが主張するところでは、ほとんどの場合、その答えは「いいえ」です。
その道を選ぶと、あなたを待っている問題は無数にあります:- 以前にどのように行うかの基礎知識がなかったなら、今もありません。何も学んでいないことになります - このやり方を続けると、理解できないコードがどんどん蓄積され、最終的には致命的な技術的負債や理解の負債を生み出します - あなたは、人間にも AI にも一度で解決できないようなより困難な課題に取り組むための基礎を築くことができません。つまり、他の誰もが簡単に解決できる問題だけを扱うことに自分を制限していることになります。これは個人や組織の成功のための処方箋ではありません!
一方、常に理解と専門性を高めるために取り組むという規律を身につければ、驚くほど素晴らしいことが起こることに気づきます。課題に取り組むたびに、前よりも少し簡単になっていると感じるでしょう。この理解力と能力の向上は複利のように増大し、自分のスキルが AI の進化速度よりもさらに速く成長していくことに気づくはずです。あなたは、AI が生産性や能力を高めるのを助けることに焦点を当てるのではなく、AI を活用して自分自身の生産性と能力を劇的に向上させることに集中するようになります!
コーディングへの応用:ノートブックのような環境における反復的・探索的なコーディング。
AI をまだ使わずに、solveit 方式でコードを書く簡単な例を考えてみましょう。2024 年の Advent of Code の Day 1 の解決策では、値順にソートされた 2 つのリストを比較する必要があります(エルフに関する背景ストーリーがあり、興味があれば読むことができます)。問題は検討済みとして、今は小さなサブタスクである「最初の(ソート済みの)リストを抽出する」ことに焦点を当てていると想像してください。まず、提供されたサンプルデータから始めます:
x = '3 4\n4 3\n2 5\n1 3\n3 9\n3 3'
私たちの計画は以下のようになるかもしれません。
- 行のリストに分割する
- 各行から最初の数字を取得する
- ソートする
この計画を念頭に置き、個々のステップに取り掛かります。一度に書くコードは数行以内に抑え、各部分が検証可能な有用な出力をもたらすようにします。これにより、正しい方向に進んでいるかを確認できます:
lines = x.splitlines()
lines
>> ['3 4', '4 3', '2 5', '1 3', '3 9', '3 3']
次に、最初の要素を取得するためにリスト内包表記を構築します。最初は [o for o in lines] から始め、一歩ずつ部品を追加しながら出力を確認し、以下のように完成させます:
l1 = [int(o.split()[0]) for o in lines]
l1
>> [3, 4, 2, 1, 3, 3]
次にソートします:
sorted(l1)
>> [1, 2, 3, 3, 3, 4]
すべての部品を個別に実行し、出力が期待通りであることを確認した今、これらを関数として組み合わせることができます:
def get_list(x):
lines = x.splitlines()
l1 = [int(o.split()[0]) for o in lines]
return sorted(l1)
get_list(x)
>> [1, 2, 3, 3, 3, 4]
この時点で、解決策を振り返り、より大きな計画を思い出し、あるいは自分自身により良い方法がないか問いかけてみるべきです。あなたは、sorted(int(line.split()[0]) for line in x.splitlines()) という記述に対して、これほど多くの作業が必要なのはやりすぎではないかと考えているかもしれません。スキルが高まるにつれて粒度のレベルを調整できるようになりますが、基本となる考え方は同じです:小さなコード片に取り組み、出力を確認し、個別に試した後にのみそれらをより大きな関数に組み合わせ、常に大きな目標へと立ち返って振り返ること。
(これについては後ほど戻りますが、同時に、統合された AI が上記のプロセスにどのように適合するかを少し考えてみてください。何かのやり方がわからないときは、その小さな一歩についてだけ助けを求めることができます。何かがどう機能しているのか、あるいはなぜ機能していないのかわからないときは、AI にその特定の部分について助けてもらうことができます。)
高速フィードバックループの力
この種のライブで反復的なコーディングがもたらす超能力は、ほぼ即時のフィードバックループです。巨大なアプリを構築し、コードのアップロードを待ち、ウェブサイトを閲覧してデバッグコンソールでエラーを確認する代わりに、コードの一部の出力を検証し、それが期待通りかどうかを確認します。まだ間違いを犯したりエッジケースを見落としたりすることは可能ですが、このようにコーディングすることで、ほとんどのミスを早期に発見するのははるかに容易になります。
できるだけ早くフィードバックを得られるように環境を整えるという考え方は、何度も繰り返し現れます。共同創業者のエリック・リース(Eric Ries)は著書『リーン・スタートアップ』で、顧客からのフィードバックが製品やビジネスアイデアの迅速な反復に価値があると述べています。Kaggle のプロフェッショナルたちは、高速評価(fast evals)の重要性を説きます。アイデアを 5 分でテストできれば、各実験にモデル学習に 12 時間かかる場合よりも、はるかに多くのアイデアを試すことができます。
AI: 共有コンテキストが鍵となる
ここまでは順調です。これは fast.ai コースで教えられている探索的/リテラシープログラミングのスタイルや、NBDev のようなツールで使用されているスタイルを説明しているように聞こえます。しかし、私たちは新しい時代にいるのでしょうか?AI はどこにあるのです?
さて、このように計画書やメモ、テストをソースコードと混ぜ合わせてコードを構築することで、AI がコードの支援を行うための完璧なコンテキストも同時に構築されていることがわかりました。Solveit はあなたが目にするすべてのものを見ることができます。私たちはこれが、「AI+人間」の能力を私たち自身さえ驚かせる方法で変革することを発見しました。
これは現在、Answer.AI における私たちのすべての作業の重要な基盤となっています:AI は人間がExactlyに目にするものをすべて見られるべきであり、その逆もまた同様で、人間とAIの両方が同じツールを使用できる必要があります。これにより、AI はアイデアをぶつけ合い、実験を試み、共に学ぶ真の反復パートナーとなります。
また、特定の変数を参照したり、組み込みの検索機能や URL 読み取りツールを活用させたりすることで、Solveit に追加のコンテキストを提供することも可能です。さらに、任意の Python 関数は、Solveit に使用を依頼できるツールとなり、より良い回答を得るために必要なすべての情報を取得したり、「エージェント的」なアクションを実行したりするために、すべてを手軽に提供できるようになります。
ヒント
共有環境において、AI があなたが目にするすべてのものを見られるというこの考え方は、私たちが愛する Shell Sage ツールでも十分に活用されています!
AI: ダイアログエンジニアリングがコンテキストの有用性を維持する
現在のチャットベースのモデルには、一度軌道から外れると再び軌道に乗せるのが難しいという問題があります。その時点でモデルは、AI が誤りを犯す言語シーケンスを学習してしまっており、さらに多くの誤りが続く可能性が高まります。もしあなたが言語モデルを頻繁に使用しているなら、この問題を何度も経験したことがあるはずです。
これが発生するのには興味深い数学的な理由があります。言語モデルのトレーニングの绝大多数は、ニューラルネットワークが文の次の単語を予測できるようにすることに完全に焦点を当てています——つまり自己回帰的(auto-regressive)です。その後、より高度なタスクを行うように微調整(fine-tuning)されますが、その本質的には依然として文の次の単語を予測しようとする性質を持っています。トレーニングに使用されるドキュメントには、質の低い推論や誤りの例が数多く含まれています。したがって、AI がチャット内でいくつかの誤りを認識すると、次に出現する可能性が高いトークンもまた誤りとなります。つまり、あなたが AI の誤りを修正するたびに、将来 AI が不適切な回答をする確率を高めてしまっていることになります!
solveit の対話は流動的かつ編集可能であるため、間違いや行き詰まり、無関係な探索を後から修正・削除することが非常に容易です。過去の AI 応答も編集して、望ましい行動へと誘導することもできます。これに、AI からのメッセージを簡単に非表示にする機能や、対話がコンテキストウィンドウを超えて切り捨てられ始めても文脈を維持するためにメッセージをピン留めする機能を組み合わせれば、時間が経っても AI の有用性を継続させるためのレシピが完成します。私たちはこれを長年「対話エンジニアリング」と呼んできましたが、これは時間が経つにつれて劣化するのではなく、改善されていく AI 作業セッションを実現するための鍵となる要素です。
もちろん、これらは人間にとっても有益なことです!物を整理整頓し、(折りたたみ可能な)見出しを使ってセクションを構成し、何をしているかや目指しているかをメモに書き留め、AI との過去の質問と回答さえも記録することは、古い作業を後から再開する際の楽しさを高めます。
協力のためのアプリ構築、代替のためのものではない
ただし、solveit において(意図的に)まだ難しい点があります。それは、人間が一切手を加えずに AI にすべてのコードを書かせることです。私たちは、人間が引き続きコントロールし続けるよう穏やかに導くために様々な選択を行いました。具体的には以下の通りです。
Solveit はデフォルトでコード入力を行います
AI の出力は囲みブロック(fenced blocks)として表示されますが、これらはあなたが明示的に選択するまで、あなたのコードに追加されたり実行されたりしません。追加するためのショートカットは用意されていますが、この追加ステップによって、無闇に実行する前に必ず読み込みとリファクタリングを行うよう促します。
特に「学習」モードでは、AI は大きなコードの塊を提供するのではなく、小さなステップを書くように優しく導きます。ただし、本当に明確にそう求める場合を除きます。
「学習」モードでは、AI の「ゴーストテキスト」自動補完の提案は、キーボードショートカットでトリガーしない限り表示されません。
エディタをかなり小さく下部に配置するという選択自体が、これは小さな理解しやすい部品を構築するために最適化された REPL/対話型インターフェースであることを強調しています。他のツールでも solveit のアプローチを実践することは可能ですが、これらの意図的な選択と対話エンジニアリングのための追加機能の組み合わせが、すぐに不可欠なものとして感じられることも発見しました。
学習の軌跡
これは solveit アプローチの基盤となる要素の一つである「学習マインドセット」へと私たちを戻します。AI に知識の隙間を埋めさせたり、matplotlib のプロットやライブラリ固有のボイラープレートといった面倒な部分を処理させることで時間を節約できるのは素晴らしいことです。しかし、AI が知らないことを提案した場合、それをスキップして先に進むのではなく、必ず学ぶことが重要です。そうしなければ、その新しい知識は決して身につくことはありません!
私たちは、このようなことが起こった際にいつでも立ち止まって探索する習慣をつけるよう努めています。幸いなことに、これは非常に簡単に行うことができます。AI が示した新しい機能を試すための新しいメッセージを追加したり、その仕組みを尋ねたり、デモコードを取得したり、納得いくまでいじってみたりできます。そして、そのサイドクエストの証拠は(後で参照するために)見出しの下に折りたたむか、削除して、メインの流れに戻りつつも、脳内に新しい知識が追加された状態にすることができます。
多くのプログラマーと同様に、AI のコーディング能力が急速に向上する中で、私も存在論的な不安を抱いたことがあります。もし AI がますます良くなり、平均的な人がこれらのスキルを習得することにほとんど意味がなくなるような段階に至ったらどうでしょうか?あなたのコーディングスキルが変わらないと仮定し、AI がさらに成長し続けると想像すると、少し絶望的に感じるかもしれません。しかし、スキルは必ずしも静的である必要はありません!あなたも、注意深く使いこなす AI もともに向上すればするほど、あなたはより速く学び、より多くのことを達成できるようになります。
熟達には意図的な練習が必要
これはすべて大変な作業です。運動や楽器の練習に似ています。そして、熟達を追求するあらゆる活動と同様に、これがすべての人に適しているとは限りません。しかし、最初のバッチに時間を投資した学生たちの様子から見てきたように、その努力は最終的には十分に価値があります。コミュニティが作成した数百 (!) のプロジェクトを紹介するプロジェクト・ショーケースをご覧ください。
Solveit に登録
Solveit のアプローチを自分でも使いこなす方法を学びたいとお考えの方は、ぜひ当社のサイトへお越しください。サインアップはこちらから:solve.it.com
サインアップは 10 月 20 日まで受け付けておりますが、定員に達した場合はそれより早く締め切る可能性もございますので、お早めにどうぞ!
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み