見出し画像

AIエージェント沼にハマるためにこの辺を見ておけば良いと思われるリソースまとめ


はじめに

みなさまはAIエージェントという言葉をご存知でしょうか。

ご存知ない方はとりあえずDoryさんの以下の記事を読んで頂けると良いと思う訳ですが、

ざっくりAIエージェントを定義すると、「人がいちいち指示しなくても、自分でやることを考えて、様々なツールを活用して目標に向かってタスクをこなしていくAI」をAIエージェントと呼んでいます。

AIエージェントと比較すると、ChatGPTのようにチャットを介してコミュニケーションするAIは指示待ち人間とも言えます。

どんなに高いパフォーマンスを出すのだとしても人間がいちいち指示を出さないと仕事をしてくれないのはつらいよね、という視点から、自律的に仕事をし続けてくれるAIエージェントはAI活用においてブレイクスルーを起こすのではないかと考えられています。

本当に自律的に仕事をし続けてくれるのだとしたら、ある意味従業員の代替になるわけですし、更にその従業員は24時間365日休まず働き続けてくれるわけですから、もしかすると従業員を雇わずにAIを雇う方がコストパフォーマンスが良いという世界線がやってくるかも知れません。

そんなわけで、AIエージェントが活用される世界というのはAI活用の次のフェーズとして世の中に破壊的な変化をもたらすのではないか、と個人的には感じているわけです。

AIエージェント沼へようこそ

そんなAIエージェントの世界ですが、実のところまだプロダクションレベルでガンガン活用事例があるという訳でもなく、まだまだ実験的な試みが盛んに行われているというフェーズにある気がします。

だからこそ今手をつけるのが面白い分野でして、個人的にはこれをAIエージェント沼と呼んでいます。

先月はDoryさん主催でAI Agent Meetup Tokyo #0が開催され、AIエージェント沼に両脚を突っ込んだ方が大集結しました。もちろん私も参加してLTしました。

ちなみにLTで話したのはOSSで公開されているCode Interpreter APIを使ってStreamlitでCode Interpreterみたいな動作をさせるアプリの話です。ローカルで動くのでインターネットにもガンガンアクセスできる。興味のある方は↓のリポジトリをチェックしてみて下さい。

AIエージェントのジャンル

ところで一言でAIエージェントと言っても、中にはいくつかジャンルがあります。個人的な見解なので正確かどうかは別として、ざっくり以下の3つのジャンルに分かれるように思えます。

  1. 自律エージェント

  2. Copilotエージェント

  3. AITuber

自律エージェントは冒頭で述べたようなAIエージェントです。与えられたゴール(ミッション)に従って自律的にタスクを実行していきます。

CopilotエージェントはChatGPTのCode Interpreterのようなイメージです。対話型でインタラクションするのですが、プロンプトに応じて自律的にタスクを切り出し、実行していくようなエージェントの在り方です。

AITuberはAIエージェントの技術で新しいキャラクターを生み出すような取り組みを指します。例えば動画のライブ配信においてユーザーからのチャット投稿に返答しながら様々な表情を見せたり、同時にゲーム実況もこなしてユーザーを楽しませるようなエージェントです。仕事ができる/できないよりも、キャラクターとしての愛らしさが重要なポイントになります。

本稿で中心に扱っていくのは自律エージェント/Copilotエージェントとし、この二つを総称してAIエージェントと呼ぶこととします。

AITuberもめちゃくちゃ面白いとは思うものの、私自身はNeuro-samaを眺めているだけで満たされているのでノーフォローです。すんません。

AIエージェントブームの火付け役

そういうわけでここからは具体的にAIエージェントブームの火付け役となったプロダクトを見ていこうと思います。

AutoGPT

AutoGPT Star History

プロジェクトとしては2023年3月17日にスタートしており、2023年4月3日には2610スターをマーク。その後凄まじい勢いでスターを伸ばしているところを見ても、AutoGPTはまさにブームの火付け役と言えるでしょう。

というわけで、とりあえず手元で動かして見ると「おおお、これがAIエージェントか!」と感動できるプロジェクト。ただトークン数の消費量に対してアウトプットの質はそれなりなので、理想と現実の違いを思い知ることができます。

BabyAGI

同時期2023年4月3日に出現したBabyAGIも同じく火付け役。

Babyと接頭辞がついているとはいえ"AGI"という挑戦的なネーミングが印象的。AutoGPTと違い、ユーザーから与えられた目標に対してまずタスクばらしを行い、そのタスクを実行していくことで目標達成に向かって進んで行くエージェントです。下図は最初期バージョンの設計図。

