当前位置: 首页 > news >正文

从零开始的 Hugging Face 项目:我的首个在线 SQL 查询工具之旅20241111

从零开始的 Hugging Face 项目:我的首个在线 SQL 查询工具之旅

作为一名 AI 初学者,我最近完成了一个意义非凡的项目:在 Hugging Face Spaces 上构建了一个简单却实用的在线 SQL 查询工具。这个项目不仅让我了解了 Hugging Face 平台的核心功能,还让我初次尝试了将 Pandas 和 SQL 结合进行数据模拟的技术实践。本文将分享我的项目开发经历、技术实现细节以及个人的心得体会,希望能为更多初学者提供灵感和参考。

一、项目背景:从自然语言到 SQL 查询

AI 领域的自然语言处理(NLP)近年来取得了飞速发展,其中一个重要的应用场景就是自然语言转 SQL(NL2SQL)。这一技术可以让非技术用户通过自然语言与数据库进行交互,比如用一句话查询商品库存或统计销售额。

但对于刚接触 Hugging Face 的初学者来说,直接部署一个高效的 NL2SQL 工具可能过于复杂。因此,我的目标是搭建一个简单的在线工具,用 Pandas 模拟数据库,结合 SQL 查询功能,为后续的复杂项目奠定基础。

二、核心技术与平台选择

1. 为什么选择 Hugging Face Spaces

  • 简单易用:Hugging Face Spaces 提供了免费运行环境,支持 Gradio 和 Streamlit 等快速开发工具。
  • 在线共享:生成公共链接后,其他人无需安装任何依赖,只需访问链接即可体验应用。
  • 初学者友好:适合小型项目的部署和快速测试。

2. Pandas 与 SQL 的结合

为了避免公开真实数据库带来的安全问题,我决定用 Pandas 模拟数据库表,并通过 pandasql 库提供 SQL 查询功能。这种方法轻量化且灵活,适合初学者快速上手。

三、技术实现:从数据模拟到在线工具

以下是项目实现的关键步骤和技术细节:

1. 数据准备:模拟数据库表

我使用 Pandas 创建了四个模拟表:products、orders、customers 和 order_items。这些表覆盖了常见的数据类型和关系,比如商品信息、订单详情和客户数据。

import pandas as pd#模拟 products 表
products = pd.DataFrame({"product_id": [1, 2, 3, 4, 5],"name": ["iPhone 14", "Galaxy S22", "Sony WH-1000XM5", "MacBook Pro", "Echo Dot"],"category": ["Electronics", "Electronics", "Audio", "Computers", "Smart Home"],"price": [799.99, 699.99, 399.99, 1999.99, 49.99],"stock": [50, 40, 30, 20, 70]
})

2. SQL 查询:结合 PandasSQL

借助 pandasql 库,可以对 Pandas 数据帧执行 SQL 查询。例如,以下代码查询价格大于 500 的商品:

from pandasql import sqldfquery = "SELECT name, price FROM products WHERE price > 500;"
result = sqldf(query, {"products": products})
print(result)

3. 构建在线工具:Gradio 与 Hugging Face Spaces

Gradio 是一个强大的 Python 库,用于快速构建交互式用户界面。我用 Gradio 将 SQL 查询功能封装成一个简单的 Web 界面:

import gradio as grdef query_to_sql(sql_query):try:result = sqldf(sql_query, {"products": products})return result.to_string(index=False)except Exception as e:return f"Error: {str(e)}"interface = gr.Interface(fn=query_to_sql,inputs="text",outputs="text",title="SQL Query Simulator",description="输入 SQL 查询语句,模拟查询结果。"
)
interface.launch()

4.完整app.py

