3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPTにデータベースを扱わせてみる(プロトタイプ)

Posted at

概要

タイトル通り,ChatGPTにDBを扱わせたい.
理想的な最終目標としては,適当にデータを入れたらAIが整理してDB化してくれて,必要な時に出せる仕組み.
ほんとは機械学習の自動化みたいなことをしたかったけど,めっちゃむずいので保留中.

今回実装するもの

画像を置く

ChatGPTのAPIを用いて状況に応じた3通りの回答を生成してもらう.
また,それらはJson形式で出力する.

  1. 通常の回答
    そのままクライアントへ送信されます.
    例 : {type:"answer","message":"回答が入力されます."}
  2. DBのテーブル,カラム名の候補を列挙
    DBアクセスに必要な可能性のある情報を出力します.
    例 : {"type":"db_info","message":[users,members,id,user_id]}
  3. 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"}

実行結果

image.png

見ずらいので解答欄だけ.

image.png

ログ詳細 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接続時のユーザー権限設定を忘れてはいけない.

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?