IBM BobにSPSS ModelerのClem式を書いてもらう
はじめに
IBM SPSS Modelerで使用されるClem式(CLEMはControl Language for Expression Manipulationの略)は、データ変換や条件分岐を行うための強力な言語ですが、構文に独特なところがあります。
生成AIにClem式を書いてもらえれば便利ですが、一般的なLLM(大規模言語モデル)はClem式の学習データが少ないため、ハルシネーション(誤った情報の生成)を起こしやすく、そのままでは動作しないコードを生成することがよくあります。
本記事では、IBM Documentation検索MCPサーバーを活用することで、正確なClem式を生成する方法を紹介します。
対象読者
- IBM SPSS Modelerを使用している方
- Clem式の記述に苦労している方
- IBM Bobを使用している方
前提条件
- IBM Bobのアカウント
- IBM Documentation検索MCPサーバーのセットアップ完了
- IBM SPSS Modelerの基本的な操作知識
IBM Documentation検索MCPサーバーとは
IBM Documentation検索MCPサーバーは、IBM製品の公式ドキュメントを検索し、正確な情報を取得できるMCP(Model Context Protocol)サーバーです。本記事の筆者が作成したサンプル実装で、どなたでも利用できます。詳細は以下の記事をご参照ください。
IBM Documentation検索MCPサーバー #IBMBob - Qiita
検証:MCPサーバーなしでの問い合わせ
まず、MCPサーバーを使用せずに、BobのASKモード(通常の対話モード)でClem式の生成を試みます。
プロンプト
@FIELDがABCで始まる場合、そのABCを取り除くclem式をつくって
生成された式
Bobは以下のようなClem式を生成しました。一見、正しそうに見えます。
if startstring(@FIELD, "ABC") then
substring(@FIELD, 3)
else
@FIELD
endif
実行結果:エラー発生
この式をSPSS Modelerのフィールド作成ノードに入力して実行してみます。
しかし、以下のエラーが発生しました。
[2026-03-10 14:33:18] AEQMJ0424E: CLEM エラー: 次の式の関数 'substring' の引数数が誤っています:
if startstring(@FIELD, "ABC") then substring(@FIELD, 3) else @FIELD endif
エラーの原因分析
IBM公式ドキュメント(文字列関数リファレンス)を確認すると、生成されたコードには以下の問題があることがわかります:
1. startstring関数の誤用
生成されたコードではstartstring(@FIELD, "ABC")という形で使用されていますが、これは関数の用途と引数の順序が誤っています。
IBM公式ドキュメントによると、startstring関数の正しい構文は:
startstring(LENGTH, STRING)
この関数は文字列から最初のN文字を抽出するためのもので、条件判定(文字列が特定のパターンで始まるかチェック)には使用できません。
条件判定を行うには、以下の関数を使用する必要があります:
-
isstartstring(SUBSTRING, STRING): 文字列STRINGがサブ文字列SUBSTRINGで始まる場合に添え字1を返す(条件判定用)
LLMは関数名の類似性から、文字列抽出用のstartstringを条件判定に誤用してしまいました。
2. substring関数の引数の誤り
IBM公式ドキュメントによると、Clem式のsubstring関数の正しい構文は:
substring(N, LEN, STRING)
- 第1引数 (N): 開始位置の添え字
- 第2引数 (LEN): 取得する文字数
- 第3引数 (STRING): 対象の文字列
しかし、生成されたコードのsubstring(@FIELD, 3)には以下の2つの誤りがあります:
-
引数の順序が逆: 文字列
@FIELDが第1引数になっているが、正しくは第3引数 - 引数の数が不足: 必須の第2引数(長さ)が欠落している
正しくはsubstring(4, length(@FIELD) - 3, @FIELD)のように、開始位置、長さ、文字列の順で指定する必要があります。
これは、PythonやJavaScriptなどの一般的なプログラミング言語のsubstringやsubstr関数(文字列が第1引数で、多くは2引数)の構文と混同したためと考えられます。
まとめ
このように、LLMはClem式固有の構文を正確に学習していないため、関数の用途を誤解したり、引数の順序や数を他の言語の類似関数と混同したりして、もっともらしいが誤ったコードを生成してしまいます。
検証:MCPサーバーを使用した問い合わせ
次に、IBM Documentation検索MCPサーバーを使用して、同じ問い合わせを行います。
BobをAdvancedモード(MCPサーバーなどの外部ツールを使用できるモード)に切り替えます。
プロンプト
@FIELDがABCで始まる場合、そのABCを取り除くclem式をつくって。
ibm-docsで調べて、ドキュメントのURLも教えて。
ibm-docsは、IBM Documentation検索MCPサーバーを指します。このように明示的に指定することで、BobはMCPサーバーを使用してIBM公式ドキュメントを検索します。
MCPサーバーによる検索
Bobはsearch_ibm_docsとget_ibm_topicというツールを使用して、IBM公式ドキュメントからClem式の正確な構文を検索します。
修正されたClem式
公式ドキュメントを参照した結果、Bobは以下の正しいClem式を生成しました。
if isstartstring("ABC", @FIELD) then
substring(4, length(@FIELD) - 3, @FIELD)
else
@FIELD
endif
コードの解説
この式の各部分を解説します:
-
isstartstring("ABC", @FIELD): フィールド@FIELDが文字列"ABC"で始まるかをチェックします(正しい関数名) -
substring(4, length(@FIELD) - 3, @FIELD):- 第1引数
4: 開始位置("ABC"は3文字なので、4文字目から開始) - 第2引数
length(@FIELD) - 3: 取得する長さ(全体の長さから"ABC"の3文字を引いた長さ) - 第3引数
@FIELD: 対象の文字列フィールド
- 第1引数
実行結果:成功
修正されたClem式をSPSS Modelerで実行します。
今度は正常に動作し、ABCsuzukiがsuzukiに正しく変換されました。
MCPサーバーを使用する利点
1. 正確な構文の取得
IBM公式ドキュメントを直接参照するため、関数名や引数の順序、データ型などが正確です。
2. ドキュメントURLの提供
生成されたコードの根拠となるドキュメントのURLも提供されるため、詳細を確認したり、他の関数を調べたりすることが容易です。
3. 学習コストの削減
Clem式の構文を完全に覚えていなくても、正確なコードを生成できます。
制限事項と注意点
1. MCPサーバーのセットアップが必要
IBM Documentation検索MCPサーバーを事前にセットアップする必要があります。
2. Advancedモードの使用が必要
MCPサーバーを利用するには、BobをAdvancedモードに切り替える必要があります。ASKモードなどの通常モードではMCPサーバーを使用できません。
3. 複雑な処理の場合
非常に複雑なClem式の場合、生成されたコードを理解し、必要に応じて調整する知識が必要です。
他のユースケース
IBM Documentation検索MCPサーバーは、Clem式以外にも以下のような用途に活用できます:
- SPSS Modelerの他の機能(ノードの設定、スクリプト作成など)
- 他のIBM製品のドキュメント検索
- APIリファレンスの確認
- トラブルシューティング情報の検索
まとめ
本記事では、IBM Documentation検索MCPサーバーを使用することで、IBM SPSS ModelerのClem式を正確に生成できることを実証しました。
主なポイント
- 通常のLLMの限界: 一般的なLLMはClem式の学習データが少なく、誤ったコードを生成しやすい
- MCPサーバーの有効性: IBM公式ドキュメントを参照することで、正確な構文のコードを生成できる
- 実用性: BobをAdvancedモードに切り替えることで、MCPサーバーを活用した正確なコード生成が可能
IBM製品を使用する開発者にとって、IBM Documentation検索MCPサーバーは強力なツールとなるでしょう。ぜひ活用してみてください。









