數據庫ChatGPT插件來了,SQL使用體驗進一步起飛

語言: CN / TW / HK

簡介

基於 ChatGPT API 和 OpenMLDB 數據庫實現的 openmldb-chatgpt-plugin 項目開源了,作為人類迄今為止最強AI模型之一(GPT4未開放API),集成了 ChatGPT 模型的數據庫有多好用,下面將帶大家體驗一下。

原理

實現原理是在ChatGPT API基礎上做了一定的 Prompt engineering ,沒有用 fine tune ,在標準SQL場景上效果已經非常不錯,具體的 system prompt 設計大家可以看源碼實現。

這個插件對於其他 SQL 數據庫理論上也適用,不過因為加了一些直接查詢數據庫內容的集成功能,目前還是推薦使用 OpenMLDB 。使用時需要全程聯網,並且需要 OpenAI API key 和特定的網絡條件,暫無條件的可以直接看下面的 Prompt 演示效果。

指令演示

自然語言對話能力

openmldb-chatgpt-plugin(後文簡稱 GPT 插件)有 ChatGPT 本身的自然語言對話能力,可以直接在客户端用中英文來詢問數據庫的基本用法以及特定SQL語法的介紹,這部分不需要特別的 prompt 優化,只是比 ChatGPT 網頁版減少需要打開瀏覽器提問的步驟。

並且得益於多輪對話的實現,用户可以根據上下文提問,相比傳統搜索引擎找到需要的資料效率進一步提高。默認中文輸出對國內用户也更加友好。

SQL執行、分析與推薦

用户在 GPT 插件執行的 SQL 代碼,實際也會提交到 OpenMLDB 集羣執行,並且用户輸入( User > )、數據庫輸出( OpenMLDB > )和 GPT 模型輸出( GTP > )都會有不同的前綴和顏色區分。

上圖處理按照用户命令執行 SQL 外,還對上表的 SQL 語句進行了概要分析,介紹這個表的名字,以及每一列的類型以及含義,最後還推薦使用 Insert 和 Select 語句進行插入和查詢,這就是對 ChatGPT 模型使用 Prompt 工程實現的執行、分析與推薦功能。

後面無論是 Insert 語句還是其他 SQL 語句,在執行後都會經過 AI 模型的解析與推薦,在執行 SQL 過程中不自覺學到了更多知識。這裏也有些 Prompt 工程技巧,如果不希望每次推薦的內容接近,可以通過 temperature 參數控制文本生成的“探索性”。

複雜表分析

對於用户創建的一個列較多稍微複雜對錶,GPT 插件也會適時地進行數據分析,除了簡單統計列數和 Schema 等基礎功能,它還會根據表名和列名信息進一步發掘內容,對原始數據表列的含義分析得清清楚楚。例如下面的表中,“乘客上下車時間”、“上下車地點的經緯度”等信息都可以分析和翻譯出來,在沒有額外信息收集和編程實現的基礎上提供這些信息對數據科學家來説也是一種饋贈。

失敗SQL調試和更正

前面例子展示的是能夠成功執行的 SQL ,對於用户已經編寫沒有語法錯誤的 SQL 進行分析只是“錦上添花”,但如果可以快速幫助用户解決執行失敗的 SQL 那才是“雪中送炭”。通過 SQL 語句本身以及 OpenMLDB 提供的錯誤信息,ChatGPT 模型顯然是具備這種 SQL 調試以及 SQL 更正的能力。

上面是一個 SQL 語法正確但類型錯誤的情況,對於有經驗的 SQL 工程師通過錯誤信息也許能猜測出錯誤的端倪,但能夠以自然語言的形式並且無比正確地直接告訴用户錯誤地方以及後續的更正方案,從我個人測試的多個場景來看,這個能夠 7*24 小時工作的工具已經可以媲美身邊高級的 DBA 了。

複雜SQL分析能力

下面是 OpenMLDB 官方文檔的一個例子,使用 SQL 進行時許特徵的抽取並且保存樣本文件。

首先 ChatGPT 模型解析的 SQL 語義毫無問題,但更令人驚訝的是,因為這個 SQL 語法確實不是在所有 SQL 都支持的,這裏最後面補充的注意事項充分表明”定製化“模型與通用閒聊機器人的區別。本插件提供的 SQL 解析能力都是建立在使用 OpenMLDB 數據庫的基礎上,對於非通用 SQL 能夠解析並且講清楚與標準 SQL 的區別,目前恐怕除了數據庫的核心研發和深度用户也很少人可以“理解”清楚。

數據庫內容查詢

前面演示的功能主要是 text to sql、SQL 分析等功能,放在 ChatGPT 網頁端或者任意公開的 ChatGPT 服務上都可以做,但 OpenMLDB ChatGPT 插件還是做了內容的深度整合,可以以自然語言的形式來查詢數據庫的內容。

這裏還演示了 ChatGPT 無比優秀的連續對話能力,可以以不同粒度、不同角度多次按需查詢,查到的內容不僅正確,而且還根據中文語義進一步豐富了內容,格式也工整,可以很容易讓它輸出我們需要的 CSV 或者任意格式,這是程序員人工寫代碼無論如何都達不到的效率。

總結

實際上 ChatGPT 插件很多的功能代碼也是基於 ChatGPT 模型生成的,雖然不能直接按照個人需要實現整個數據庫插件,但它強大的代碼搜索和生成能力已經可以簡化我們大量搜索學習時間,而基於歷史積累的海量 SQL 文獻,它的專業能力更是可以得到程序員甚至資深 DBA 的認可。

除了上面的 Prompt 提示詞和功能演示,ChatGPT 模型還有非常多可玩、易用、高效的用法等待大家去挖掘。