NEWS
改めてAIについて学んでみよう 改めてAIについて学んでみよう
2026.01.29

【AI with IBM i】IBM i向けAIエージェントの構築法

【AI with IBM i】IBM i向けAIエージェントの構築法

本記事は、Tech Channelの連載記事「AI With IBM i」の第4弾である「How to Build an AI Agent for IBM i」を翻訳・転載したものです。
エージェント型AIを理論から実践に移す方法を、IBMのAIスペシャリストであるアダム・シェディヴィ氏とデヴァンシュ・クマール氏が説明します。(編集部)


2025年11月21日 アダム・シェディヴィ、デヴァンシュ・クマール

AIエージェントの変革能力とその仕組みについては、「IBM i向けAIエージェント入門」で紹介しました。本記事では、IBM i用のAIエージェントを構築する方法を、ステップ・バイ・ステップで見ていきましょう。

IBM iのシステム・インターフェースはコマンド駆動型であり、システムと連携するツールを構築するための共通インターフェースとして、SQL(およびCL)が使用できます。IBM i用のAIエージェントを構築する際には、以下の3つの質問に答える必要があります。

  1. どのような問題を解決しようとしていますか?
  2. どのようなデータにアクセスできますか。そして、そのデータを操作するためにどのようなツールを構築できますか?
  3. AIエージェントに、どのような動作をさせたいですか?すなわち、AIエージェントに貴社の環境とどのようにやりとりをさせたいですか?

具体的な例を挙げて、それぞれの質問に答えてみましょう。

質問1:どのような問題を解決しようとしていますか?

システム管理者が、一日中、システムのパフォーマンスをチェックする必要があるとします。その場合、特定のSQLクエリーを覚えたり、システムのメニューを操作したりするのではなく、「現在のシステムのパフォーマンスはどうですか?」と尋ねるだけで、総合的な回答を得たいでしょう。

目標
自然言語の質問を理解し、適切なツールを選択することで、システムのパフォーマンス・データを取得し、分析できるAIエージェントを構築する。

質問2:どのようなデータやツールがありますか?

IBM iのアーキテクチャーが真価を発揮するのは、まさに、この点です。IBM iサービスのおかげで、事実上全てのシステム情報にSQLを通じてアクセスできます。パフォーマンス監視には、次のようなIBM iサービスが使用できます。

-- 現行区画に関する詳細情報
SELECT * FROM TABLE(QSYS2.SYSTEM_STATUS(RESET_STATISTICS=>'YES', DETAILED_INFO=>'ALL')) X

-- CPU使用率に関する統計情報
SELECT * FROM TABLE(QSYS2.SYSTEM_ACTIVITY_INFO())

(訳注)DETAILED_INFOが指定できるのはIBM i 7.5以降です。

基礎の構築: SQL実行関数

