News Observation Lab for Future

Node.jsで作るエージェント型ツール使用ボットのMVP構築手順

Stunning aerial view of Tianjin's cityscape with dramatic skies at sunset, showcasing modern architecture and expansive urban layout.

ChatGPT のように対話しながら実際の処理を行えるインターフェースを作りたいと考えたことはありませんか。本稿では、Node.js と OpenRouter を利用して、リアルタイムの天気情報(都市ごとの天候・気温・湿度)を取得できるチャットボット「Mausam AI」の最小実装(MVP)の作り方を解説します。

エージェントツール使用とは

大規模言語モデル(LLM)は学習時点までの静的知識しか持ちません。そのため「現在のムンバイの天気は?」と尋ねても、最新情報を取得できず、架空の回答や謝罪しか返せません。そこで「エージェント」ワークフローを導入し、LLM に外部ツール(例:get_mausam)を呼び出させることで、ライブデータを会話に組み込みます。

システムプロンプトとエージェントロジック

本ボットの核となるロジックは helper.js にあり、LLM に対して「START → PLAN → TOOL → OUTPUT」という構造化された思考ループを強制します。システムプロンプトで JSON 形式の応答を要求し、ツールが必要になった場合は次のようなオブジェクトを出力させます。

{"step":"TOOL","toolname":"get_mausam","input":"Mumbai"}

バックエンドはこの JSON を逐次解析し、ツール呼び出しを代行します。また、無限ループや誤動作を防止するために最大イテレーション数のチェックとエラーハンドリングを実装しています。

ツール:天気データ取得

LLM が get_mausam を呼び出すと、JavaScript の fetch 関数で wttr.in へリクエストし、コンソール向け天気サービスからリアルタイムの天気情報を取得します。

堅牢な API 呼び出し

OpenRouter の API キーが枯渇した場合に備えて、一次キーで失敗した際に自動的にバックアップキーへ切り替えるフォールバック機構を try/catch で実装しています。

Express バックエンドとチャット UI

全体のロジックはシンプルな Express サーバー(app.js)に統合されています。複数ユーザーが同時に利用できるよう、セッション ID をフロントエンド(index.ejs)で生成し、セッションマップに保存して状態を管理します。フロントエンドは暗色系 UI を採用し、1 秒ごとに GET /messages?sessionId=… をポーリングして AI の思考過程と最終回答をストリーミング表示します。途中の「思考」ステップは視覚的に区別できるようスタイル付けされています。

まとめ

大規模なフレームワークを導入せずとも、JSON スキーマと単純なループ制御だけで LLM に外部世界へのアクセス権を与えるエージェントパイプラインを構築できます。本稿の手順を参考に、独自のツール使用ボット開発に挑戦してみてください。

免責事項・利用上の注意

本サイトは情報提供および調査研究を目的としており、投資勧誘を目的とするものではありません。掲載情報には自動取得・自動翻訳・AI分析による内容が含まれます。投資判断はご自身の責任で行ってください。

詳細を確認する →