詳細版:ここまでの経緯
私の言うことを聞く必要はない。
あなたが知性体に関して初心者であろうと、私のような不機嫌なベテランであろうと、AI知性体に関する既存の見解のほとんどを捨て、一歩引いて、第一原理から考え直すよう説得しようと思う。 (数週間前のOpenAIのAPI機能のリリースを見逃した方のために、以下がネタバレです:APIの後ろにもっと知的なボディロジックを押し付けるのは正しい方向ではありません)
ソフトウェアとしての知的身体、その簡単な歴史
どうやってここまで来たかを話そう。
60年前
私たちは有向グラフ(DG)とその非周期的な仲間である有向非周期グラフ(DAG)について多くのことを話すだろう。最初に指摘しておきたいのは、ソフトウェアは有向グラフであるということだ。プログラムを表現するのにフローチャートを使っていたのには理由がある。
20年前
20年ほど前から、DAGオーケストレーターが普及し始めました。例えば 気流そして舎監 このような古典的なツールや、その前身となるツール、そして(ダグスターそしてインジストそして風車).これらは同じグラフ・パターンに従い、観測可能性、モジュール性、再試行、管理といった利点が追加されている。
10~15年前
機械学習モデルがDAGの中に点在しているのを見かけるようになったのは、機械学習モデルが十分に使えるようになってからだ。このカラムのテキストを新しいカラムに要約する」や「サポートの質問を重大度や感情で分類する」といったステップを思い浮かべるかもしれません。
しかし、結局のところ、それは本質的に古い決定論的なソフトウェアであることに変わりはない。
インテリジェント・ボディの将来展望
ソフトウェアエンジニアは、もはやすべてのステップとエッジケースについてコードを書く必要はない:
そして、大きな言語モデルにリアルタイムで判断させ、道筋を考えさせる。
ビッグ・ランゲージ・モデルのグラフに "エッジ "を与え、それ自身で "ノード "を見つけさせるだけだ。バグから回復することができ、より少ないコードを書くことができ、ビッグ・ランゲージ・モデルが問題に対する斬新な解決策を見つけてくれるかもしれない。
サイクルとしての知性
つまり、3段階のサイクルがある:
- ビッグ・ランゲージ・モデルは、ワークフローの次のステップを決定し、構造化されたJSONを出力する(「ツール・コール」)。
- 決定論的コード実行ツールの呼び出し
- 結果はコンテキストウィンドウに追加される。
- 次のステップが「Finish」と表示されるまで、このプロセスを繰り返す。
initial_event = {"message": "..."}
context = [initial_event]
while True:
next_step = await llm.determine_next_step(context)
context.append(next_step)
if (next_step.intent === "done"):
return next_step.final_answer
result = await execute_step(next_step)
context.append(result)
最初のコンテキストは起動イベント(ユーザーメッセージ、cronタスクトリガー、ウェブフックなど)だけで、あとは大きな言語モデルに次のステップ(ツール)を選択させたり、タスクが完了したかどうかを判断させたりする。
これは多段階の例である:
その結果、"実体化された "DAGは次のようになる:
この「24時間体制」モデルの問題点
このモデルの最大の問題点は
- コンテキストのウィンドウが長くなりすぎると、インテリジェンスは迷ってしまう。
- たったこれだけの問題だが、この方法をじりじりと前進させるには十分だ。
手作業でインテリジェンスを構築したことがなくても、インテリジェント・ボディ・コーディング・ツールを使っているときに、このような長いコンテキストの問題を見たことがあるだろう。使っているうちに分からなくなり、新しいチャットを開く必要がある。
私がよく耳にし、皆さんも直感的にお気づきかもしれないことを申し上げたい:
たとえモデルがより長いコンテクスト・ウィンドウをサポートしていたとしても、短く焦点を絞ったヒントやコンテクストの方が、常に良い結果を得ることができる。
私が話した開発者のほとんどは、10~20ラウンド以上の対話の後、物事が混乱し、大きな言語モデルがそこから回復できないことに気づいたとき、次のように言った。ツール・コール・ループ」のアイデアは脇に置いた。たとえインテリジェント・ボディ90%が正確なタイムを計ったとしても、それは「配達に十分なレベル」にはほど遠い。スマート・ボディが90%の確率で正しく動作したとしても、それは「顧客に引き渡すのに十分な性能」にはほど遠い。10%のページがロード中にクラッシュするウェブアプリケーションを想像できるだろうか?
2025-06-09更新 - とても気に入っている。 スウィックス この声明の
何が本当に有効か - マイクロ・インテリジェンス
実用的なアプリケーションでよく見かけるのは、インテリジェント・ボディ・モデルを採用し、より広範で決定論的なDAGに組み込むというアプローチだ。
なぜこのような場合にインテリゲンチャを使うのか? -- それについては後ほど説明するが、基本的には、言語モデルが適切にスコープされたタスクのセットを管理することで、実際の人間からのリアルタイムのフィードバックを簡単に統合し、コンテキストエラーのループに巻き込まれることなく、ワークフローのステップに変換することができる。 (エレメント1そして要素3そしてエレメンツ7).
言語モデルが明示的にスコープされたタスクセットを管理できるようにすることで、実際の人々からのリアルタイムのフィードバックを統合することが容易になる......コンテクストのエラーループに巻き込まれることなく。
マイクロインテリジェンスの実例
これは、決定論的なコードが、デプロイメント・プロセスの "man in loop "ステップを処理するマイクロインテリジェンスを実行することができる例である。
- 人類 PRをGitHubのメインブランチにマージする
- 決定論的コード ステージング環境へのデプロイ
- 決定論的コード プレリリース環境に対するエンドツーエンド(e2e)テストの実行
- 決定論的コード 初期コンテキスト "Deploy SHA 4af9ec0 to production environment "で、本番環境デプロイ用のタスクをIntelligenceに与えます。
- インテリジェントボディ 各論
deploy_frontend_to_prod(4af9ec0)
- 決定論的コード この手術に対する人間の承認を求める
- 人類 バックエンドのデプロイが先でもいいですか?
- インテリジェントボディ 各論
deploy_backend_to_prod(4af9ec0)
- 決定論的コード この手術に対する人間の承認を求める
- 人類 運営を承認する
- 決定論的コード バックエンド・デプロイの実行
- インテリジェントボディ 各論
deploy_frontend_to_prod(4af9ec0)
- 決定論的コード この手術に対する人間の承認を求める
- 人類 運営を承認する
- 決定論的コード フロントエンドのデプロイメント
- インテリジェントボディ タスクの完了を判断し、終了する!
- 決定論的コード 本番環境に対してエンド・ツー・エンドのテストを実行する
- 決定論的コード タスクの完了、またはロールバックインテリジェンスにタスクを渡して失敗を確認し、場合によってはロールバックする。
この例は、私たちHumanlayerがデプロイメントを管理するためにリリースした例に基づいている。 真のオープンソースインテリジェンス -- 先週、私が実際に行った対話を紹介しよう:
我々はこのインテリジェンスに多くのツールやタスクを与えていない。ビッグ・ランゲージ・モデルの主な価値は、人間からのプレーン・テキスト・フィードバックを解析し、更新された行動指針を提案することにある。ビッグ・ランゲージ・モデルを5~10ステップの小さなワークフローに集中させるため、タスクとコンテキストを可能な限り分離している。
これもある。 よりクラシックなサポート/チャットボットのデモ.
では、知的身体とはいったい何なのか?
- プロンプト(催促) - 大きな言語モデルに、どのように行動し、どのような「ツール」が利用可能かを指示する。ヒントの出力は、ワークフローの次のステップ(「ツール呼び出し」または「関数呼び出し」)を記述するJSONオブジェクトである。 (エレメント2)
- スイッチステートメント - ビッグ・ランゲージ・モデルから返されたJSONに基づいて、それをどうするかを決める。 ( エレメント8の一部)
- 累積コンテキスト - 発生したステップとその結果のリストを保存する。 (要素3)
- ループ - ビッグ・ランゲージ・モデルが何らかの "terinate "ツール・コール(またはプレーン・テキスト・レスポンス)を発行する前に、switch文の結果をコンテキスト・ウィンドウに追加し、ビッグ・ランゲージ・モデルに次に何をすべきかを選択させる。 (エレメント8)
デプロイボット」の例では、制御フローとコンテキストの蓄積をマスターすることで、いくつかのメリットを得た:
- 私たちの スイッチステートメント 歌で応える ループ 制御フローをハイジャックして、人間の入力を待ったり、長時間実行されるタスクの完了を待ったりするのを一時停止することができる。
- を簡単にシリアライズできる。 (ぶんみゃく ウィンドウで一時停止と再開ができる。
- 私たちの プロンプト(催促) この場合、大きな言語モデルに対して、指示や「これまでに起こったこと」をどのように伝えるかを最適化することができる。
パートII そうしれいかん これらのパターンを定式化するこれらは、従来の「AIインテリジェンス・ボディ」の実装/定義をそのまま採用することなく、印象的なAI機能を追加するために、あらゆるソフトウェア・プロジェクトで使用することができる。