top of page

【実践編】Agent Development Kit でAIエージェントを作ってみた

更新日:4月30日

著者:柳川 陸(金融NEXT企画部 AI開発課)


 前回の記事では、Google Cloud のAIエージェントの全体図について理解を深めてきました。本記事では、実際に Agent Development Kit を用いてAIエージェントを作っていきましょう。


 この記事では Slack議事録作成エージェント を作っていきます。特定のSlackチャンネルで行われた商談をもとに議事録を作成して投稿するシンプルなものです。シングルエージェント型 かつ 会話型 にとらえられるかなと思います。まずは動作イメージを掴んでいただくために、以下のデモ動画をご覧ください。

議事録作成エージェントのデモ動画

本記事で取り扱う範囲


 本記事で取り扱う範囲は、以下の図における右側の Agent Frameworks 、Tools と Models になります。エージェントの実行環境である Agent Engine や マルチエージェントのプロトコルである Agent2Agent は本記事では取り扱いません。

出典元:Google Cloud Blog
出典元:Google Cloud Blog

AIエージェントのアーキテクチャ


議事録作成エージェントのアーキテクチャ
議事録作成エージェントのアーキテクチャ


要件


 動作要件は以下の通りです。


  • Python 3.12.3

  • Docker version 28.0.4, build b8034c0


 ※ Cloud Shell 上で作業すれば特に上記を気にする必要は無いかなと思います。



手順


  1. Slackチャンネルのアクセス権限の設定


    1. 下記URLの Setup に従って設定を進めてください。


       https://github.com/modelcontextprotocol/servers/blob/main/src/slack/README.md


    2. また、後ほど以下の3つの情報を取り扱うため、忘れずにメモをお願いします。OrG ID または Team ID と Channel ID については、Web版Slackで該当するチャンネルを開くと、URL部分に記載されています。まだチャンネルが無い場合は作成してください。


       ・ Bot User OAuth Token( xoxb-12345... のようなもの )

       ・ OrG ID または Team ID( Txxxxxxxx または Exxxxxxxx のいずれか )

       ・ Channel ID( Cxxxxxxxxxx )


    3. 作成したパブリックチャンネルに App を追加します。


       Slackでパブリックチャンネルを作成した後、チャンネル名のところをクリックして、 「設定」>「インテグレーション」 から 「アプリを追加する」をクリックします。検索バーがあるので、先ほど作成した App の名前で検索して追加します。


  2. Slack MCP Server のDockerコンテナを準備する


    1. 最初に Model Context Protocol 公式リポジトリをクローンしてきます。このリポジトリには様々なMCPサーバーが含まれており、この中にある Slack MCP Server のDockerコンテナを使います。また、クローンしたディレクトリの中に移動します。


       $ git clone https://github.com/modelcontextprotocol/servers.git

       $ cd servers


    2. Slack MCP Server の Docker Image をビルドします。


       $ docker build -t mcp/slack -f src/slack/Dockerfile .


    3. mcp/slack の Docker Image が正常にビルドされたことを確認します。


       $ docker images


       >>>

       REPOSITORY TAG IMAGE ID   CREATED   SIZE

       mcp/slack  latest a0b0c316646c 25 seconds ago 163MB

       <<<


  3. Slack議事録作成エージェントの実装


    1. servers ディレクトリから出ます。


       $ cd ..


    2. meeting ディレクトリを作成して移動します。


       $ mkdir meeting

       $ cd meeting


    3. さらに root_agent ディレクトリを作成して移動します。


       $ mkdir root_agent

       $ cd root_agent


    4. __init__.py と  .env と agent.py を作成します。


       $ touch __init__.py

       $ touch .env

       $ touch agent.py


    5. __init__.py に以下の1行のコードを記述します。


from . import agent

  1. .env に以下の環境変数を記述します。GOOGLE_API_KEY については Google AI Studio にアクセスしていただき、「Get API Key」から取得してください。


GOOGLE_GENAI_USE_VERTEXAI=FALSE
GOOGLE_API_KEY=XXXXXXXXXXXXXXXXXXXX

  1. agent.py に以下のコードを記述します。また、コード中の SLACK_BOT_TOKEN と SLACK_TEAM_ID と SLACK_CHANNEL_IDS を先ほどメモしたものに置き換えてください。


import asyncio
from dotenv import load_dotenv
from google.genai import types
from google.adk.agents.llm_agent import LlmAgent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.adk.artifacts.in_memory_artifact_service import InMemoryArtifactService
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, SseServerParams, StdioServerParameters

load_dotenv('.env')

async def get_tools_async():
  tools, exit_stack = await MCPToolset.from_server(
      connection_params=StdioServerParameters(
          command='docker',
          args=["run",
                "-i",
                "--rm",
                "-e",
                "SLACK_BOT_TOKEN",
                "-e",
                "SLACK_TEAM_ID",
                "-e",
                "SLACK_CHANNEL_IDS",
                "mcp/slack"
                ],
          env={
                "SLACK_BOT_TOKEN": "xoxb-12345... のようなもの",
                "SLACK_TEAM_ID": "Txxxxxxxx または Exxxxxxxx",
                "SLACK_CHANNEL_IDS": "Cxxxxxxxxxx"
              }
      )
  )
  return tools, exit_stack

async def get_agent_async():
    tools, exit_stack = await get_tools_async()
    agent = LlmAgent(model='gemini-2.5-pro-preview-03-25', name='meeting_assistant', instruction='Slackの操作を支援します。', tools=tools)
    return agent, exit_stack

async def main():
    agent, exit_stack = await get_agent_async()
    session_service = InMemorySessionService()
    session = session_service.create_session(state={}, app_name="meeting_app", user_id="user123")
    runner = Runner(agent=agent, app_name="meeting_app", session_service=session_service)
    
    async with exit_stack:
        while True:
            query = input("User: ")
            content = types.Content(role="user", parts=[types.Part(text=query)])
            async for event in runner.run_async(session_id=session.id, user_id="user123", new_message=content):
                for part in event.content.parts:
                    if part.text:
                        print(part.text)

asyncio.run(main())

  1. 必要なPythonモジュールをインポートします。


pip install google-generativeai
pip install google-adk

動作確認


 以下のコマンドを実行してAIエージェントとのチャットを開始できます。デモ動画のように特定のチャンネルのメッセージをもとに議事録作成をしたり、チャンネルへの投稿ができるか確認してみましょう。


  $ python agent.py


まとめ


 いかがでしたでしょうか?MCPによってエージェントとツールの連携が可能になりました。今回はSlackと連携しましたが、この他にも利用可能なMCPサーバーは数多く公開されているため、いくつかのものを組み合わせてみたりして、様々なアイデアを試してみてください!



ブログに関するお問い合わせはこちら▼

bottom of page