import gradio as gr
import pandas as pd
from pandasql import sqldf# 模拟数据库表
products = pd.DataFrame({"product_id": [1, 2, 3, 4, 5],"name": ["iPhone 14", "Galaxy S22", "Sony WH-1000XM5", "MacBook Pro", "Echo Dot"],"category": ["Electronics", "Electronics", "Audio", "Computers", "Smart Home"],"price": [799.99, 699.99, 399.99, 1999.99, 49.99],"stock": [50, 40, 30, 20, 70]
})orders = pd.DataFrame({"order_id": [1, 2, 3],"order_number": ["ORD001", "ORD002", "ORD003"],"customer_id": [1, 2, 3],"total_amount": [1599.98, 699.99, 399.99],"status": ["PAID", "PAID", "PENDING"]
})customers = pd.DataFrame({"customer_id": [1, 2, 3],"name": ["Alice", "Bob", "Charlie"],"email": ["alice@example.com", "bob@example.com", "charlie@example.com"],"phone": ["1234567890", "2345678901", "3456789012"]
})order_items = pd.DataFrame({"order_item_id": [1, 2, 3],"order_id": [1, 2, 3],"product_id": [1, 2, 3],"quantity": [2, 1, 1],"subtotal": [1599.98, 699.99, 399.99]
})# 定义查询函数
def query_to_sql(sql_query):try:# 将 Pandas 数据帧作为 SQL 查询的上下文context = {"products": products,"orders": orders,"customers": customers,"order_items": order_items}result = sqldf(sql_query, context)return result.to_string(index=False)  # 返回查询结果except Exception as e:return f"Error: {str(e)}"# 创建 Gradio 界面
interface = gr.Interface(fn=query_to_sql,inputs="text",outputs="text",title="SQL Query Simulator",description="输入 SQL 查询语句,模拟查询结果。"
)# 启动应用
interface.launch()

四、部署与调试:从本地到云端

1. 创建 Hugging Face Space

在 Hugging Face 平台创建一个新的 Space,选择 Gradio 作为框架,并上传以下文件:
• app.py:主程序代码。
• requirements.txt:依赖列表(如 pandas、pandasql、gradio)。

2. 调试常见问题

  • 依赖未安装:确保 requirements.txt 列出了所有依赖项。
  • 表不存在错误:明确将 Pandas 数据帧作为 SQL 查询上下文传递。

3. 成功部署

部署完成后,访问生成的公共链接,输入如下查询验证工具是否正常运行:

SELECT name, price FROM products WHERE price > 500;
预期输出:name    priceiPhone 14   799.99Galaxy S22   699.99
MacBook Pro 1999.99

五、项目心得:技术与思考的结合

1. 从问题中学习

在项目开发中,我遇到了多次错误,比如表不存在或依赖冲突。但每次调试都是深入理解技术的机会,让我更熟悉 Pandas 和 Hugging Face 平台的工作原理。

2. 初学者的适用场景

对于和我一样刚接触 AI 的初学者,这种结合 Pandas 和 SQL 的轻量级实现,不仅是 NL2SQL 的一个入门实践,还为后续部署更复杂的模型(如 Hugging Face 的 text-to-sql 模型)奠定了基础。

3. 技术之外的收获

这个项目不仅让我掌握了技术,还让我体验到将工具分享给同学时的那种成就感和满足感。

六、未来展望:从简单到复杂的进阶之路

1. 集成 Hugging Face 模型:

下一步,我计划引入 Hugging Face 的 text-to-sql 模型,将自然语言转 SQL 功能与现有系统结合。

2. 支持复杂查询:

增强查询功能,例如支持聚合、分组或多表联结。

3. 用户体验优化:

提供更友好的用户界面,支持结果导出和样例查询。

结语

这次项目是我在 Hugging Face 平台上的起点,也是我 AI 旅程的一个里程碑。从零开始构建一个可用的在线工具,这种成就感让我对未来充满期待。希望我的分享能为更多初学者带来启发,一起探索 AI 世界的无限可能。

让我们在技术的旅途中共同成长! 😊欢迎评论与分享!

相关文章:

从零开始的 Hugging Face 项目:我的首个在线 SQL 查询工具之旅20241111

从零开始的 Hugging Face 项目:我的首个在线 SQL 查询工具之旅 作为一名 AI 初学者,我最近完成了一个意义非凡的项目:在 Hugging Face Spaces 上构建了一个简单却实用的在线 SQL 查询工具。这个项目不仅让我了解了 Hugging Face 平台的核心功…...

让AI为你发声!Windows电脑快速部署ChatTTS文本转语音神器

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 嘿,朋友们!今天我们来聊聊如何在Windows系统上快速搭建ChatTTS,一个超酷的开源文本转语音项目。更棒的是,我们还可以用Cp…...

【AI换脸整合包及教程】FaceFusion 3.0.0:AI换脸技术的革新之旅

在人工智能技术的飞速发展中,AI换脸技术成为了近年来备受瞩目的焦点之一。FaceFusion 3.0.0,作为这一领域的最新力作,不仅继承了前代产品的优点,还在功能和用户体验上进行了全面升级和优化,为用户带来了前所未有的换脸…...

更新对象或数组的值的方法

一、数组的映射或更新 map(): 用于创建一个新数组,数组中的每个元素是对原数组元素执行函数后的结果。 const arr [1, 2, 3]; const newArr arr.map(item > item * 2); // [2, 4, 6]forEach(): 用于遍历数组,对每个元素执行操作,但不返…...

