使用ChatGPT API将Excel文件转换为SQL表格

ChatGPT中文站

我将通过探索LangChain的不同方面来开始我的人工智能之旅。这个小项目是使用人工智能构建各种工具的一个良好开端。

本文将向我们展示如何将大型语言模型(LLMs)应用于我们的用途。我想到了一个非常简单的案例:“我将如何使用LLMs将Excel电子表格中的数据放入数据库表中?”我知道有很多方法可以做到这一点,但我很好奇ChatGPT API将如何应对这种情况。

先决条件

我们将使用Python 3.11版本与LangChain和ChatGPT API。为此,我们在命令提示符中创建了一个Anaconda环境。

conda create -n excel_to_sql python=3.11
activate excel_to_sql

要设置项目,请使用Poetry。要安装Poetry,请使用以下命令。

pip install poetry

开始项目

poetry init
poetry install

将创建一个 ‘pyproject.toml’ 和一个 poetry.lock 文件,其中将包含所有已安装的依赖项。

数据库连接

首先,需要建立数据库连接以在数据库中创建表。我通过使用数据库URI在Python中创建了这个连接。

将所有机密信息和配置存放在.env文件中 —— 数据库连接信息,API密钥等。

#Database connection
dbname = os.getenv("DB_NAME")
user = os.getenv("USER")
password = os.getenv("PWD")
host = os.getenv("HOST")
port = os.getenv("PORT")
conn = psycopg2.connect(dbname=dbname, user=user, password=password, host=host, port=port)

使用ChatGPT API生成Python代码

其次,我需要找到一种方法来上传和读取Excel电子表格的内容。这就是ChatGPT API发挥作用的地方。我知道这可能是一个LLM能够解决的问题,所以我建立了一个“模板”,它将帮助我创建“提示”。

我使用的模板看起来像这样:

system_template_python_coder_load = """You are an expert Python programmer who produces detailed and well documented code."""
human_template_python_coder_load = """ Please generate Python Code to Load {excel} sheet into the {db} by creating a table with this name : {table_name}
Use the database connection as mentioned."""

提示使用上述模板创建引导性回答。

def prompt_factory(system_template, human_template):
system_message_prompt = SystemMessagePromptTemplate.from_template(template= system_template)
human_message_prompt = HumanMessagePromptTemplate.from_template(template= human_template)
chat_prompt = ChatPromptTemplate.from_messages(messages)
return chat_prompt

此提示将通过LLM链传递以获取输出。生成的输出将与模板中的用户请求对应。在这种情况下,输出将是一个Python代码,用于从Excel电子表格加载数据并使用数据库连接创建表并插入值。

Python代码执行

一旦我们获得代码,我们需要执行它以完成项目的目标。

我创建了一个名为“Python Executor”的函数。生成的代码将被写入一个以‘.py’扩展名保存的文件中。然后使用Python的‘exec()’函数来执行这个.py文件。为了检查代码是否执行,使用了Python提供的错误处理(try,except)功能。

代码看起来像这样。

async def python_executor(code):
python_executor_dir = cfg.python_executor

if not python_executor_dir.exists():
python_executor_dir.mkdir(exist_ok=True, parents=True)

executor_path = python_executor_dir / f"code_execution.py"
with open(executor_path, 'w') as f:
f.write(code)
try:
exec(open(executor_path).read())
succesful_msg = "successful execution"
logger.info(succesful_msg)
return succesful_msg
except:
error_msg = "execution failed"
logger.exception(error_msg)
return error_msg

如果表在数据库中创建成功,则返回一个正面的响应。否则,输出一个错误消息。执行文件在每次运行项目时都会被覆盖。

创建用户界面

我使用Chainlit工具来创建了一个聊天机器人。这使得获得类似ChatGPT接口的功能变得简单。助手向用户索要一个Excel文件(.xlsx)。用户可以浏览并从他们的计算机中选择该文件。

在使用工具之前,请确保数据库服务器已经开启。

ChatGPT中文站

Bot请求输入新表的名称。如果成功创建表,则会显示一个成功消息。

ChatGPT中文站

检查数据库中是否创建了表格,并且插入了数据。

项目流程图

该项目流程图将简明扼要地展示该工具的功能。

ChatGPT中文站

该项目可以在GitHub上查看。

结论

LangChain LLM链条强大到足以根据用户需求生成Python代码。LangChain提供了许多组件,用于制作不同类型的工具。

2023-10-20 17:15:35 AI中文站翻译自原文