GeminiとLangChain.jsを使っているとき、思わぬ「400 Bad Request」のエラーに悩まされることはありませんか?特に、MCP(Multi-Component Protocol)と組み合わせていると、複雑なスキーマのためにエラーが頻発し、開発者としては本当にイライラしますよね。この問題を解決する方法を紹介します。わずか数行のコード変更で、エラーを一掃し、スムーズに進行するための方法を解説します。
GeminiとLangChain.jsで発生する「400 Bad Request」エラー

AIのイメージ
開発者にとって、GoogleのGeminiを利用したAIの活用は革新的ですが、組み合わせる際に直面するエラーが「400 Bad Request」です。このエラーは、主にMCPサーバーのスキーマがGeminiにとって複雑すぎるときに発生します。特に「anyOf」などの要素が含まれると、Geminiがそのスキーマを受け入れず、リクエスト全体が失敗してしまうのです。
Geminiの厳格なスキーマチェック
Geminiは、リクエストのスキーマが非常に厳格であり、他のLLM(大規模言語モデル)に比べてエラーが発生しやすいです。特に複数のMCPサーバーを一度に扱う場合、ひとつのサーバーがGeminiに適合しないスキーマを返すだけで、全てのリクエストが失敗します。この問題は、従来のAPIやSDKでは自動で解決されないことが多いです。
GeminiとMCPのスムーズな統合方法
この問題を解決するために、私が作成した小さなライブラリ「@h1deya/langchain-google-genai-ex」を紹介します。このライブラリは、Geminiが受け入れる形式にスキーマを自動的に変換することができ、わずかなコード変更でエラーを回避できます。
ライブラリの導入方法
まず、このライブラリをインストールします。そして、インポート部分を差し替え、クラス名を「ChatGoogleGenerativeAI」から「ChatGoogleGenerativeAIEx」に変更するだけで、Geminiとの統合がスムーズになります。これにより、複雑なスキーマでもエラーなく処理できます。
簡単なコード変更で解決
インポート部分とクラス名の変更は、たった2行のコードで完了します。このシンプルさがポイントです。変更後、Geminiが「anyOf」などの複雑なスキーマを拒否せず、スムーズに処理できるようになります。
- まず、ライブラリをインストールします。
- インポートを変更し、クラス名を「ChatGoogleGenerativeAIEx」に置き換えます。
- これで、MCPのスキーマがGeminiに適合し、エラーが解消されます。
Gemini動かない問題の解決方法実際に試してみた結果
このアプローチを実際に試すと、驚くほど簡単にエラーを解消できます。元々「400 Bad Request」のエラーが表示されていた部分が、スムーズに動作するようになります。
BeforeとAfterの比較
以下に、ライブラリを導入する前後の動作の違いを示します。
Before(標準のChatGoogleGenerativeAIを使用した場合)
標準の設定では、「400 Bad Request」が返され、リクエストが失敗します。
After(ChatGoogleGenerativeAIExに置き換えた場合)
クラス名を変更した後、エラーが消え、無事に応答が返ってきます。この簡単な変更で、複雑なスキーマにも対応できるようになります。
GeminiとMCPをスムーズに使うための注意点
このライブラリを利用することで、GeminiとMCPの統合が簡単に行えるようになりますが、完全に万能というわけではありません。いくつかの微妙な割り切りがあるため、問題が発生した場合はGitHubでフィードバックを提供することをお勧めします。
どんな場合に注意すべきか?
このライブラリは大多数のMCPツールに対応していますが、特定の状況では微調整が必要な場合があります。特に「Geminiフレンドリー」にスキーマを書き換える際に、若干の厳密さを犠牲にしています。これに関して、もし何か問題が発生した場合には、GitHubのIssueで報告していただけると助かります。
環境の確認
このライブラリは、2025年9月時点で「Gemini 1.5 / 2.5」モデルで正常に動作しています。今後のアップデートに対応するため、定期的にメンテナンスを行っています。
よくある質問
Geminiでエラーが発生する原因は何ですか?
Geminiはリクエストのスキーマに対して非常に厳格な要求をします。特に、MCPサーバーが提供するスキーマが複雑であると、エラーが発生しやすいです。これを回避するためには、スキーマを「Geminiフレンドリー」に変換する必要があります。
ライブラリを使用するだけで本当に解決できるのですか?
はい、ライブラリを使用することで、Geminiにとって複雑なスキーマも自動的に変換され、エラーを回避できます。コード変更は非常に簡単で、効果的です。
まとめ
「Gemini 動かない」という問題に直面している開発者にとって、このライブラリは非常に有効な解決策です。わずか数行のコード変更で、MCPサーバーとGeminiの統合がスムーズになり、面倒なエラーを回避できます。ぜひ、この方法を試して、開発作業を効率化しましょう。
コメント