https://twitter.com/yoheinakajima/status/1640934493489070080?s=20

現在ではBabyAGIに続いてBabyCatAGI、BabyDeerAGIがリリースされており、最新版はBabyElfAGIとなっています。BabyElfAGIは「スキル」を定義することでエージェントが任意のスキルを利用できるようになっており、スキル次第で多様な作業をエージェントに任せることができるようになっています。スキルそのものもBabyElfAGIに書かせることができるようになっている点が革新的。

https://twitter.com/yoheinakajima/status/1678443482866933760

実際に動かして見る際にはmiurlaさんが提供しているBabyAGI UIを利用するのが便利です。サクサク動きます。クオリティが高すぎる。

Generative Agents

こちらはどちらかというとシミュレーションですが、仮想の町で25人のAIエージェントが一緒に暮らしたら何が起こるのか?というテーマで話題になりました。

中の仕組みとしてはこちらの記事が大変分かりやすく、参考になります。

LangChainで実装する場合の解説については私の記事もご参考ください。

AIエージェントの詳細を掴む

プロダクトを触りながら「こんな感じなのかー」とAIエージェントの動きを掴んだ後は、改めてAIエージェントの全体感についてしっかり説明している記事に当たると良いと思います。

最近の記事だとLoganさんの記事が良くまとまっていると思いました。ただ、Mediumメンバー限定記事のようで、閲覧できない方もいるかもです。

OpenAIのLilianさんの記事は必読です。

特にこちらの概略図は本当に良くできているなーと感じています。

https://lilianweng.github.io/posts/2023-06-23-agent/

Lilianさんの記事ではここまでの内容が余すことなく説明されていて、AIエージェント周りの現在地をかなり具体的に理解できる内容となっています。

個別のリポジトリなど

LangChain

LLMアプリケーション関連のライブラリでは最も有名なLangChainにはAIエージェントを開発するための仕組みが備わっています。

ドキュメントは丁寧に書かれていて分かりやすいですが、とにかく量が多いので、とりあえずJupyter Notebookで実行してみると感覚を掴みやすいです。

e2b (english2bits)

LangChainとは別に、AIエージェントのインターフェースを共通化するAgent Protocolというプロトコルの適用を推進しているのがe2b(english2bits)です。e2bの目的はAIエージェントのためのOSを作り上げることです。

Agent Protocolについては、AIエージェントサーバ側を以下のようなOpenAPIで定義されたインターフェースに準拠させることで、AIエージェントからAIエージェントを呼び出すような運用も実現しようとしているのかなーと思って見ています。

# https://github.com/e2b-dev/agent-protocol/blob/main/openapi.yml

openapi: 3.0.1
info:
  title: Agent Communication Protocol
  description: Specification of the API protocol for communication with an agent.
  version: 'v1'

paths:
  /agent/tasks:
    post:
      summary: Creates a task for the agent.
      tags: [agent]
      operationId: createAgentTask
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskRequestBody'
      responses:
        200:
          description: A new agent task was successfuly created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        default:
          description: Internal Server Error

# 更に続く...

FastAPIでこれらのパスをそれぞれ実装していくと言うわけではなく、agent-protocolライブラリを使えば上記のインターフェースに対応したAIエージェントサーバを簡単に作成できるようになっています。

from agent_protocol import (
    Agent,
    StepResult,
    StepHandler,
)


async def task_handler(task_input) -> StepHandler:
    print(f"task: {task_input}")

    async def step_handler(step_input) -> StepResult:
        print(f"step: {step_input}")
        return StepResult(
            output=step_input,
        )

    return step_handler


Agent.handle_task(task_handler).start()

e2bの中の人はAgent Protocolを普及させるべく、AutoGPTやBabyAGIといったメジャーなAIエージェントのリポジトリに、Agent Protocolを適用した辻プルリクを送りつけているようです。AutoGPTにはマージされている模様。

このAgent Protocolについてですが、AIエージェント周りの人たちによるディスカッションがTwitter spaces上で公開されていました。

このディスカッションのサマリは以下のような感じ。

  • エージェント感の通信について事前定義されたインターフェース(Agent Protocol)があればエージェントのベンチマークテストやAPIの作成が容易になり、開発プロセスが効率化される。

  • またインターフェースが共通化されていれば、エージェントの監視やデプロイメントの自動化、エラーの早期発見や修正にもメリットがある。

  • 現在リスクを抑えるために最小限のプロトコルの定義から進めており、通信にはREST APIを使用している。

  • エージェントをステップで構造化しているのは、エージェントの動作を制御するためである。例えば各ステップで人間のフィードバックを追加し、エージェントがそれに反応するようなケースを想定している。

  • 人間を介したフィードバックループは重要である。人間のニーズにより適切に対応できるようにするためである。

  • ユーザーはエージェントが何であるか、そもそもそれがエージェントであるかどうかを気にしない。やりたいタスクを完了させたいだけである。

  • 「ワークスペース:エージェントが影響を与えることができる何か」「アーティファクト:ワークスペース内の出力」というものがあるとして、ユーザーはワークスペースにタスクを投入し、そのタスクをエージェントが実行し、アーティファクトを生成するというモデルでシンプルに考えることができる。

