rex0220 計算式プラグインの使い方をGPTsに学習させてみる（その３）未実装の関数

[rex0220 計算式プラグインの使い方をGPTsに学習させてみる（その２）](https://qiita.com/rex0220/items/7f9f3b66e96bd82b0aef)の続きです。

# 概要

未実装の関数の問合せをすると、一般的に考えられるような機能の説明を応答するので、未実装の関数は未実装と答えさせたい。
とりあえず、実装済みの関数一覧を学習させて、応答を確認してみた。

# 関数一覧の学習
関数名と簡単な説明のみ記載

```function1.txt
・関数一覧
※下記以外の関数は実装されていません。
ABS	絶対値を返す
AND	論理関数 (論理積)
ARRAY	指定された値を配列にする
ARRAY_COUNT	配列数
ARRAY_DEL	配列要素を削除
ARRAY_FIL	配列の要素を式でフィルタリング
ARRAY_FOR	指定した要素数の配列に変換※最大数 1000
ARRAY_GET	配列の指定位置(0-)の１要素を取得
ARRAY_MAP	配列の要素を式で変換
ARRAY_SORT	配列のソート 1:昇順, 0:降順
ASC	全角文字を半角文字に変換。オプションで対象を指定
AVE	テーブル内項目の平均値|指定された項目の平均値
AVEIF	テーブル内項目の条件付き平均値
BOOL	論理関数 (論理値に変換)
BOPT	BUTTON,DIALOG のオプション指定
BUTTON	ボタン名と、クリック時の項目と計算式を指定
CEIL	切り上げ
CHOOSE	指定した数値位置(0-)の値を返す
CONCAT	テーブル内項目の文字連結|指定された項目の文字連結
CONCATIF	テーブル内項目の条件付き文字連結
COUNT	テーブル項目の数値カウント|指定された項目で数値カウント
COUNTA	テーブル項目の空白以外カウント|指定された項目で空白以外カウント
COUNTIF	テーブル項目の条件付き数値カウント
COUNTROW	サブテーブルの行数
CSV_TVAL	CSVをテーブル入力データに変換
DATE_ADD	日付加算
DATE_DIFF	日付差分関数
DATE_ENDOF	日付関数 指定期間の最後
DATE_FORMAT	日付関数 日付のフォーマット
DATE_STARTOF	日付関数 指定期間の先頭
DIALOG	ボタン名と、クリック時の項目と計算式を指定
DISTINCT	値の重複値を排除し、配列化
DQUOTE	ダブルクォーテーション
DURATION	期間関数 (milliseconds に変換)
DURATION_AS	期間関数 (指定単位に変換)
DURATION_FORMAT	期間関数 (指定単位の数値を取得)
DURATION_GET	期間関数 (指定単位の数値を取得)
EV_INFO	イベント情報
EV_SET	テスト用イベント情報を設定
FIND	文字列の検索を行い、文字位置を返す
FIRST	テーブル内項目の最初の有効な値|指定された項目で最初の有効な値
FIRSTIF	テーブル内項目の条件付き最初の有効な値
FIXED	数値を桁区切りの文字列に変換
FLOOR	切り下げ(ROUNDDOWN関数と機能は同じ)
FSET	BUTTON 関数で、クリック時に項目に計算値を指定
GINFO	グループ情報
HIRAGANA	全角カナを全角かなに変換
IF	条件によって指定した値を返す
IFS	最初に真となった条件で指定した値を返す
IN	論理関数 (値の存在チェック)
INDEXOF	配列要素の位置を返す。存在しない場合は -1
INT	整数を返す
INTERSECT	配列の積集合
ISNUMBER	数値チェック
JIS	半角文字を全角文字に変換。オプションで対象を指定
JOIN	配列を区切り文字で文字列に変換
JSON_P	文字列を配列・オブジェクトに変換
JSON_S	配列・オブジェクトを文字列に変換
KATAKANA	全角かなを全角カナに変換
LAST	テーブル内項目の最後の有効な値|指定された項目で最後の有効な値
LASTIF	テーブル内項目の条件付き最後の有効な値
LEFT	文字列の左から指定された長さの文字列を返す
LENGTH	文字列の長さ
LET	一つ以上の変数と変数を使用した計算
LOGIN_CODE	ログインユーザーのユーザーコード
LOGIN_EMAIL	ログインユーザーのEメール
LOGIN_NAME	ログインユーザーのユーザー名
LOWER	小文字に変換
LTRIM	文字列から先頭の空白を削除
MATCH	文字列の検索(正規表現)で、文字列（g オプション指定時は配列）を返す
MAX	テーブル内項目で最大値|指定された項目で最大値
MAXIF	テーブル項目の条件付き最大値
MAX_STR	テーブル内項目で最大の文字列|指定された項目で最大の文字列
MID	文字列の指定位置から指定された長さの文字列を返す
MIN	テーブル内項目で最小値|指定された項目で最小値
MINIF	テーブル項目の条件付き最小値
MIN_STR	テーブル内項目で最小の文字列|指定された項目で最小の文字列
NEWLINE	改行文字
NOT	論理関数 (値をその否定に変換)
NOW	日付関数 現在時刻 format: "YYYY-MM-DD"THH:mm:ss:sssZ"
NVL	指定されたパラメータで最初の空文字以外の値
OINFO	組織情報
OR	論理関数 (論理和)
OTCSV	テーブル内項目をcsv文字列にする
OTVAL	テーブル内項目をJSON文字列にする
PI	3.14159265358979 を返す
PRODUCT	テーブル内項目のかけ算
PRODUCTIF	テーブル内項目の条件付きかけ算|指定された項目のかけ算
RAND	0以上1未満の乱数
RANDBETWEEN	指定された範囲で整数の乱数を生成
REPEAT	文字列の繰り返し
REPLACE	文字列の置換
REPLACEALL	文字列の置換(全て)
REPLACERE	文字列の置換(正規表現)
REVERSE	文字列・配列の反転
RIGHT	文字列の右から指定された長さの文字列を返す
ROUND	四捨五入
ROUNDDOWN	切り下げ
ROUNDUP	切り上げ
ROWNO	サブテーブル指定行(0-)の値
RTRIM	文字列から末尾の空白を削除
SEARCH	文字列の検索(正規表現)で、文字位置を返す
SEL_CODE	ユーザー選択、組織選択、グループ選択のコード情報
SEL_NAME	ユーザー選択、組織選択、グループ選択の名称
SET_CODE	ユーザー選択、組織選択、グループ選択のコード情報
SHUFFLE	配列をランダムに並び変え
SLICE	文字列・配列の切り出し（0-）
SPLIT	区切り文字で配列に変換
SQRT	平方根
SUBSTR	文字列の切り出し（0-）
SUBSTRING	文字列の切り出し（0-）
SUBTABLE	サブテーブル指定行(0-)の値
SUM	テーブル内項目の合計|指定された項目の合計
SUMIF	テーブル内項目の条件付き合計
SWITCH	複数条件で指定値を返す
TARRAY	テーブル内項目を配列にする
TARRAYIF	条件でテーブル内項目を配列にする
TDS	テーブル内項目を配列にする
TDSIF	条件でテーブル内項目を配列にする
TDUPCK	テーブル重複値チェック
TEST	文字列の検索で、文字の有無（true, false）を返す
TESTRE	文字列の検索(正規表現)で、文字の有無（true, false）を返す
TEXTJOIN	文字列の結合
TLTABLE	テーブルの集計関数
TODAY	日付関数 当日日付 format: "YYYY-MM-DD"
TPFILTER	TLTABLE テーブル行の集計条件指定
TPKEY	TLTABLE のキー項目指定
TPLABEL	出力項目のラベル指定
TPOPT	TLTABLE,CSV_TVAL のオプション指定
TPOUT	TLTABLE,CSV_TVAL の出力項目指定
TPSORT	TLTABLE,CSV_TVAL の項目、ソート方法を指定
TPVAL	TLTABLE の集計項目または計算式、集計方法を指定
TRIM	文字列から先頭および末尾の空白を削除
TR_AVE	同一行のテーブル内項目で平均値
TR_COUNT	同一行のテーブル内項目で数値をカウント
TR_COUNTA	同一行のテーブル内項目で空白以外をカウント
TR_MAX	同一行のテーブル内項目で最大値
TR_MIN	同一行のテーブル内項目で最小値
TR_SUM	同一行のテーブル内項目で合計
UINFO	ユーザー情報
UPPER	大文字に変換
XOR	論理関数 (排他論理和)

```

# 関数一覧を学習後の LOOKUP関数の応答
「LOOKUP関数について教えて」
一般的なLOOKUP関数の説明が無くなり、LOOKUP関数は存在しない等の説明になっている。

![2023-11-15_11h06_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/1bf56ac1-5d51-59cb-8626-cff1123d579b.png)

# 関数一覧を学習後の LEFT関数の応答
「LEFT関数について教えて」
関数一覧に記載しているが、詳細説明を上げていない LEFT 関数について質問すると、使用方法を応答してくれる。
使用例は、どこから持ってきたんだろう？LEFT 関数はよくあるので他の言語の使用例か？
![2023-11-15_11h15_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/ac574106-25ee-20c6-366a-c118366f6f0f.png)

>Qiita 計算式プラグインの説明
LEFT： 文字列の左
LEFT(fieldcode, length)
例 LEFT(文字列, 3)

# ARRAY_FOR関数の応答
「ARRAY_FOR関数について教えて」
計算式プラグイン独自のARRAY_FOR関数について質問すると、Qiita 計算式プラグインの説明から持ってきたような使用例が応答された。
応答内容としては説明が足りないので、詳細機能の学習が必要だ。
![2023-11-15_11h27_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/37c05bd6-023c-8ba1-4a0d-dfcbcc932fe3.png)

>Qiita 計算式プラグインの説明
ARRAY_FOR：　指定した要素数の配列に変換※最大数 1000
ARRAY_FOR(項目[,インデックス],要素式)
例 ARRAY_FOR(3,idx,idx) -> [0,1,2]
例 ARRAY_FOR(3,idx,idx*3) -> [0,3,6]
例 ARRAY_FOR(3,"A") -> ["A","A","A"]
例 ARRAY_FOR(3,idx,"A"&idx) -> ["A1","A2","A3"]

# AND 関数の応答
「ANDの使用例を教えてください」
詳細の説明を学習させていたAND 関数については、関数一覧を学習に影響されずに前と同じ応答になった。

![2023-11-15_11h21_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/2545e37c-a20e-f968-5483-4e42b14bea4d.png)

# まとめ

未実装の関数の質問に誤った内容や無駄な説明をさせないためには、実装済みの関数一覧を学習させると有効だと思われる。