![見出し画像](https://assets.st-note.com/production/uploads/images/170176941/rectangle_large_type_2_b78806d7093b625a1ad8874f977a5e4e.png?width=1200)
『話しかけてレコード作成』でkintoneの利用シーンを広げる
こんにちは、キン担ラボの本橋です。
![](https://assets.st-note.com/img/1736921398-dblTt4P60oseniODmEkZxJYF.png)
AIに話しかけたらkintoneアプリにいい感じに文字を入力したりドロップダウンを選んだりしてレコードを作ってもらおう、というカスタマイズを自分なりにもう一度やってみました。(2023年のkintone hackで披露したネタの高精度版です。)
概要としては自然文でChatGPTに話しかけて、kintone REST APIに適合するJSON Schemaを渡して、APIに渡すレコード登録用のJSONを作るという流れです。これができると、メールでもチャットでもあらゆる経路からkintoneレコードを登録できるようになります。
では見ていきましょう。
結果
せっかちな方のためにまずは結果から。
用意したkintoneアプリ
アプリストアにもある「日報」アプリを用意しました。デモ用にフィールドを少々いじっています。
![](https://assets.st-note.com/img/1736919702-uwaMAD3pRYl6WZs9cFUn0tkj.png?width=1200)
入力したプロンプト
メールで送ったりチャットで送ったり、音声入力したりするイメージのプロンプトです。
2025 年 1 がつ 10 日。営業の本橋です。本日は積雪のため徒歩で営業に回っています。神山町の営業先を中心に訪問しました。目標達成です。中心部だけでも徒歩で移動すると 2 時間ほどを要しました。バスで帰ります。
入力後のkintoneレコード
成功しました。ラジオボタンの目標達成度や、ドロップダウンの部署、日付や天気や所管にもそれぞれテキストが入っています。
![](https://assets.st-note.com/img/1736919658-moUx2736hfrwQNPLdEXzD5gt.png?width=1200)
いい感じに入力されましたね。レコードの作成には、以下の手順でAPI向けのJSONを生成して、それをkintoneREST APIにPOSTしました。手順を見ていきましょう。
準備
3つのファイルと、1つのツールが必要です。まずはプロンプトと、システムプロンプトと、JSONスキーマを用意しましょう。実験に使ったサンプルはこちらです。
プロンプト
想定しする文字入力部分そのままです。ここには何も工夫を入れません。フィールドの項目を意識して入力する、くらいでしょうか。
システムプロンプト
ドロップダウンやラジオボタンなどの選択肢はフィールドコードにアンダースコアでつなげてあらかじめ指定しておくというハックが入ってます。日付の形式やアプリIDもシステムプロンプトに書いてしまいました。
選択肢の与え方は他にもやりようがありそうな気がします。
JSONスキーマ
JSONスキーマは『このとおりのJSONを出力してね』とJSONの型を定義するための書式です。出力するJSONの形を決めてあげる型抜きの型のように使いましたが、JSONの検証にも使えます。
OpenAI APIにプロンプトを投げる
前回のnoteで紹介したChattyJSONにこの3つ組ファイルを渡して実行します。
それぞれ、以下のファイル名で保存した前提です。
system_prompt.md
prompt.md
schema.json
実行コマンドは以下の通り。
python ..\ChattyJSON\main.py --system_prompt_file .\system.md --schema_json .\schema.json --prompt_file .\prompt.md --output_file .\output.json
output.jsonファイルが出力されましたか?
{
"app": 514,
"record": {
"業務内容": {
"value": "営業の本橋です。本日は積雪のため徒歩で営業に回っています。神山町の営業先を中心に訪問しました。目標達成です。中心部だけでも徒歩で移動すると2時間ほどを要しました。バスで帰ります。"
},
"所管学び": {
"value": "本日は天候による移動方法の変更を経験しました。徒歩営業の際、時間管理と体力配分が重要であると感じました。"
},
"天気": {
"value": "積雪"
},
"日付": {
"value": "2025-01-10"
},
"部署_営業_マーケティング_総務_サポート_開発": {
"value": "営業"
},
"目標達成度_達成_未達": {
"value": "達成"
}
}
}
大丈夫そうですね。アプリIDもシステムプロンプトで指定した通りに入っています。
つぎにkintone REST APIに向けてこのJSONを投げます。
output.jsonをAPIにPOSTする
アプリにAPI Tokenを設定して、POSTします。curlやPOSTMANを使いましょう。
curl -X POST "https://monosus-dev.cybozu.com/k/v1/record.json" \
-H "X-Cybozu-API-Token: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{
"app": 514,
"record": {
"業務内容": {
"value": "営業の本橋です。本日は積雪のため徒歩で営業に回っています。神山町の営業先を中心に訪問しました。目標達成です。中心部だけでも徒歩で移動すると2時間ほどを要しました。バスで帰ります。"
},
"所管学び": {
"value": "本日は天候による移動方法の変更を経験しました。徒歩営業の際、時間管理と体力配分が重要であると感じました。"
},
"天気": {
"value": "積雪"
},
"日付": {
"value": "2025-01-10"
},
"部署_営業_マーケティング_総務_サポート_開発": {
"value": "営業"
},
"目標達成度_達成_未達": {
"value": "達成"
}
}
}'
成功すれば514番のアプリに新しいレコードが一つ増えているはずです。
もしかしたら部分的に適合しないJSONが出力されてしまい、APIが受け付けてくれないこともあるかもしれません。
そんな場合はエラーメッセージを見ながらSchemaを変更したり、ChattyJSONの中のOpenAI API呼び出し部分に手を加えて、temperetureやpresence_penaltyなどのパラメータを変更してみてください。
kintone側が受け付けてくれるJSONを安定して出力できるようになれば、『あらゆるアプリに話しかけて入力するUI』まであと一歩です。
夢が広がりますね!