直近ではこの仕組みの上に乗せてクラウド環境でCode Interpreterのような動作を実現するChatGPTプラグインをe2bが開発しており、個人的には結構注目しています。

e2bのリポジトリにはAwesome AI AgentsというAIエージェントまとめがあり、世の中にどんなAIエージェントがあるのかなーと思ったら、とりあえずここを見ておくのが良さそうです。

Lemon Agent

どちらかというとAutoGPTなどのカテゴリに近いかも知れないですが、Lemon Agentというプロダクトも紹介します。

こちらは以下のようなJSONでエージェントに実行させるワークフローを定義できるようです。ステップ構造でエージェントを表現するのはAgent Protocolと共通していますね。

{
  "steps": [
    {
      "toolId": "github-repo-get",
      "userPermissionRequired": false
    }
  ]
}

WebArena

まだ内容を把握できていませんが、気になっているものとして追加。

WebArenaは、自律型エージェントを構築するための、スタンドアロンでセルフホスト可能なウェブ環境です。WebArenaは、実世界の同等物を模倣した機能とデータを持つ、4つの一般的なカテゴリからウェブサイトを作成します。人間の問題解決をエミュレートするために、WebArenaはツールや知識リソースも独立したWebサイトとして組み込みます。WebArenaは、高レベルの現実的な自然言語コマンドを具体的なウェブベースのインタラクションに解釈する際の 各タスクの機能的正しさをプログラムで検証するために設計された注釈付きプログラムを提供します。

AIエージェント関連の論文など

まとめ系はこちら。

最近見たエージェント系論文もピックアップ。

近年、大規模言語モデル(LLM)によって駆動されるマルチエージェントを用いた自動タスク解決において、著しい進歩が見られる。しかし、既存の研究は、主に単純なタスクに焦点を当てており、幻覚問題のために複雑なタスクの探索や調査を欠いている。そこで我々は、メタプログラミングアプローチとして効果的な人間のワークフローをLLM駆動のマルチエージェントコラボレーションに注入する革新的なフレームワークであるMetaGPTを紹介する。特に、MetaGPTはまず標準化された作業手順(SOP)をプロンプトにエンコードし、構造化された協調を促進する。そして、さらにモジュール化されたアウトプットを義務付け、人間の専門家に匹敵するドメイン専門知識をエージェントに与え、アウトプットを検証し、複合エラーを減らします。このように、MetaGPTは組立ライン作業モデルを活用して、様々なエージェントに多様な役割を割り当てることで、複雑なマルチエージェント協調問題を効果的かつ統合的に分解できるフレームワークを確立する。協調的なソフトウェア工学タスクで実施された我々の実験は、既存の会話やチャットベースのマルチエージェントシステムと比較して、MetaGPTがより高い一貫性を持つ包括的なソリューションを生成する能力を示している。このことは、人間の領域知識をマルチエージェントに組み込むことの可能性を強調し、複雑な実世界の課題に取り組むための新たな道を開くものである。

単にマルチエージェントなら多様な問題を解決できるかというとそうではなくて、適切に作業手順を分解しないとスムーズに協業が進まないことを示唆しており、興味深いです。

と、いう内容をAIコミュニティAIADのDiscordで話しておりました

AIADというのはサガワさんが主催するAIコミュニティです。

LangChainもくもく会もこのコミュニティ内のチャンネルでやっているのもあり、国内のAIコミュニティの中でもトップクラスの熱量のあるDiscordコミュニティかなーと思っております。

先月はサガワさんの所属する株式会社TAMさんのイベントスペースをお借りしてオフラインミートアップも開催されました。

今回のAIエージェント沼への招待記事も、実はAIAD内でAIエージェントについて紹介するための発表資料として書かれたものです。

こんな感じでゲリラ的に勉強会が開催されるのも、コミュニティの面白いところかなと思います。

AIエージェントに興味のある方はもちろん、AI全般にアンテナが立っている方は是非AIADにご参加くださいませー!

現場からは以上です。

この記事が気に入ったらサポートをしてみませんか?