NISHIO Hirokazu[日本語][English]

Devin.ai勉強会

WIP 2025-01-17 サイボウズラボ勉強会

  • 昨年末2024-12-28から今までDevin.aiを試していた
  • その体験を語る
    • その前にまずAI関連の歴史の流れを概説
    • その前にまずSlackでDevinに話しかけるとどうなるのかを見る
      • 百聞は一見にしかず!

百聞は一見にしかず

AIエージェントの概念

  • この言葉はみんなが好き勝手な意味で使ってる、かっこいいから()
  • ここではGoogleのホワイトペーパーから解説するが、この定義が広くコンセンサスを得てるとも言えず、この定義と無関係に「AIエージェント」という言葉を使う人も多いから、きちんと議論したいなら毎回言葉の定義のすり合わせが必要な状況
  • image
  • AIエージェントは、タスクを遂行するために環境とインタラクションし、自律的に計画・実行を行うシステムです。Googleのホワイトペーパーに基づく定義では、以下の3層で構成されます:
    1. オーケストレーション層: エージェントのタスク全体を管理し、モデルやツールを呼び出す
    2. モデル: 言語モデルや推論エンジンが、計画生成や情報処理を担う。
    3. ツール: 外部API、データベース、UI操作などの具体的なインターフェースで、環境とのやり取りを行う。

AIの「見ることのできるもの」「更新できるもの」(AIにとっての世界)は何か、という視点

  • image
  • 原始的な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が直接検索して要約するようにした
    • この「検索」がツールの一つ
  • 2023-03-24の自分のScrapboxをChatGPTにつないだ話勉強会ではこう書いた
    • 今後の発展について: ChatGPT的なものとの結合としてはToolformer的なアプローチが長期的には魅力的

    • <img src='https://scrapbox.io/api/pages/nishio/GPT-4/icon' alt='GPT-4.icon' height="19.5"/>簡潔に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を叩くことにする→人間に許可を求める
      • 自分の外部脳を検索して答えるNISHIO Hirokazu's Assistantnihia.iconを2024-05-07に作ったが、利便性よりウザさが勝ってしまった
  • 利便性のためにはどんどん繋げた方がいい
    • しかし危険性がある
    • トレードオフ
  • 利便性の高さが示されて知られていくにつれて人々の考える均衡点が変わってきた
    • あとでauto-approveの話をする

チャットログよりももっとリッチなデータ形式

  • BabyAGI(2023年3月28日)がリリースされたときには既にオーケストレーション層が持つデータをチャットログのような追記データベースよりもリッチな形にすることが行われてた

  • それを使って、与えられた目的を「プラン」に分解し、更新していく

  • これはChatGPTみたいなチャットサービスをチャット的に使ってるだけだと見えてこないので理解していない人も多そう

  • ここでDevinのプランボードを見てみよう

    • リスト
    • image
    • 条件分岐やループがある例
    • image
  • 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に渡していく
        • それがオーケストレーション層の仕事
    • 手前のプロンプトの結果によって、以降のプランを修正したくなる時もあるよね
      • それもオーケストレーション層の仕事
      • なのでこれは柔軟に書き換え可能な内部状態が必要
      • 2023-07-09に/omoikane/BabyAGIコードリーディング / Scrapboxに住んでるエージェント したときにはベクトルDBだった
        • これだと各要素自体は離散的、リストとして見ると単に1次元のリスト
      • Devin.aiはもう少し表現力の高いデータ構造
        • image
        • 順接だけではなく条件分岐やGOTOを持つようになった

AIのアクセス範囲拡大の話

  • Computer Use(Anthropic / 2024年10月)
    • 試していない
    • image
    • AIに画面へのアクセスと操作の権限を与える
    • 「AIが人間と同じように画面を見て、マウスとキーボードを操作すれば、人間と同じことができる!」
      • nishio.icon「原理的にはそうだが、まだ画面認識の精度がそんなにでないんじゃないか〜?」と思ってた
  • 2024-11-26 Model Context Protocol
  • Browser UseCline
  • AIの「見ることのできるもの」「更新できるもの」(AIにとっての世界)が格段に広がった
    • この状態から振り返ってみるとChatGPTのような「チャット」って「人間がプレーンテキストしか入らないテキストエリアに入れて与えたテキストしか読めない」というのはすごく狭い世界
  • リスクよりも利便性が高いという見積もりでどんどん進んでいる
    • Clineがローカルファイルを読んだり更新したりするのは一応「こういうことがしたいけどやっていい?」と聞いてくる
      • image image
      • しかし「自動でOKする」というオプションがあり、いちいち承認するより自動で進むことを好む人がたくさん
      • image
      • 今回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とブラウザとシェルと計画メモがある
        • image
        • ClineとBrowser Useに相当するものが動いてそう
          • (Devinプロプライエタリなのでどんな実装なのかは見れない、OSSから一部取り込んでるかもね)
    • image
      • これらの「Devinのマシン」のブラウザやシェルやVSCodeを人間が直接操作することも可能ではある
        • メインの使い方ではないし、実際まれにしかいじらない
          • (まあブラウザ経由でリモートのVSCodeを使うのはもっさりしてる、 インスタンスも日本ではないだろうし)
  • SlackやWebUIでDevinとの会話を開始すると環境設定済みのスナップショットからVMが作られる
    • ここがすごく良い
    • きれいなOSイメージから作ると時間もAIコストもかかりすぎる
    • 一つの環境を使い回すと破壊や同時操作の問題が起きる
    • つまりこういうこと
    • image
      • (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に書かせればいい
  • ボトルネックの移動
    • image
    • 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的なチャットを想像していると間違いそう
  • ChatGPTは人間が発言したら、AIが発言し終わるまで人間は話せない「ターン制コミュニケーション
  • だけど本質的にはチャットログという追記型データベースへの追加はターン制ではない
  • AIが自分の作業が終わった段階で読みにくる、そこに1件以上のメッセージがあればそれをまとめて読むし、異なる人からのメッセージがあったとしても別に問題ない
  • 「AIの作業」もChatGPTの場合と違って細かいタスクの集合を行ってから返事をしてくるので「Aをやって」「あっ、ごめんBだった!」というメッセージは普通に「やりかけのAを破棄してBを始める」という振る舞いになる
  • メッセージキューを通してやりとりしている協調的マルチタスクといえばイメージ湧くだろうか

-----以下メモ

AIタスク管理システム2025-01-08の話をするのをすっかり忘れてた

プロンプトキャッシング - Anthropic

Cline

AIタスク管理システム2025-01-08 プロジェクトのソースコードをまとめてクリップボードに入れるツール#6759c19aaff09e00009f1487

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が認証を必要とする操作を行う際、ユーザ視点ではどのタイミング・どの形式で承認インタラクションを設計するのが望ましいと考えられていますか?」


(C)NISHIO Hirokazu / Converted from Markdown (ja)
Source: [GitHub] / [Scrapbox]