Java线程池浅谈(创建线程池及线程池任务处理)

1-认识线程池 什么是线程池? 线程池就是一个可以复用线程的技术。 不使用线程池的问题 比方说淘宝,不使用线程池,现在有一亿个线程同时进来,CPU就爆了。用户每发起一个请求,后台就需要创建一个新线程来处理&#xf…...

Dockerfile的使用

简介 制作docker镜像可以通过修改容器的方式,也通过通过Dockerfile文件的方式,下面通过Dockerfile文件的例子进行说明。 Dockerfile文件 FROM openjdk:8-alpine#ENV http_proxy http://127.0.0.1:7890 #ENV https_proxy http://127.0.0.1:7890#ENV TZ…...

自動換IP為什麼會不穩定?

自動換IP可能導致不穩定的原因有以下幾點: 1. 連接中斷 自動換IP的一個直接後果就是連接中斷。每當IP地址發生變化時,網路連接可能會短暫中斷。這就像你在搬家時,暫時無法接收郵件一樣。對於需要持續連接的任務,比如視頻會議或線…...

【0x0043】HCI_Write_Inquiry_Scan_Type详解

目录 一、命令概述 二、命令格式及参数说明 2.1. HCI_Write_Inquiry_Scan_Type命令格式 2.2. Scan_Type 2.3.具体格式示例 三、响应事件及参数说明 3.1. HCI_Command_Complete事件 3.2. Status 四、命令执行流程 4.1. 命令准备阶段 4.2. 命令传输阶段 4.3. 命令处理…...

飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 本文旨在详细介绍如何在飞牛云NAS上利用Docker部署WordPress&a…...

ctfshow-web入门-SSTI(web361-web368)上

