6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM i(AS/400)と音声対話でリアルタイム在庫照会する

6
Last updated at Posted at 2025-12-21

OpenAI の Realtime API を用い、MCP サーバー化した IBM i(AS/400)と音声対話でリアルタイム在庫照会を行う PoC を実施しました。


はじめに

IBM i をお使いの皆さん、在庫を確認するとき、こんな手順を踏んでいませんか?

  • 5250 画面を開く
  • 部品コードを入力する
  • 在庫照会プログラムを実行する
  • 結果を確認する

この一連の流れを「音声で話しかけるだけ」で完結できたら便利だと思いませんか?

今回、OpenAI の Realtime API と MCP(Model Context Protocol)を使って、音声で IBM i の在庫を照会できる PoC を作ってみました。

実際のデータ
image.png


作ったもの

ブラウザで動く音声チャットアプリです。

スクリーンショット 2025-12-17 221601.png

できること:

  • マイクに向かって「パルプの在庫を教えて」と話しかける
  • AI が IBM i のデータベースを検索
  • 「圧縮パルプの現在庫は8個です」と音声で回答

全体アーキテクチャ

スクリーンショット 2025-12-18 005519.png

ポイント:

  • 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を作成しています。

image.png

もし既存の 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 を呼んで結果を整形するだけ

動作の流れ

スクリーンショット 2025-12-18 005135.png


所感

良かった点

  • 想像以上にスムーズ:音声認識の精度が高く、自然な対話ができる
  • 既存 API をそのまま活用可能:公開されている API があれば、MCP サーバーでラップするだけで AI と連携できる(今回は IWS を使用)
  • MCP による拡張性:他のシステムも同じ方式で追加できる

課題・今後の展望

  • 認証・セキュリティ:本番利用には認証の仕組みが必要
  • 機能拡張:在庫照会だけでなく、発注や入出庫処理への拡張
  • マルチシステム対応:複数の IBM i や他システムを MCP で束ねる

まとめ

  • OpenAI Realtime APIMCP を使って、音声で IBM i の在庫照会を実現しました
  • IBM i 側は REST APIがあれば簡単に AI と連携できます
  • MCP により外部システム連携が標準化され、拡張性が高いアーキテクチャになっています

レガシーと言われがちな IBM i ですが、API さえ公開すれば最新の AI 技術とも連携できます。IBM i の新しい活用方法として、参考になれば幸いです。


参考リンク


6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?