初心者のMCPお試しノート #2 – AIエージェントの全体像
GMACモデル
筆者がAIエージェントの全体像を説明するため作った言葉です
具体的には、
G: Generate, LLMで生成
M: MCP, ツール接続
A: AIエージェント, タスク実行
C: Coordination, AIエージェント同士の協調(A2A)
LLM(Large Language Model)
- 大規模言語モデル
- 人間の言葉を理解して文章を生成できるAIモデル
- 例:ChatGPT、Claude
MCP(Model Context Protocol)
- AI(モデル、エージェント)に外部ツールを使わせるための標準規格
- MCPが提供するサービスをAIにアクセスできるため、AIの運用が広めている
- 例:国土交通データプラットフォームのMCP
AIエージェント
- ユーザーから与えられた指示に基づき、自律的に問題解決やタスク実行を行うソフトウェア(IPAより引用)
- 従来型の生成AIと異なる点は、内容の作成のみではなく、自律的にタスクを完成することです。例えば、チケットを基づき、コードの実装、修正、テスト、プルリクエスト出すの一連作業を行います。
- 例:Microsoft / GitHub「Copilot Coding Agent」
AIエージェントとLLMの比較
例えば、明日の発表会で使うTeamsのURLを作成して、この告知をXに投稿するタスク例にして
LLMを使用する場合:
ユーザー:発表会の会議URLを作る
LLM:MCPサーバー経由で会議のURLを作成する(Teams)
ユーザー:告知文を作る
LLM:告知文生成する
ユーザー:Xに投稿する
LLM:MCPサーバー経由でXに投稿する
AIエージェントの場合:
ユーザー:明日の発表会で使うTeamsのURLを作成して、この告知をXに投稿する
AIエージェント:MCPサーバーで、発表会の会議URLを作る(Teams)
AIエージェント:LLMで告知文を作成する
AIエージェント:MCPサーバーで、Xに投稿する
AIエージェントの方は、ユーザーの一言で、裏の処理は全部AIエージェントに任せた
A2A(Agent to Agent)
- AIエージェント間連携
- AIエージェント同士が情報をやり取りのため作った共通のルール
具体的な例で理解する
ユーズケース
ユーザーがslackで「明日Teamsで発表会を行う。発表会の告知をXに投稿する」の指示を出す
従来型システム
1 Slack Bot(人間が書いたコード)が受け取る
Slack API用に書かれた専用コードで指示を受け取る
事前にルールを決めたif/elseで指示の内容を判断する
Teams側のAPIを叩く
2 Teams API を手書きコードで呼び出す
OAuth認証処理
Graph APIのエンドポイントを叩く
JSONを手動で構築
レスポンスを解析して URL を抽出
X APIを呼び出す
3 X APIを手動で呼び出す
token管理
下書き投稿のJSON生成
エラー時の再試行などもコードで実装
AIを使用する
1 Slackエージェント(LLM)が意図を理解
LLMが自然言語から以下を自動推定:
- 発表会用のteams会議URLが必要
- 告知文が必要
- Xに投稿が必要
2 Slackエージェント → MCP経由でTeamsエージェントに依頼
SlackエージェントがLLMで判断:「Teamsエージェントに会議URLを作らせよう」
send_message(to="Teams api", text="明日発表会の会議URLを作って")
3 Teamsエージェントが MCP を使って Teams API を実行
create_event(title="発表会", date="明日")
統一形式の指示でTeams APIが実行され、会議URLが返る
4 Slackエージェント → Xエージェントに依頼
「このURLを使って発表会告知文を生成し、投稿して」
send_message(to="X api", text="このURLを使って発表会告知文を生成し、投稿して")
5 XエージェントがMCPを使い、X APIを実行
create_post(text="発表会は〜、URLはこちら")
指示でX APIが実行され、投稿する
エージェント同士(A2A)が自律的に協調しタスク完了
Slackエージェント
→ Teamsエージェント
→ Xエージェント
の流れはLLM同士が会話して自動で決める
Discussion