概要
タイトル通り,ChatGPTにDBを扱わせたい.
理想的な最終目標としては,適当にデータを入れたらAIが整理してDB化してくれて,必要な時に出せる仕組み.
ほんとは機械学習の自動化みたいなことをしたかったけど,めっちゃむずいので保留中.
今回実装するもの
画像を置く
ChatGPTのAPIを用いて状況に応じた3通りの回答を生成してもらう.
また,それらはJson形式で出力する.
- 通常の回答
そのままクライアントへ送信されます.
例 : {type:"answer","message":"回答が入力されます."} - DBのテーブル,カラム名の候補を列挙
DBアクセスに必要な可能性のある情報を出力します.
例 : {"type":"db_info","message":[users,members,id,user_id]} - SQL文
SQL文を出力し,回答に必要なデータを取得します.
例 : {"type":"sql","message":"SELECT * from users"}
これを用いれば,ChatGPTに質問するだけで,SQL文を書かずに必要なデータを取得できます.
ChatGPT自身に情報を再検索させることが今回の肝
実際にやってみた.
- 全体画面 : ChatGPT4のMyGPTs Create a GPT を使用しています.
命令内容
Webサーバー上で管理しやすいようにJson形式の出力を要求する.
また,条件によって分岐できるように,タイプとメッセージの2つを出力させる.
プロンプト例
あなたの回答はJson形式で行い,3通り存在する.
1. 適切な回答
正解がわかる内容は,その通りに回答します.
例 :
{"type":"answer","message":"ここに回答が入る."}
2. DBにアクセスすべきかの判断
足りない情報を取得するために,DBへのアクセスを要求できます.
要求するために,テーブル名になりえる候補,必要なカラム名の候補を配列で出力する必要があります.
例 :
{"type":"db_info","message":[users,members,id,user_id]}
3. DBにアクセスするSQL文
DBから任意の情報を取得できます.
例 :
{"type":"sql","message":"SELECT * from users"}
実行結果
見ずらいので解答欄だけ.
ログ詳細
You こんにちはDBにアクセスできるChatGPT
{"type":"answer","message":"こんにちは!どのようにお手伝いしましょうか?"}
User
You
山田さんのIDを教えてください
DBにアクセスできるChatGPT
{"type":"db_info","message":["users","members","id","user_id","name"]}
User
You
山田さんのIDを教えてください
{"type":"db_info","message":["users","members","id","user_id","name"]}
DBにアクセスできるChatGPT
{"type":"sql","message":"SELECT id FROM users WHERE name = '山田'"}
User
You
山田さんのIDを教えてください
{"type":"db_info","message":["users","members","id","user_id","name"]}
id:21
DBにアクセスできるChatGPT
{"type":"answer","message":"山田さんのIDは21です。"}
このように必要な情報をChatGPT自身が取得してくることができる.
なお,id:21
は指定されたSQL文をDBに充てた場合の出力を想定.
今後の展望
Webサーバーにこの機能を実装し,データベースと連結させることによって,将来的にSQLやデータベース知識の必要ないデータ構築が可能になるはずだ!
Webサーバーへの実装時の注意点
-
例外処理を必ず書くこと
Json形式で出力と命じているが,100%その通りにしてくれるというわけではない.
失敗した場合の処理を考慮するべき. -
生成されたSQL文が正しいとは限らない.
理想は,SQLを実行してみて,その結果が確からしいかAIに判断してもらって,そのあとに初めてユーザーに返答する,みたいな流れがいいかと思う.
というか,作成したいデータごとにプロンプトを変えて実行するべき. -
SQL文がCREATE文やDELETE文を使用する可能性がある.
言わずもがな,DB接続時のユーザー権限設定を忘れてはいけない.