OpenAI の Realtime API を用い、MCP サーバー化した IBM i(AS/400)と音声対話でリアルタイム在庫照会を行う PoC を実施しました。
はじめに
IBM i をお使いの皆さん、在庫を確認するとき、こんな手順を踏んでいませんか?
- 5250 画面を開く
- 部品コードを入力する
- 在庫照会プログラムを実行する
- 結果を確認する
この一連の流れを「音声で話しかけるだけ」で完結できたら便利だと思いませんか?
今回、OpenAI の Realtime API と MCP(Model Context Protocol)を使って、音声で IBM i の在庫を照会できる PoC を作ってみました。
作ったもの
ブラウザで動く音声チャットアプリです。
できること:
- マイクに向かって「パルプの在庫を教えて」と話しかける
- AI が IBM i のデータベースを検索
- 「圧縮パルプの現在庫は8個です」と音声で回答
全体アーキテクチャ
ポイント:
- IBM i 側は 必要な処理を REST API 化するだけ(今回はIWSでサクッと作りました)
- AI との接続部分は MCP サーバーが担当
- IBM i 側の改修は最小限で済む
使用技術
| 技術 | 役割 |
|---|---|
| OpenAI Realtime API | 音声認識 → AI応答 → 音声合成を一気通貫で処理 |
| MCP(Model Context Protocol) | AI と外部システム(IBM i)を接続する標準プロトコル |
| IBM i IWS | RPG/COBOL プログラムを REST API として公開 |
| React + FastAPI | フロントエンドとバックエンド |
OpenAI Realtime API とは
2024年10月にリリースされた、音声でリアルタイム対話できる API です。今回は gpt-4o-realtime-preview-2024-12-17 モデルを使用しています)。
従来の方法:
音声 → Whisper(文字起こし) → GPT(応答生成) → TTS(音声合成) → 音声
Realtime API:
音声 → Realtime API(全部やってくれる)→ 音声
さらに重要なのは、Function Calling(ツール呼び出し)に対応していること。AI が「外部システムを呼び出す必要がある」と判断したら、自動的にツールを実行してくれます。
MCP(Model Context Protocol)とは
MCP(Model Context Protocol)は、Anthropic 社が提唱した、AI(LLM)と外部システム(本記事では IBM i)を接続するための標準プロトコルです。
MCPの基本的な考え方
MCPは、AIがユーザーの指示を理解したうえで、
「どの外部機能(ツール)を、どのように呼び出すべきか」を判断し、
その実行を外部システムに委ねるための共通ルールを提供します。
例えば、ユーザーが次のように指示した場合を考えます。
パルプの在庫を調べて
AIはこの指示を自然言語として理解し、
「在庫検索ツールを呼び出す必要がある」と判断します。
その結果、あらかじめ定義されたツール(例:部品検索)を、
決められた形式で呼び出します。
MCPにおける役割分担
MCPを利用した構成では、処理の役割が明確に分かれます。
-
AI(LLM)
- ユーザーの自然言語を理解する
- 必要なツールを選択する
- ツール呼び出しの指示を生成する
-
MCPサーバー
- 利用可能なツールの一覧や仕様(パラメータ、戻り値)を管理する
- AIからのリクエストを受け取り、外部システムを呼び出す
- 実行結果をAIに返す
-
外部システム
- IBM i(在庫データベース)
- ERPなどの業務システム
- その他の既存システムやAPI
AIとMCPサーバー間のやり取りはMCPプロトコルによって標準化されており、
MCPサーバーと外部システムは、HTTP通信やデータベース接続など、
既存の方式で連携します。
なぜMCPを使うのか
MCPを採用することで、次のようなメリットがあります。
- AIに「どんなツールが使えるか」を明示的に教えられる
- 複数の外部システムを同じ方式で接続できる
- 在庫照会以外の機能(発注、入出庫など)を後から追加しやすい
MCPは、AIを単なるチャットツールから、
業務を実行できる存在へ拡張するための接続レイヤーと言えます。
IBM i 側の実装
IBM i 側で REST API を公開します。
API公開の手段は何でもいいのですが、IWSで作成しました。
IWSの設定周りは割愛しますが、部品名で曖昧検索をするAPIを作成しています。
もし既存の CL/RPG プログラムがあれば、それを活用するAPIとかでもいいですね。
MCP サーバーの実装
IBM i の API を AI から呼び出せるようにする「MCP サーバー」を実装します。今回は Python で実装してみました。
from mcp.server.fastmcp import FastMCP
import httpx
mcp = FastMCP("部品検索サーバー")
@mcp.tool()
async def search_buhin(buhin_name: str) -> str:
"""部品名で部品を検索し、在庫情報を取得します"""
# IBM i の API を呼び出し
async with httpx.AsyncClient() as client:
response = await client.get(
"http://your-api-server/buhin",
params={"buhin_name": f"%{buhin_name}%"}
)
data = response.json()
items = data["result"]["data"]
# 結果を整形
result = {
"message": f"「{buhin_name}」で{len(items)}件の部品が見つかりました。",
"items": [
{
"部品番号": item["BUBHBN"],
"部品名": item["BUBHNM"],
"現在庫数": item["BZGZKS"]
}
for item in items
]
}
return json.dumps(result, ensure_ascii=False)
ポイント:
-
@mcp.tool()デコレータでツールとして登録 - docstring が AI への説明文になる(AI がいつこのツールを使うか判断する材料)
- IBM i の API を呼んで結果を整形するだけ
動作の流れ
所感
良かった点
- 想像以上にスムーズ:音声認識の精度が高く、自然な対話ができる
- 既存 API をそのまま活用可能:公開されている API があれば、MCP サーバーでラップするだけで AI と連携できる(今回は IWS を使用)
- MCP による拡張性:他のシステムも同じ方式で追加できる
課題・今後の展望
- 認証・セキュリティ:本番利用には認証の仕組みが必要
- 機能拡張:在庫照会だけでなく、発注や入出庫処理への拡張
- マルチシステム対応:複数の IBM i や他システムを MCP で束ねる
まとめ
- OpenAI Realtime API と MCP を使って、音声で IBM i の在庫照会を実現しました
- IBM i 側は REST APIがあれば簡単に AI と連携できます
- MCP により外部システム連携が標準化され、拡張性が高いアーキテクチャになっています
レガシーと言われがちな IBM i ですが、API さえ公開すれば最新の AI 技術とも連携できます。IBM i の新しい活用方法として、参考になれば幸いです。