AIエージェントが、SQL文を実行できるようにするには、IBM iに接続してクエリーを実行できるPython関数が必要です。ここでは、Db2 for i用のオープンソース・データベース・コネクターであるMapepire( https://mapepire-ibmi.github.io/ )を使用します。


import os
from typing import Any, Dict, Optional

from mapepire_python import connect
from pep249 import QueryParameters

credentials = {
    "host": os.getenv("IBMI_HOST"),
    "user": os.getenv("IBMI_USER"),
    "password": os.getenv("IBMI_PASSWORD"),
    "port": os.getenv("IBMI_PORT"),
}

def run_sql_statement(
    sql: str,
    parameters: Optional[QueryParameters] = None,
    creds: Dict[str, Any] = credentials,
) -> str:
    """Execute SQL statement and return formatted results

    Args:
        sql: SQL statement to execute
        parameters: Optional parameters for prepared statements
        creds: Database connection credentials

    Returns:
        Formatted string with SQL results
    """
    with connect(creds) as conn:
        with conn.execute(sql, parameters=parameters) as cur:
            if cur.has_results:
                result = cur.fetchall()
                return str(result["data"])
            else:
                return "SQLは正常に実行されました。結果は返されません。"

run_sql_statement関数は接続管理を行い、エージェントが扱える文字列として結果を返します。

SQLをAIエージェントのツールに変換する

ここで重要なのは、各SQL機能を、AIエージェントが発見して使用できる「ツール」にラッピングする必要があるということです。このツールとは、説明が添付された関数だと考えてください。AIエージェントは説明を読み取り、各ツールの使用タイミングを判断します。

システム状況を確認するための最初のツールを定義する方法は次のとおりです。


system_status = "SELECT * FROM TABLE(QSYS2.SYSTEM_STATUS(RESET_STATISTICS=>'YES', DETAILED_INFO=>'ALL')) X"

@tool(
    name="Get System Status",
    description="システムのパフォーマンス全般の統計情報を取得する。",
)
def get_system_status() -> str:
    """システムのパフォーマンス全般の統計情報を取得する"""
    return run_sql_statement(system_status)

@toolデコレーター(エージェント・フレームワークによって提供)は、この関数をエージェントに登録し、メタデータを提供するという重要な作業を行っています。AIエージェントがシステムのパフォーマンスに関する質問を検知すると、「システム・パフォーマンス全般の統計情報を取得する」という説明を読み取り、このツールが適切かどうかを判断できます。

システム・アクティビティー用の2つ目のツールを追加しましょう。


system_activity = "SELECT * FROM TABLE(QSYS2.SYSTEM_ACTIVITY_INFO())"

@tool(
    name="Get System Activity",
    description="現在のシステム・アクティビティー情報を取得する。",
)
def get_system_activity() -> str:
    """ Retrieve current system activity information""
    return run_sql_statement(system_activity)

これで、IBM iの特定の機能をAIエージェントに公開するツールが2つできました。

より高度なAIエージェントを構築すると、数十種類のツールが作成されます。そして、それぞれのツールは、AIエージェントがセキュリティー監査、ジョブ管理、ストレージ分析などの、さまざまなIBM iサービスにアクセスできるようにします。

質問3: AIエージェントはどのように動作するべきか?

最後に、使用ツールと応答方法を決定する意思決定層であるAIエージェント自体を定義する必要があります。ここでは、オープンソースのエージェントSDKであるAgnoを使用しますが、他にも多くのフレームワークから選択できます。


from agno.agent import Agent
from agno.models.anthropic import Claude

agent = Agent(
    name="Performance Metrics Assistant",
    model=Claude(id="claude-sonnet-4-20250514"),
    tools=[
        get_system_status,
        get_system_activity,
    ],
    instructions=dedent("""
        あなたは、IBM iのパフォーマンス測定を補佐するエキスパートです。
    あなたの役割はユーザーを支援することです。
        SQLクエリーを使ってIBM iシステムのパフォーマンスに関するデータを取得し、
     分析しなさい。
       
        システムのパフォーマンスについて尋ねられたとき:
        - 利用可能なツールを使って現在のデータを収集する。
        - ビジネス向けの言い回しで評価基準を説明する。
        - 懸念される全ての測定値を強調表示する。
    """),
    markdown=True,
)

何が起きているのかを、詳しく見てみましょう。

  • model
    Claude Sonnet 4を使用していますが、AIエージェントはモデルに依存しません。GPT-4、Llama、またはその他の LLM を使用できます
  • tool
    ここでSQLベースのツールを渡します。これにより、AIエージェントがこれらの機能を「認識」できます
  • instructions
    AIエージェントの行動ガイドです。エージェントの役割、行動方法、取るべきアプローチをAIエージェントに伝えます

実際の動作を見る

では、AIエージェントの動作を見てみましょう。ユーザーが質問をすると、次のようなことが起こります。

# ユーザーが質問する
agent.print_response("現在のCPU使用率とシステムのパフォーマンスはどうなっていますか?")
    背後の動き:
  1. AIエージェントが質問を受け取る
  2. 利用可能なツールとその説明を確認する
  3. get_system_status() と get_system_activity() を呼び出すことを決める
  4. 両方のクエリーからSQLの結果を受け取る
  5. データを合成して自然言語の応答に変える

そして、ユーザーは以下のような結果を受け取ります。
「現在のシステム・メトリックに基づくと、12個のアクティブなジョブがあり、CPU使用率は45%です。システムASPの使用率は全容量の62%です。平均応答時間は2秒未満であり、パフォーマンスは良好です。メモリープールの割り当てはサブシステム全体にわたりバランスが取れています。」

質問をするユーザーに、SQLの知識は必要ありません。AIエージェントがツールの選択、データの取得および解釈を自動的に行います。

更なる深化:検索から行動へ

ここまで紹介してきた例では、データの取得に焦点を当てました。そして、AIエージェントはアクションも実行できます。AIエージェントを拡張する方法は以下のとおりです。

電子メールツールの追加

from agno.agent import Agent
from agno.tools.email import EmailTools
from agno.models.anthropic import Claude

receiver_email = ""
sender_email = ""
sender_name = ""
sender_passkey = ""

agent = Agent(
    name="Performance Metrics Assistant",
    model=Claude(id="claude-sonnet-4-20250514"),
    tools=[
        get_system_status,
        get_system_activity,
            EmailTools(
            receiver_email=receiver_email,
            sender_email=sender_email,
            sender_name=sender_name,
            sender_passkey=sender_passkey,
            enable_email_user=True,
        )
    ],
    instructions=dedent("""
        あなたは、IBM iのパフォーマンス測定を補佐するエキスパートです。
    あなたの役割はユーザーを支援することです。
     SQLクエリーを使ってIBM iシステムのパフォーマンスに関するデータを取得し、
     分析しなさい。
       
        システムのパフォーマンスについて尋ねられたとき:
        - 利用可能なツールを使って現在のデータを収集する。
        - ビジネス向けの言い回しで評価基準を説明する。
        - 懸念される全ての測定値を強調表示する。
    """),
    markdown=True,
)
  

上記の例は、Agnoの組み込みEmailToolsツールキットを使用しています。

データベース更新ツールの追加

@tool(
    name="Log Performance Metrics",
    description="パフォーマンスの測定値を監視データベースに保管する。",
)
def log_performance_metrics(cpu_usage: float, asp_usage: float) -> str:
    """パフォーマンスの測定値を監視テーブルに挿入"""
    sql = """
        INSERT INTO SAMPLE.METRICS (TIMESTAMP, CPU_PCT, ASP_PCT)
        VALUES (CURRENT_TIMESTAMP, ?, ?)
    """
    return run_sql_statement(sql, parameters=[cpu_usage, asp_usage])

このようにツールを追加して使用することで、AIエージェントに「システムのパフォーマンスをチェックして、CPU使用率が80%を超えている場合はレポートをメールで送信してください」と依頼できます。

そして、AIエージェントはワークフロー全体を自律的に処理します。

本記事で紹介した内容の完全版

実行可能なスクリプトの完全版は、以下のとおりです。


import os
from textwrap import dedent
from typing import Any, Dict, Optional

from mapepire_python import connect
from pep249 import QueryParameters
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools import tool

# データべ―ス認証情報
credentials = {
    "host": os.getenv("IBMI_HOST"),
    "user": os.getenv("IBMI_USER"),
    "password": os.getenv("IBMI_PASSWORD"),
    "port": os.getenv("IBMI_PORT"),
}

def run_sql_statement(
    sql: str,
    parameters: Optional[QueryParameters] = None,
    creds: Dict[str, Any] = credentials,
) -> str:
    """SQL文を実行し、結果をフォーマットして返す"""
    with connect(creds) as conn:
        with conn.execute(sql, parameters=parameters) as cur:
            if cur.has_results:
                result = cur.fetchall()
                return str(result["data"])
            else:
                return "SQLは正常に実行されました。結果は返されません。"

# SQLクエリーを定義
system_status = "SELECT * FROM TABLE(QSYS2.SYSTEM_STATUS(RESET_STATISTICS=>'YES',DETAILED_INFO=>'ALL')) X"
system_activity = "SELECT * FROM TABLE(QSYS2.SYSTEM_ACTIVITY_INFO())"

# ツールの定義
@tool(
    name="Get System Status",
    description="システムのパフォーマンス全般の統計情報を取得する。",
)
def get_system_status() -> str:
    """システムのパフォーマンス全般の統計情報を取得"""
    return run_sql_statement(system_status)

@tool(
    name="Get System Activity",
    description="現在のシステム・アクティビティー情報を取得する。",
)
def get_system_activity() -> str:
    """現在のシステム・アクティビティー情報を取得"""
    return run_sql_statement(system_activity)

# AIエージェントの作成
agent = Agent(
    name="Performance Metrics Assistant",
    model=Claude(id="claude-sonnet-4-20250514"),
    tools=[
        get_system_status,
        get_system_activity,
    ],
    instructions=dedent("""
     あなたは、IBM iのパフォーマンス測定を補佐するエキスパートです。
    あなたの役割はユーザーを支援することです。
     SQLクエリーを使ってIBM iシステムのパフォーマンスに関するデータを取得し、
     分析しなさい。
       
        システムのパフォーマンスについて尋ねられたとき:
        - 利用可能なツールを使って現在のデータを収集する。
        - ビジネス向けの言い回しで評価基準を説明する。
        - 懸念される全ての測定値を強調表示する。
    """),
    markdown=True,
)

# AIエージェントを使用する
if __name__ == "__main__":
    agent.print_response("現在のCPU使用率とシステム・パフォーマンスはどうなっていますか?")

実行手順

  1. 依存関係をインストールする
    pip install mapepire-python agno anthropic
  2. 環境変数を設定する
    IBMI_HOST、IBMI_USER、IBMI_PASSWORD、IBMI_PORT、ANTHROPIC_API_KEY
  3. 実行する
    python ibmi_agent.py

本記事は、TechChannelの許可を得て「How to Build an AI Agent for IBM i」(2025年11月21日公開)を翻訳し、日本の読者に必要な情報だけを分かりやすく伝えるために一部を更新しています。最新の技術コンテンツを英語でご覧になりたい方は、techchannel.com をご覧ください。

いいねと思ったらシェア
twitter
facebook
hatena
linkedin
改めてAIについて学んでみよう 目次を見る

この連載は…

改めてAIについて学んでみよう
関連記事
【AI with IBM i】2026年:AIが全てのIBM iユーザーに影響を与える年
【AI with IBM i】2026年:AIが全てのIBM iユーザーに影響を与える年
【AI with IBM i】IBM i向けAIエージェント入門
【AI with IBM i】IBM i向けAIエージェント入門
【AI】第10回「Windowsで機械学習を~ノートパソコンでAIを(Part 2)」
【AI】第10回「Windowsで機械学習を~ノートパソコンでAIを(Part 2)」
あなたにオススメの連載
Db2 for i & SQL活用 虎の巻
15記事
Db2 for i & SQL活用 虎の巻
IBM i の”新”必須言語 〜FFRPG入門〜
13記事
IBM i の”新”必須言語 〜FFRPG入門〜
できるIBM i 温故知新編
9記事
できるIBM i 温故知新編