【ITニュース解説】Our Java MCP Agent in Action: A Demo and the Results
2025年09月26日に「Dev.to」が公開したITニュース「Our Java MCP Agent in Action: A Demo and the Results」について初心者にもわかりやすく解説しています。
ITニュース概要
Java製のAIエージェントのデモを実施し、その動作結果を共有する。直接回答や単一ツール利用は成功したが、複数ツールが必要な複雑な質問に対し、誤ったツールの選択や不要な処理を行う課題が判明した。今後はAIの判断ロジックを改善し、より賢いエージェントを目指す。
ITニュース解説
システムエンジニアを目指す皆さんへ、AI技術の最前線を紹介する。今回は「Java MCP Agent」と呼ばれるAIエージェントがどのように動作し、どんな結果を出したのか、そのデモンストレーションについて詳しく解説する。AIエージェントとは、人間の指示を受けて、自律的に情報を収集したり、特定のツールを使ったりして問題を解決しようとするプログラムのことだ。このエージェントはJavaというプログラミング言語で作られており、特定のタスク(天気予報、時間確認など)を実行するための「ツール」や「サービス」と連携する。大規模言語モデル(LLM)の「Groq」と「Llama」を頭脳として利用し、まるで人間のように質問を理解し、適切な応答を生成する。
今回のデモでは、「JavaChatAI agent」という名前のエージェントが使われた。このエージェントは、外部の機能を提供する「MCPサーバー」と呼ばれるシステムと連携していた。具体的には、「ファイルシステム(FileSystem)」、「天気(Weather)」、「時刻(Time)」の3種類のMCPサーバーが用意されていた。これは、エージェントがこれらのサービスにアクセスして、必要な情報を取得したり、操作したりできることを意味する。エージェントはまた、「マルチツールオーケストレーション」という機能を持っていた。これは、複数のツールを組み合わせて複雑なタスクを効率的に実行する能力を指す。質問の種類に応じて、エージェントには3つの実行モードがあった。一つは、LLMの既存の知識だけで直接回答できる「DIRECT_ANSWER」。二つ目は、一つのツールを使えば解決できる「SINGLE_TOOL」。そして三つ目は、複数のツールを組み合わせて解決する必要がある「MULTI_TOOL」だ。今回のデモの目的は、様々な種類の質問に対して、エージェントがこれら3つのモードをいかに賢く使い分けるかをテストすることだった。
デモで行われたいくつかのテストとその結果を見ていこう。
最初のテストは「What is the capital of the United States?(アメリカの首都は?)」という質問だった。これは一般的な知識に関する質問であり、外部ツールを使う必要はない。エージェントは期待通り「Washington, D.C.(ワシントンD.C.)」と正確に回答した。これは「DIRECT_ANSWER」モードで処理され、エージェントが知識ベースの質問を正しく識別し、ツールなしで回答できた完璧な結果と言える。
二つ目のテストは「What time is it in Denver, CO?(デンバーの時間は?)」という質問だった。この質問には、特定のツール、具体的には時刻情報を提供するサーバーが必要となる。エージェントは質問を分析し、これを「SINGLE_TOOL」モードで処理すべきだと正しく判断した。そして、適切な時刻サーバーを選択し、質問文の中から「Denver, CO(デンバー、コロラド州)」という必要な場所の情報を正確に抽出した(この能力を「パラメーター抽出」と呼ぶ)。最終的に、エージェントは「It is 5:22 PM in Denver.(デンバーでは午後5時22分です。)」と正確な時刻を回答した。この結果も完璧で、エージェントのパラメーター抽出とツール選択のロジックが期待通りに機能していることを示した。
三つ目のテストは「How far is Denver, CO from Washington, D.C. by plane?(デンバーからワシントンD.C.まで飛行機でどれくらい遠い?)」という質問だった。このエージェントには、距離計算やフライト情報を提供するツールが組み込まれていなかったため、期待されたのは「DIRECT_ANSWER」、つまりLLMが持つ既存の知識で回答することだった。しかし、エージェントは最初にこの質問を「MULTI_TOOL」が必要なものだと誤って分類してしまった。エージェント内部の「オーケストレーター」(複数のツールを調整する役割を担う部分)が実行計画を立てようとしたが、実際には距離計算に対応する適切なツールが見つからず、計画は失敗した。その結果、エージェントはLLMが元々持っていた知識を利用して、「The flight distance between Denver, CO and Washington, D.C. is approximately 1,600 miles (2,575 kilometers).(デンバーとワシントンD.C.間の飛行距離は約1,600マイル(2,575キロメートル)です。)」と回答した。出力された情報は正しかったものの、エージェントが質問を「MULTI_TOOL」と誤分類した点で、改善が必要な課題として認識された。これは「正しい答えを出したが、そのプロセスは間違っていた」という興味深いケースだ。
最後のテストは「What time is it and How's the weather in Washington, DC?(ワシントンD.C.の現在時刻と天気は?)」という質問だった。この質問は、時刻サーバーと天気サーバーという2つのツールを使うべき典型的な「MULTI_TOOL」の例である。エージェントは、ワシントンD.C.の現在時刻と天気の情報を両方取得し、「It's 7:22 PM Eastern Time. The weather in Washington, DC is currently 69°F with a chance of showers and thunderstorms tonight.(東部標準時で午後7時22分です。ワシントンD.C.の天気は現在69°Fで、今夜はにわか雨や雷雨の可能性があります。)」と正確に回答した。しかし、ここで予期せぬ事態が発生した。エージェントは、時刻ツールと天気ツールに加えて、なぜか「ファイル書き込みツール」という不要なステップを計画に含めてしまったのだ。そして実際に、プロジェクトのフォルダにそのファイルを保存してしまった。このような現象は「ツール幻覚(hallucination)」と呼ばれ、AIエージェントが指示されていないのに架空のツールやステップを生成したり、実行したりすることを指す。情報としては正しかったものの、不要なツールを選択・実行した点で、改善が必要な課題として認識された。
これらのデモ結果から、いくつかの重要なことが明らかになった。まず、エージェントの基本的な「ルーティングロジック」、つまり質問の種類を「直接回答できるもの」と「ツールが必要なもの」に分類する能力はうまく機能していることが確認できた。特に、一つのツールを使って解決できる問題においては、情報の抽出からツールの呼び出しまで、非常に正確にこなせる能力が示された。
一方で、改善が必要な点も明確になった。一つは、複数のツールが必要な「MULTI_TOOL」として質問を「過剰に分類」してしまう傾向があることだ。実際には不要なのに、複数のツールが必要だと判断しがちだという。そして、その過剰分類の結果として、「ツール幻覚」が発生し、ユーザーに求められていないのに、存在しない、あるいは不要なツールを勝手に使ってしまう問題があった。これらの問題を解決するためには、「分析プロンプトのチューニング」が非常に重要となる。「プロンプト」とは、LLMに指示を与えるテキストのことで、「プロンプトチューニング」とは、より効果的にLLMを制御できるよう、指示の表現や内容を調整する作業を指す。特に、複数のツールが必要な場合(MULTI_TOOL)の判断基準をより厳しく、正確にする必要があることが明らかになった。
今回のデモは、AIエージェントの構築が「反復的なプロセス」であることを改めて教えてくれた。エージェントの基本的な「アーキテクチャ」(骨組みや設計)は堅牢で、核となる機能はきちんと動作する。しかし、エージェントの「インテリジェンス層」、つまり質問を理解し、適切な判断を下す部分(プロンプトエンジニアリングや意思決定ロジック)は、継続的な改良が必要不可欠である。
結論として、このJava MCPエージェントは、基本的なユーザーの質問に対して機能的に応答できることが確認された。一方で、その「賢さ」をさらに磨く必要がある領域も明確になった。デモ中にエージェントがクラッシュすることは一度もなく、常に何らかの有用な応答を提供し続けた。このことは、構築されたアーキテクチャが、AIが関わる複雑なインタラクションにも十分対応できる能力を持っていることを示している。AIエージェント開発は、試行錯誤を繰り返しながら、より洗練されたものへと進化させていく創造的なプロセスだ。