目录 1、web361 2、web362 3、web363 4、web364 5、web365 6、web366 7、web367 8、web368 1、web361 测试一下存在 SSTI 注入 方法很多 (1)使用子类可以直接调用的函数来打 payload1: ?name{{.__class__.__base__.__subclasses__…...

pyinstaller+upx给python GUI程序添加自定义图标

一、在线.ico图标生成 windows用48x48尺寸 https://www.ico51.cn/ 二、upx打包图标工具 https://upx.github.io/ 三、UI文件生成py代码 pyside2-uic window.ui > window.py 四、打包命令 1、–icon:这个是.ico图标路径 2、–upx-dir:upx打包工…...

LeetCode【0034】在排序数组中查找元素的第一个和最后一个位置

本文目录 1 中文题目2 求解方法:左右边界二分查找2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 给定一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存…...

react-markdown内容宽度溢出和换行不生效问题

情景复现: 解决办法,添加样式进行限制 /* index.css */ .markdown-container {word-break: break-word; /* 强制长单词断行 */white-space: pre-wrap; /* 保留空白符序列,但是正常地进行换行 */overflow-wrap: break-word; /* 在长单词或…...

uniapp 上传 base64 图片

在图片裁剪时候返回的是base64文件 需要上传到obs一般出现在h5网页端 可以直接使用 js 原始解决 应该只可以在h5浏览器内使用 // 提取 Base64 编码部分 const base64Data e.tempFilePath.replace(/^data:image\/(\w);base64,/, ""); // 将 Base64 编码转换为 Arra…...

让Git走代理

有时候idea提交代码或者从github拉取代码,一直报错超时或者:Recv failure: Connection was reset,下面记录一下怎么让git走代理从而访问到github。 1.打开梯子 2.打开网络和Internet设置 3.设置代理 记住这个地址和端口 4.打开git bash终端 输入以下内容 git c…...

通义千问API调用测试 (colab-python,vue)

文章目录 代码(来自官网)colab中用python测试Qwen2.5在官网上查看并确定过期时间这里看到我的免费额度到25年5月在同一个页面,点击API示例 前端调用直接在前端调用的优缺点以vue为例(代码是基于官网node.js的代码转换而来&#xf…...

H3C ER8300G2-X未授权导致信息泄露漏洞(CVE-2024-32238)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

随手记:简单实现纯前端文件导出(XLSX)

1.需求背景: 由于导入需要经过后端存储数据库,所以导入还是和后端联调 但是简单的前端导出有部分是可以直接给到用户 xlsx插件简介 xlsx插件(通常指的是SheetJS/js-xlsx)是一个强大的JavaScript库,它允许你在浏览器…...

SwiftUI 高级开发教程系列 - 第 3 章:数据持久化

在现代应用中,数据持久化是一项非常重要的功能,它使得应用的数据可以在重启后依然保留,提升用户体验。SwiftUI 提供了多种数据持久化方法,包括使用 UserDefaults 保存简单数据和 Core Data 进行更复杂的数据管理。本章将详细讲解这两种技术的用法,并展示如何在 SwiftUI 项…...

代码随想录第二十四天| 93.复原IP地址 78.子集 90.子集II

93. 复原IP地址 题目描述 给定一个只包含数字的字符串 s,复原它并返回所有可能的有效 IP 地址格式。 一个有效的 IP 地址 由四个整数部分组成,每部分的取值范围是 0-255,每个部分不能包含前导零。 解题思路 这道题目要求我们将一个数字字…...

Linux编程:基于 Unix Domain Socket 的进程/线程间通信实时性优化

文章目录 0. 引言1. 使用 epoll 边缘触发模式非不要不选择阻塞模式边缘触发(ET)模式优点示例 2. 使用实时调度策略3. CPU 绑定4. 使用无锁缓冲区5. 优化消息传递的大小和频率6. 使用 SO_RCVTIMEO 和 SO_SNDTIMEO7. 示例代码其他阅读 0. 引言 前几天被问…...

PET-文件包含-FINISHED

include发生错误报warning,继续执行。require发生错误直接error,不继续执行 无视扩展名,只要能解析,就能当可执行文件执行,哪怕文件后缀或没后缀 1 条件竞争 pass17 只需要知道tmp的路径。把xieshell.jpg上传&…...

《WebGL编程指南》书籍分享

在这个数字化时代,WebGL作为一门前沿的图形渲染技术,为网页带来了前所未有的交互体验。今天,我很荣幸向大家分享一本关于学习WebGL的书籍——《Webgl编程指南》 电子版下载链接: https://pan.baidu.com/s/1eTX2Y5ynYH0pUQRf0Jcbow?...

go T 泛型

目录 1、类型约束 2、泛型函数 3、泛型结构体 4、泛型接口 5、以接口作为类型约束 关键词:泛型、类型参数、类型约束 Go 语言在 1.18 版本引入了泛型(Generics)特性,可以编写更通用、可复用的代码,泛型可以用于&a…...

React的基础API介绍(二)

目录 useStateuseState 的基本原理1. 状态在函数组件中的引入2. useState 的工作机制3. Hook 状态与组件渲染 useState 的使用方法1. 基本用法2. 多个状态变量3. 更新状态 注意事项与最佳实践1. 状态更新可能是异步的2. 不要直接修改状态3. 更新对象或数组状态4. 避免闭包陷阱 …...

远程开发测试必看:如何在群晖NAS上运行网页版Ubuntu

文章目录 前言1. 下载Docker-Webtop镜像2. 运行Docker-Webtop镜像3. 本地访问网页版Linux系统4. 群晖NAS安装Cpolar工具5. 配置异地访问Linux系统6. 异地远程访问Linux系统7. 固定异地访问的公网地址 前言 本文将详细讲解如何在群晖NAS上部署docker-webtop,并利用c…...

JAVA题目笔记(十五)经典算法题

一、按要求排序 要求:定义数组并存储一些女朋友对象,利用Arrays中的sort方法进行排序 属性包括:姓名,年龄,身高 按照年龄大小进行排序,年龄一样按照身高排序,身高一样按照姓名字母进行排序。…...

「Mac玩转仓颉内测版8」入门篇8 - Cangjie函数与方法

本篇介绍Cangjie编程语言中的函数与方法,帮助理解如何通过函数封装重复操作,提升代码的复用性和可维护性。 关键词 Cangjie函数方法定义参数传递返回值模块化与复用性 一、什么是函数? 函数是一个代码块,用于接收参数、执行操作…...

2024最新版JavaScript逆向爬虫教程-------基础篇之Proxy与Reflect详解

目录 一、监听对象的操作二、Proxy基本使用2.1 创建空代理2.2 定义捕获器2.2.1 Proxy的set和get捕获器2.2.2 Proxy(handler)的13个捕获器 三、Reflect的作用3.1 Reflect的使用3.2 Reflect其余方法(9个)3.3 Proxy与Reflect中的receiver参数3.4 Reflect中的construct方法 ECMAScr…...

代码修改材质参数

1、 如何得到对象使用的材质 获取到对象的渲染器Renderer Mesh Renderer和Skinned Mesh Renderer都继承Renderer,可以用里式替换原则父类获取、装载子类对象 通过渲染器获取到对应材质 可以利用渲染器中的material或者sharedMaterial来获取物体的材质&#xff0…...