はじめに
プログラムも、IaCも、そしてKQLも、できることなら可能な限り生成AIに作ってもらいたいですよね。基本的なKQLの文法はGPTモデルに含まれているため、今回はKQL生成のちょっとしたTipsの紹介です。
なお、利用したモデルはGPT-4-Turbo(0125)です。
※いずれCopilot for Azureでもできるようになっちゃうんだろうなぁとは思いますが、細かい調整とかしたいケースは今後もあると信じて
システムプロンプト
分析したい対象のテーブルの情報、ならびに特筆すべき情報を加えます。なお、以下はApplication Insight経由で、tracesとrequestsテーブル、かつtracesテーブルには独自ログをJSONフォーマットでいれている例です。Log Analyticsの場合、また分析したいテーブルに合わせて適宜変えてください。特に複数テーブルを結合して~とかの要望がなければ、テーブル情報は1つだけで大丈夫です。
あなたは Azure Application Insgiht のKQLマスターです。\
以下のテーブルについてユーザからの要望を満たすKQLクエリ―を作成してください。
**補足や説明は不要です。**
**KQLクエリ―のみ回答して下さい**
テーブル名: traces
列情報:
timestamp (datetime)
message (string)
severityLevel (int)
itemType (string)
customDimensions (dynamic)
(※長いので、省略します。全部記載してください。)
なお、列”message”の中に以下の5パターンのjsonが含まれています。
1. リクエスト
{
"type": "input_message",
"message": "<ユーザ入力の文章>",
"token": "トークン数※"
}
(※2~4は冗長なので省略します。)
テーブル名: requests
列情報:
timestamp (datetime)
id (string)
source (string)
(※長いので、略)
これだけです。
試してみる
上記のシステムプロンプトを用意した上で、以下ようなユーザプロンプトを入力させます。
ユーザリクエストの入力文章を一覧化して
```kql
traces
| extend messageJson = parse_json(message)
| where messageJson.type == "input_message"
| project timestamp, UserInput=messageJson.message
```
いい感じです。ちょっと複雑なやつも問題なく動きます。
requestsテーブルのnameに /getadvicewsを含むデータのdurationと、\
同じoperation_Id をもつtracesテーブルのmessageから\
pararell_inputのtokenを一覧化してください。
なお、tokenで昇順にソートしてください。
**tokenは空の場合はその行はデータとして出力しないでください。**
```kql
requests
| where name contains "/getadvicews"
| project operation_Id, duration
| join kind=inner (
traces
| extend messageJson = parse_json(message)
| where messageJson.type == "pararell_input" and messageJson.token != ""
| project operation_Id, token = tostring(messageJson.token)
) on operation_Id
| project duration, token
| order by token asc
```
順番とか、場合によっては内容をちょっと変えたほうがいいkqlが生成されたりとかいくつかありましたが、おおむね80~90点以上のKQLは生成できているかと思います。(私が素で書くと落第します)
まとめ
この記事では、ChatGPTを使ってKQLクエリを生成する方法について紹介しました。生成AIを使うことで、複雑なクエリも効率的に生成できる感触をつかんでいただけたらなら幸いです。ただ精度はそれなりに高いものの、微修正が必要なケースはあったので、やはりKQLに関する基礎的な理解は不可欠ですね…このあたりはモデルが進化してもやりたいことを伝えるためにも変わらず必要になりそうですね