译者 | 李睿
审校 | 重楼
如今,得益于ChatGPT这种生成式人工智能技术,使得用简单的语句查询数据集变得非常简单。
与大多数生成式人工智能一样,OpenAI公司开发的API的结果仍然不完美,这意味着用户不能完全信任它们。幸运的是,用户现在可以编写代码来询问GPT如何计算响应,如果采用这种方法,用户可以自己运行代码。这意味着用户可以使用自然语言询问ChatGPT一些问题,例如,“某产品去年各地区的总销售额是多少?”,并对ChatGPT的回答准确性充满信心。
以下是使用GPT为数据库设置自然语言查询的一种快速而简单的技术:
- 将数据的结构、几个示例行或两者都放入单个文本字符串中。
- 用这些信息加上采用自然语言提出的问题,为GPT制作一个“提示”。
- 将提示发送到OpenAI的GPT-3.5-turbo API ,并请求SQL查询来回答问题。
- 运行返回到数据集的SQL来计算答案。
- (可选)创建一个交互式应用程序,使查询数据集变得简单。
在处理实际数据时,这种方法有几个优点。通过只发送数据结构和一些示例行(其中可能包括假数据),不需要向GPT发送实际的敏感数据。如果数据规模太大,超出了GPT的提示大小限制,也不用担心。并且,通过请求SQL而不是最终答案,检查GPT如何生成其答案的能力被嵌入到流程中。
面向企业查询的生成式人工智能
如果用户真的想使用生成式人工智能来开发企业级查询,可能想要研究像LangChain这样的工具,它是一个用于处理多种不同大型语言模型(LLM)的框架,而不仅仅是OpenAI公司的GPT。OpenAI公司最近还宣布了在API请求中包含函数调用的可能性,其目的是使查询和类似的任务更容易、更可靠。但对于快速原型或自己使用,这里描述的过程是一种简单的开始方法。这里的演示是用R语言完成的,但这种技术可以在任何编程语言中使用。
步骤1:将示例数据转换为单字符字符串
这一步骤中的示例数据可以包括数据库模式或几行数据。将其全部转换为单个字符串非常重要,因为它将成为将发送到GPT 3.5的更大的文本字符串查询的一部分。
如果用户的数据已经在SQL数据库中,那么这一步非常简单。如果不是,建议将其转换为SQL可查询的格式。为什么?在测试了R语言和SQL代码结果之后,用户对GPT生成的SQL代码比它的R语言代码更有信心。
在R语言的代码中,sqldf包允许用户在R数据帧上运行SQL查询,这就是在本例中使用的。Python中也有一个类似的sqldf库。对于性能很重要的大型数据,可能需要查看duckdb项目。
需要注意的是,在这个演示中,将使用一个包含美国人口普查州人口数据的CSV文件,可以在states.csv中找到。
下面的代码将数据文件导入R语言,使用sqldf查看数据框架是SQL数据库表时的SQL模式,使用dplyr的filter()函数提取三个示例行,并将模式和示例行都转换为字符串。免责声明:ChatGPT编写了将数据转换为单个字符串的基本R apply()部分代码(通常使用purrr完成这些任务)。
library(rio)
library(dplyr)
library(sqldf)
library(glue)
states <- rio::import("https://raw.githubusercontent.com/smach/SampleData/main/states.csv") |>
filter(!is.na(Region))
states_schema <- sqldf("PRAGMA table_info(states)")
states_schema_string <- paste(apply(states_schema, 1, paste, collapse = "\t"), collapse = "\n")
states_sample <- dplyr::sample_n(states, 3)
states_sample_string <- paste(apply(states_sample, 1, paste, collapse = "\t"), collapse = "\n")
分享说明:转发分享请注明出处。