watsonx.aiの生成AIを使ってIBM i アプリの保守が可能か（ほんの少し）検証してみる ② Db2 for i のテーブルDDLを生成させてみる

[前の記事](https://qiita.com/gomAnomalocaris/items/269d1d0810360a33f537)の続きです。
ちょっと回り道して^^;、watsonx.aiにDb2 for i のテーブルDDLの生成をやらせてみました。

## Db2 for iのテーブルDDLをwatsonx.aiで生成してみる

シナリオは以下としてみました。
***既存にあるDb2 for i テーブル(PF)を基に新しいテーブルを作成するDDLを生成させる（あるいは既存テーブルを修正するDDLを生成する）***
手順1. 既存Db2 for iのPFからSQL DDLを生成します。
手順2. watsonx.aiを使ってユーザーの指定したとおりに、1.のDDLを修正する。
手順3. 2.のDDLを使ってテーブルを作成する
※個々の手順をフロー化して自動実行させるのもできそうですが、まずは簡単に本題(watsonx.aiのお試し)をしてみました。
※PFのDDSを修正（解釈）できるか？もやってみたいのですが、まずは、現代標準（SQL）からかなあ、ということで。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/fb56d747-79a5-a117-dd13-794e199c797a.png)

### テストする際の注意点
テスト実施した際に、下記サンプルのようにwatsonx.aiからの出力が途中で途切れてしまう場合、最大トークン数の指定が少ないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/e1ffb735-ee64-0c9e-23e0-4907535178d7.png)


そんな時は下図のように最大トークン数（右下の赤枠）を増やしてあげると最後まで結果が出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/1cba9f20-d9c9-cde5-de7c-15ecae3d1b3a.png)

watsonx.aiの使い方はとてもかんたんで、下記のように ***命令***という入力欄にwatsonx.aiに問い合わせしたい内容を自然言語で記述します。対応している言語は前回説明（選択）したモデルによりけりです。幸い今回のモデルは日本語もokでした。入力欄は、ほかに ***例***という欄もあります。命令より具体的にこんな結果がほしいよ、というのを入力するとそれに近い回答をしてくれるものだと現時点では理解しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/b892d2ad-ae0d-db18-5d66-e65588468ccf.png)

### Db2 for i DDLを生成させるサンプル

こんな感じで watsonx.aiに対する命令を指示してみました。（下記の画像を取り忘れました・・）
***命令：Db2 for i のテーブル作成用DDLを生成する***

以上の指示だけでもできそうかな？と思ったのですが、まずはテンプレ的に以下のような***例に入力例、出力例を指定してみました。***
ガチガチにフィールド名、属性、CCSID、レコード様式名等も指定してみたわけです。
（まずは、指示どおりに正確に生成されることを試してみたく・・。生成AIぽくはない、かもしれませんが^^;）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/91b2469c-706c-053a-aa7a-20e47aedf279.png)

すると、下記の反転表示部分を生成してくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/2214464d-b93b-31e5-03d3-3ddde7d256ee.png)

そこでSQLスクリプト実行にこのDDLをコピペして実行してみると・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/1d16403e-1239-ee33-c1fb-df24ce23b832.png)

・・・エラーになりました・・T T

・・・れれれ？と確認してみると、指示入力した例文に間違いを発見^^; 上記の例の欄で、数値フィールド(FLD03 DEC）にCCSIDを書いちゃってたんですね。
そこで、例に指定した誤りを修正しまして、、（下記）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/de368dfc-effa-c8de-7944-94f4e5fb8736.png)

再度実行させると、
※入力：私が指示した命令文
※出力以降：watsonx.ai が生成したDDL
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/b2f81832-3760-77ea-c198-968c05d06fc0.png)

今度は正しいDDLが生成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0bf5fc77-d75c-87f6-3c83-de9b13d33718.png)
属性も指示通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/04bc1d2e-ae30-b19b-c0ab-b9a81ca8c2b6.png)

### 考察
かんたなテストですが、以上から、
・命令だけでもある程度正確に解釈して回答を生成するが、
・例の入力、出力に具体的に記述することで（例は複数個入力できる）、ユーザーが必要とするアウトプットに近づけることが出来る。

という事が言えると思います。

※以上の内容だけですとたとえば、CLその他でプログラミングでも対応できると思いますが、この応用でたとえば、本番ライブラリーのAで始まるテーブルをテストライブラリーに生成するDDLを作成する、その後、本番環境からテスト環境にCPYFするCLPを生成する、などなど応用は無限にできそうに思います。

という事で次回は ILE RPGの修正（と生成）もやってみたいと思います。

[続きはこちら・・③追加準備とようやくRPG生成](https://qiita.com/gomAnomalocaris/items/847007288ea0916da89f)