Devin.ai勉強会
その体験を語る
その前にまずAI関連の歴史の流れを概説
その前にまずSlackでDevinに話しかけるとどうなるのかを見る
百聞は一見にしかず!
百聞は一見にしかず
ブラウザを操作して世界とインタラクションする
ボードゲームのルールを与えてWebUIとゲームサーバと思考エンジンを作る
プログラマが任意の言語で思考エンジンを実装して対戦させられるもの
この程度のリボジトリはシンポジウムの休み時間にちょいちょい指示するくらいでできてしまう時代
僕は一切コードを書いていない
既存のコードに機能追加する例
この言葉はみんなが好き勝手な意味で使ってる、かっこいいから()
ここではGoogleのホワイトペーパーから解説するが、この定義が広くコンセンサスを得てるとも言えず、この定義と無関係に「AIエージェント」という言葉を使う人も多いから、きちんと議論したいなら毎回言葉の定義のすり合わせが必要な状況
https://gyazo.com/ab597d37e3c6e2d92f7f634721b25aee
AIエージェントは、タスクを遂行するために環境とインタラクションし、自律的に計画・実行を行うシステムです。Googleのホワイトペーパーに基づく定義では、以下の3層で構成されます:
1. オーケストレーション層: エージェントのタスク全体を管理し、モデルやツールを呼び出す
2. モデル: 言語モデルや推論エンジンが、計画生成や情報処理を担う。
3. ツール: 外部API、データベース、UI操作などの具体的なインターフェースで、環境とのやり取りを行う。
AIの「見ることのできるもの」「更新できるもの」(AIにとっての世界)は何か、という視点
https://gyazo.com/3341654f2b9826ce4baabec8213ff6fd
原始的なChatGPTのようなシステムで「人間とAIの対話」と見えていたものは「ログ」という追加型のデータベースに対して相互に追記をしている構造
OpenAIがGPT-3ベースのCompletion APIを2020年6月11日にリリースした
このときはモデルは入力に対してその先を補完してレスポンスを返すものだった
2022年11月30日にChatGPTをリリースした
「チャットログ」という永続化レイヤーがある
ユーザからの入力というトリガーで「過去のログをまとめて」モデルに送信する
「何が送信する?」
この頃はまだ広く認知された考え方ではなかったが、今考えるとこれがオーケストレーション層
AIの「見ることのできるもの」は早い段階で公開のWebに広がった
gpt.iconChatGPTがインターネットを検索できる「ブラウジング機能」を初めて利用可能にしたのは、2023年9月27日です。この機能は、有料プラン(ChatGPT Plus)でGPT-4を利用するユーザー向けに提供されました。
人間は「自分で検索してそれをAIに渡して要約させる」という手間を省きたいので、AIが直接検索して要約するようにした
この「検索」がツールの一つ
今後の発展について: ChatGPT的なものとの結合としてはToolformer的なアプローチが長期的には魅力的 GPT-4.icon簡潔にToolformerについて箇条書きで説明します。
Toolformerは、言語モデルが外部ツール(検索エンジン、計算機、カレンダーなど)を使えるようにするモデルです。
つまりAIにグループウェアの使い方を教えるということ
必要に応じてグループウェアを操作して情報を引き出して、それを読んで判断する
どういう操作をしたいかという情報がマイクロフォーマットで回答文に埋め込まれている
現状でも「こういうことをしたいんだけど何を検索すればいい?」と聞けば検索キーワードが出てくる。これを進歩させて、機械的に扱える形で出力させる
これがツール
ツールはAIが「見ることのできるもの」「更新できるもの」を拡大する
(余談)今読み返してみるとこんなことを書いてて感慨深い
グループウェアに「AIのアカウント」があって、メンションやDMでやり取りできる未来
「チャットの見た目」だとユーザを1分待たせることがしにくいがグループウェアの通知の見た目だと「AI社員」に作業をお願いして、10分後に仕上がってくるのでも許容できそう
用途によって速いリアクションが欲しいものとそうでないものがある
Devin.aiはまさにこれ
GPT.iconChatGPTがPlugin機能をサポートし始めたのは、2023年3月23日です。この日、OpenAIはプラグイン機能のアルファ版を発表しました。
プラグインにより、ChatGPTは外部サービスと連携したり、リアルタイムでインターネットを検索したり、データベースにアクセスしたりといった高度なタスクを実行できるようになりました。当初は限定されたユーザーや開発者向けに提供され、徐々に拡大されました。
ChatGPTがCustom Actionsの呼び出しをサポートするようになったのは、2023年11月6日です。この日、OpenAIはGPT-4 Turboの更新とともに、開発者やユーザーがGPTの機能をカスタマイズしやすくするためのツールや統合機能を発表しました。
この段階でAIは外部のAPIを叩くことが可能になった
利便性と危険性のトレードオフ
AIが外部のAPIを叩くようになった
この時これは「更新」をするかもしれない
具体的なユースケース
ユーザの発話の内容で外部のAPIを叩く
そのAPIはリクエストを保存する
発話内容が漏洩!
これをユーザが気づかないまま実行して良いのかどうかは難しい問題
ChatGPTは「承認」のボタンを出すことにした
しかしこれはユーザ視点ではとてもウザい
人間が話しかける→AIがしばらく考える→APIを叩くことにする→人間に許可を求める
利便性のためにはどんどん繋げた方がいい
しかし危険性がある
トレードオフ
利便性の高さが示されて知られていくにつれて人々の考える均衡点が変わってきた
あとでauto-approveの話をする
チャットログよりももっとリッチなデータ形式
BabyAGI(2023年3月28日)がリリースされたときには既にオーケストレーション層が持つデータをチャットログのような追記データベースよりもリッチな形にすることが行われてた それを使って、与えられた目的を「プラン」に分解し、更新していく
これはChatGPTみたいなチャットサービスをチャット的に使ってるだけだと見えてこないので理解していない人も多そう
ここでDevinのプランボードを見てみよう
リスト
https://gyazo.com/81eb9d67f8e9f9ac1c20dc796002d027
条件分岐やループがある例
https://gyazo.com/1cf8a1dc23d0ef84f8a863e544038ca8
ChatGPTで実際にやってみよう
プランを作らせるプロンプトの例
nishio.iconComputer UseやCline、Devinなどについて調べてAIエージェントの最近の流れについて講演資料にまとめたい、手順を考えて、実行すべきpromptのリストを作って
GPT.icon...
実行すべきプロンプトリスト
調査段階
「Computer Useとは何か、その特徴と主な用途について説明してください。」
「Clineの最新動向と応用事例を教えてください。」
「Devinの技術的特徴や競合するAIエージェントとの違いを教えてください。」
「AIエージェントの最近のトレンドや注目されている研究について要約してください。」
「生成AIやLLMを活用したAIエージェントの技術的基盤を簡単に解説してください。」
比較分析
「Computer Use、Cline、Devinを比較した表を作成してください。それぞれの特徴、用途、メリットを含めてください。」
「AIエージェントが競争する領域や、異なる分野でのユースケースを教えてください。」
応用事例の収集
「Computer Useが活用された具体的な事例を3つ教えてください。」
「Clineが現実世界で使われた実例や成果について調査してください。」
「Devinが実際のビジネスプロセスでどのように役立つのかを解説してください。」
資料作成補助
「AIエージェントの技術的進化を示すタイムラインを作成してください。」
「AIエージェントの将来の展望について意見を述べてください。」
「プレゼン資料のアウトラインを作成してください。背景、技術比較、事例、将来の展望を含めてください。」
「簡潔でインパクトのあるAIエージェントの講演タイトル案を5つ教えてください。」
フィードバックと改善
「この資料の構成を改善するためのアドバイスをください。」
「講演の最初の2分間のスクリプトを作成してください。」
これを見た人間はどうするか
順にプロンプトをLLMに渡していく
それがオーケストレーション層の仕事
手前のプロンプトの結果によって、以降のプランを修正したくなる時もあるよね
それもオーケストレーション層の仕事
なのでこれは柔軟に書き換え可能な内部状態が必要
これだと各要素自体は離散的、リストとして見ると単に1次元のリスト
Devin.aiはもう少し表現力の高いデータ構造
https://gyazo.com/5cd67ee09217589a620108f110c53181
順接だけではなく条件分岐やGOTOを持つようになった
AIのアクセス範囲拡大の話
試していない
https://gyazo.com/6f2096d3aac26ac6262f3736e513c001
AIに画面へのアクセスと操作の権限を与える
「AIが人間と同じように画面を見て、マウスとキーボードを操作すれば、人間と同じことができる!」
nishio.icon「原理的にはそうだが、まだ画面認識の精度がそんなにでないんじゃないか〜?」と思ってた
https://gyazo.com/86a45e0aeb7e692d4373c637b654d644
このプロトコルに乗っかったツールが作られるとAnthropicはうれしい
WindowsのObject Linking and Embeddingみたいなもの
使うアプリが増えると幸せになる
他のAI提供者には乗っかるメリットがあるか?
長期的には統一規格が作られるだろう
WindowsがShiftJISをずっと使ってきたけどUnicodeに変わってきたように
最初に作られた規格がそのままデファクトになるかどうかは微妙
規格が作られるタイミングでは将来のニーズが見えないから
kintoneが今もShiftJISのCSVをサポートしないのといけないのと同じで、10年スパンで見ると「メジャーな規格は全部対応するしかない」的な状況になるかもしれない
操作対象を「ブラウザ」にする
ブラウザからなら単なる画面キャプチャ画像よりももっとリッチな情報が得られる
DOM(=ツリー)
画面上の点からDOMの要素を取得することもできる
画像として見えなくても視覚障害者の支援のためにWAI-ARIA ロールがついてたりする
今時の複雑なウェブアプリはテスト自動化の目的でデータ属性でtestidをつけてたりする
Visual Studio Codeに拡張を入れれば単なるテキスト以上にリッチな情報が得られる
通常VSCodeでは単一ファイルを開くのではなくプロジェクトのフォルダを開いている(ファイルツリー)
典型的なファイル配置(README, src, test, .git, .gitignore, ...)
Git管理されてることがわかればその情報も取れる
https://gyazo.com/bdce046a1154250977b2d0f3bf084bf2
ソースコードは抽象構文木にして言語固有のクエリーで色々な情報を抽出している
関数のシグネチャとか
https://gyazo.com/8b17e0a45b458b5c964144b89cc9a1ce
AIの「見ることのできるもの」「更新できるもの」(AIにとっての世界)が格段に広がった
この状態から振り返ってみるとChatGPTのような「チャット」って「人間がプレーンテキストしか入らないテキストエリアに入れて与えたテキストしか読めない」というのはすごく狭い世界
リスクよりも利便性が高いという見積もりでどんどん進んでいる
Clineがローカルファイルを読んだり更新したりするのは一応「こういうことがしたいけどやっていい?」と聞いてくる
https://gyazo.com/da7e4a9bd110f14803fcca86c2d9541d https://gyazo.com/3096a88e137a0a9adcc144480137b3bb
しかし「自動でOKする」というオプションがあり、いちいち承認するより自動で進むことを好む人がたくさん
https://gyazo.com/06003154e3ff23a83ae640a3ed9e1f50
今回ClineのコードリーディングにRoo-Clineを使っているが、正直read-onlyの操作は自動承認にしたい
「どういう時にApproveボタンが出るか」を見せるためにあえてOFFにしてた
逆に、OKにしておくと、一言指示するだけでいくつものファイルを見て判断してくれたりする
今のAIはまだまだ「完璧」ではないので、繰り返し使ってると相応の確率で「変なこと」をしてしまう
AIが「更新できるもの」はAIがミスをして破壊しうるものとイコール
AIにコマンド実行を許せば、ミスで開発環境がぶっ壊されても仕方ない
これはAIかどうかではなく「他者に対する信頼」の話
道ですれ違った人と言葉を交わすことはそれほど嫌ではない
道ですれ違った人にスマホを貸さない
主観的な信頼の有無によってアクセスを許す範囲が変わる
nishio.icon「正直、自分の使ってる開発環境をAIに壊されたら嫌だから直接触らせたくないな〜〜」
Devin.ai
スレッドごとに仮想マシンを起動する
「AIに『自分のマシン』を与える」というアプローチ
これはComputer UseもDockerなので同じ
大きく違うなと思うところはこの仮想マシンが自分のマシンで立ち上がるわけではなくクラウド上で立ち上がること
ユーザからの見た目としては「リモートワークしてる他の人のマシン」みたいなメタファーになる
Devinのマシンを見ることもできる
ビデオ会議で画面共有してもらってる感じ
DevinのマシンにはVSCodeとブラウザとシェルと計画メモがある
https://gyazo.com/0ef67369f4545b453f47f7f624c97e5d
ClineとBrowser Useに相当するものが動いてそう
(Devinプロプライエタリなのでどんな実装なのかは見れない、OSSから一部取り込んでるかもね)
https://gyazo.com/c8456859aa972105ce3b8ec27f52cf31
これらの「Devinのマシン」のブラウザやシェルやVSCodeを人間が直接操作することも可能ではある
メインの使い方ではないし、実際まれにしかいじらない
(まあブラウザ経由でリモートのVSCodeを使うのはもっさりしてる、 インスタンスも日本ではないだろうし)
SlackやWebUIでDevinとの会話を開始すると環境設定済みのスナップショットからVMが作られる
ここがすごく良い
きれいなOSイメージから作ると時間もAIコストもかかりすぎる
一つの環境を使い回すと破壊や同時操作の問題が起きる
つまりこういうこと
https://gyazo.com/c92d056a4eba23412288c690bea2f5d0
(1)を(2)と簡素化して描くことにした上で、(3)ということ
AIエージェントの知識
Devin.aiは知識を蓄える
これはトリガーと内容のペアで、Devinが会話のやり取りから自動的に抽出する
会話のやり取りから知識を自動的に抽出すること自体はChatGPTもMemory機能があるから見慣れたものだと思う
gpt.iconChatGPTにMemory機能(会話履歴を保持して、それを基にパーソナライズされた応答が可能になる機能)が導入され始めたのは、2024年7月です。
トリガーとセットになっているのは面白い
どうやって使うのかはChatGPTもDevinもクローズドソースだからわかんないね
関連した論文を探す方が良さそう?
会話からの知識の抽出・蓄積・必要そうな時に出してくるって仕組みは僕の知的生産性研究にも役に立ちそう
人間のエミュレータとしてのDevin
人間を部品として含むシステムにおいて「人間をAIというエミュレーターに置き換えてテスト」ができる
ドキュメントやテストの整備されてないプロジェクトにAIプログラマで新機能追加するということは、だいたい「空気を読めてない素人エンジニアが新機能を追加したテストされてないコードをプルリクしてくる」のと同じ
環境構築でこけたりする
それはドキュメントに書かれた環境構築手順が適切でないから
人間だけのチームだと「知識のない新人」がそんなに頻繁には追加されないから改善サイクルが遅い
Devinを使うと1日に10人とか新人が来るようなもの
ちゃんとドキュメント書かないとみんなで一斉にPythonのバージョン違いトラブルを踏んだりするw
「空気」なる「長期間そのプロジェクトに関わっていることで暗黙のうちに獲得された設計思想やユーザの振る舞いに対するメンタルモデル」を言語化する必要がある
1インスタンスが学んだことが言語化されて知識データベースに入るので教育活動に時間を投じることの費用対効果が改善する
ドキュメントはAIに書かせればいい
ボトルネックの移動
https://gyazo.com/fecf119370f00afa4d720b4d8e0f850d
1: かつてはAIの能力が乏しかった
2: AIが賢くなるにつれて、AIに情報を渡したり、AIの出した情報を世界に反映したりする通信路がボトルネックになった
3: そこが解消されて、次は「言語化されること」がボトルネックになっている
チームの暗黙知は言語化される必要がある
昔から言われていたことだが、観測しやすく実利を伴うようになってきた
人間の新人がミスすると新人のせいにしてしまいがちだが、AIがミスするならミスするような使い方をしているのが悪い
プロトタイプを作るのに良い
捨ててもいいプロトタイプをサクッと作るのにはとても向いている
そのプロトタイプを使ってみることで人間の「ちゃんと作るにはここを明確にしないといけないなー」という気づきを生んでコードは捨てる的な運用
捨てることに対して人間と違って「プライドが傷つけられた!」とか言わない
新しい知見とDevinの書いたコードをo1 Proに渡して「書き直して」とかできる
「VSCode拡張やDocker・仮想マシンを使ってAIに開発環境を操作させるとき、万が一AIが誤操作して環境を壊してしまうリスクはどれくらい現実的なんでしょうか?どんな防御策があるのか気になります」
人間が「あれー、Python3.11だと動かないな、Python3.10にしたら動いたからいいか」とか「なんかlangchainの特定のバージョンだとダメ?」とか「謎のエラーが出るようになったがnode_modulesを消してやり直したらなんか動いた」とかやってきた色々な問題を1週間の間に全部踏んだ
つまり手順のドキュメントとかライブラリのバージョン指定とかに不備があるケースで「割と常識的な操作をしてて発生しうる問題」をものすごく効率よく見つけられるw
こういうオンボーディングの設計ミスはプロジェクトにアサインされた新人が開発環境を構築しようとして踏むのでAIも同様に踏むということ
「GitHubにプルリクをするって仕組みは安心ですね!」
割とマシ、直接ファイル書き換えなんかさせたら変な書き換えをした時に戻すのがめんどくさそう
しかし
それとは別に単純に勘違いでミスをすることはある
「新規機能を追加して〜、作ったものをPullReqしといて〜」って指示したらPullReq対象のリポジトリを勘違いした
安心?
PRは破壊的じゃないから全然実害ない(?)
teramotodaiki TLがDeepSeek-V3+Clineで盛り上がる中、うちのDevinはさっき Firebaseプロジェクトのサービスアカウントを取り違えて別アプリにデプロイして全てを破壊したよ。かわいいね コミットに秘密鍵を入れる()
「チームにAIを入れてタスク管理を任せるとき、Slackなどから自然に会話してタスク化できるのは便利そうですが、複数人で同時に話しかけると競合や混乱は起きないのか、そのあたりはどう処理しているんでしょう?」
そもそもChatGPT的なチャットを想像していると間違いそう
だけど本質的にはチャットログという追記型データベースへの追加はターン制ではない
AIが自分の作業が終わった段階で読みにくる、そこに1件以上のメッセージがあればそれをまとめて読むし、異なる人からのメッセージがあったとしても別に問題ない
「AIの作業」もChatGPTの場合と違って細かいタスクの集合を行ってから返事をしてくるので「Aをやって」「あっ、ごめんBだった!」というメッセージは普通に「やりかけのAを破棄してBを始める」という振る舞いになる
メッセージキューを通してやりとりしている協調的マルチタスクといえばイメージ湧くだろうか
-----以下メモ
Cline
o1 Pro.icon
「ブラウザやVSCodeと連携してDOM情報やファイルツリーを取得しながらAIが自動操作する仕組みを、どのように抽象化してAPI化しているのでしょうか? 特に、DOM構造やASTなどツリー型データをどの粒度までAIに渡す設計になっているのか気になります。」
「仮想マシンやDockerコンテナをAIに与える際、ネットワークやファイルシステムへのアクセス権限の範囲をどのように制限・トラッキングしているのでしょうか? 例えばOSレベルの監査ログやNamespaced FSアクセスの仕組みを使っているのか、より独自の砂箱(Sandbox)設計があるのか知りたいです。」
「ClineやDevin.aiのようにAIがソースコードを直接操作・生成する場合、Git履歴やブランチのコンフリクト解消などはどう処理しているのか興味があります。AIが誤って大量のファイルを編集したり、破壊的なリベースを実行しないような制御ロジックはあるのでしょうか?」
「AnthropicのComputer UseやBrowser Useのアプローチを見ると、操作対象を画面キャプチャではなくDOMやプログラムASTといった高レベルオブジェクトで扱う流れがありますが、マウス操作相当の座標情報を扱う場合など、低レイヤと高レイヤをどう切り替えているのか技術的に気になります。」
「Devin.aiではユーザごとに独立したVMが立ち上がるとのことですが、VM間で状態を共有したいケース(例:共通のキャッシュや学習用データ)はどう扱うのか気になります。分散ファイルシステムやネットワーク越しのデータベースを参照するのか、あるいは意図的に分断しているのか、設計の意図を知りたいです。」
「今後さらにAIの権限が拡大していくとき、権限昇格(sudoや一部レジストリ書き換えなど)の要件が出てくると思います。AIが認証を必要とする操作を行う際、ユーザ視点ではどのタイミング・どの形式で承認インタラクションを設計するのが望ましいと考えられていますか?」