不想写 sql,花了两周多写了个 AI 生成 SQL 的网页项目 SQLWise,现已开源。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
IndieYe
V2EX    分享创造

不想写 sql,花了两周多写了个 AI 生成 SQL 的网页项目 SQLWise,现已开源。

  •  
  •   IndieYe 2024-12-10 12:52:04 +08:00 3406 次点击
    这是一个创建于 373 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开源地址

    https://github.com/IndieYe/sqlwise

    截图

    项目列表页面

    image

    项目页面

    image image image

    DDL 页面

    image

    文档页面

    image

    规则页面

    image

    设置页面

    image

    24 条回复    2024-12-11 19:09:30 +08:00
    GG668v26Fd55CP5W
        1
    GG668v26Fd55CP5W  
       2024-12-10 13:07:15 +08:00 via iPhone
    和我直接问 ChatGPT 相比有哪些优势?
    Configuration
        2
    Configuration  
       2024-12-10 13:07:38 +08:00   1
    有写 context 的时间,早就把 SQL 写出来了,而且更可靠
    IndieYe
        3
    IndieYe  
    OP
       2024-12-10 13:14:05 +08:00 via iPhone
    @falcon05 关键就是上下文的提供吧(提供相关的表跟列定义),现实中的数据库可能比较复杂,比如 1000 个表,一个表 100 字段,字段命名也不规范,甚至有自定义字段 1 之类的命名,那让 ai 如何推断?这个项目就是做了这些比较细致的活,根据提问,查询出相关的表跟列作为上下文,然后提问 ai
    IndieYe
        4
    IndieYe  
    OP
       2024-12-10 13:25:14 +08:00 via iPhone
    @Configuration 那就是手撸 sql ,不知道写的会不会比较累,我本来是想找个方式让写 sql 能有类似 cursor 写代码的自动提示体验,但实在找不到,所以做了这么个工具。
    功能是有用的,就是不知道是否足够方便
    npe
        5
    npe  
       2024-12-1 13:41:56 +08:00
    直接把 prompt 发出来更好吧
    Configuration
        6
    Configuration  
       2024-12-10 13:47:46 +08:00
    @IndieYe #4
    AI 写出来的你还是得话时间检查、验证。SQL 这种手到擒来的东西想不通为什么要 AI 写
    就你贴图中的例子而言,都是些简单的不能再简单的 SQL
    GG668v26Fd55CP5W
        7
    GG668v26Fd55CP5W  
       2024-12-10 13:53:23 +08:00 via iPhone
    @IndieYe 描述清楚的话是可以的,比如我最近有个项目起手就是这样问的:

    mariadb 有一个数据库,用于记录我的短链接网站相关记录和点击量,有两个表一个表是链接信息,表名为 ls_link ,有三个字段为 token 、remark 、 time ,其中 token 是链接的短名或缩略名如 3aysH ,431aa 等,remark 为用户给该记录标记的 title ,time 为添加时间,但使用 timestamp 的数字格式,如 1706687107 。

    另外一个表是记录链接被点击的信息,表名为 ls_query_log , 记录每次访问的用户信息,包含 ip 、访问时间等,关键字段为 token ,也就是前面 ls_link 表 token 的字段的值。

    现在我要使用 php 获取今年 6 月到今年 11 月每条链接的 remark, token 和点击数,并导出成 csv 在 excel 中查看
    Configuration
        8
    Configuration  
       2024-12-10 13:56:52 +08:00
    @falcon05 #7
    就一条 SQL 语句而已,你看你要喂这么一大段 context 给 AI ?你写着一大段 context 要多长时间?需不需要反复调整 context 两三次才能得出正确的 SQL ?
    GG668v26Fd55CP5W
        9
    GG668v26Fd55CP5W  
       2024-12-10 13:59:51 +08:00 via iPhone
    @Configuration 没办法我打字快,因为我用五笔,!打字的同时也是对逻辑的梳理,但 ai 写得比我快,而且会用一些 mysql 的特性。
    IndieYe
        10
    IndieYe  
    OP
       2024-12-10 14:07:20 +08:00
    @npe 每个任务步骤的 prompt 都能查看,比如这是生成 sql 的:

    ![image]( https://github.com/user-attachments/assets/c341c326-3df8-4213-b3ad-5a3ed4d26cf7)
    serco
        11
    serco  
       2024-12-10 14:15:33 +08:00
    IndieYe
        12
    IndieYe  
    OP
       2024-12-10 14:22:08 +08:00
    @serco 对的,参考了 vanna ,chat2db ,https://www.sqlai.ai/之类的项目网站。
    有几个区别:一个是细到列(考虑到可能一个表几百列,都作为上下文传给 AI 太耗 token 了);另一个是可以维护 AI 备注(就是另外一个备注字段,比如原数据库我们可能没权限为了 ai 生成方便而大量修改字段备注)。
    leonhao
        13
    leonhao  
       2024-12-10 14:24:20 +08:00   1
    Datagrip 的自动补齐功能就足够了,AI 生成的无法保证正确性,只能是玩具
    IndieYe
        14
    IndieYe  
    OP
       2024-12-10 14:24:25 +08:00
    @serco 另外不用 vanna 就是感觉 vanna 是面向开发者的,默认的网页端 UI 太丑太难用了,所以做了一个面向用户的直接可用的东西
    IndieYe
        15
    IndieYe  
    OP
       2024-12-10 14:30:57 +08:00
    @leonhao 我也用 datagrip 作为数据库客户端,的确好用,但手撸 sql 时只有补齐功能没有 AI 功能,用过几个 AI 插件,都不行,写 sql 时干扰太大,都卸了。好像也没搜到有专门给 datagrip 写的 ai 生成 sql 插件。

    所以为了提供准确的上下文,我思考了几个可能的来源:
    1. 表,列信息
    2. 文档信息
    3. 生成历史(想当于示例,生成类似的 sql 时会很精确)

    然后就尝试做了这么个工具,就是没想到会做这么久。
    serco
        16
    serco  
       2024-12-10 15:04:09 +08:00
    已经执行力很强了,才 2 周时间又不是全职在写。
    IndieYe
        17
    IndieYe  
    OP
       2024-12-10 15:07:41 +08:00
    @serco #16 主要是看很多文章教程里,其他人都 1 小时,1 天生成一个项目,不熟悉背后的技术细节,也没碰到任何问题,搞得我怀疑是不是我效率太低了或者用法有问题。
    serco
        18
    serco  
       2024-12-10 16:00:03 +08:00
    @IndieYe 总要吸引眼球的嘛。除非自己对如何实现或者产品细节了如指掌,不然基本不能指望快速生成且调试通过。
    idealhs
        19
    idealhs  
       2024-12-10 16:23:53 +08:00
    6, 不知道对于业务逻辑的理解能力怎么样。是否可以根据数据库的注释来判断业务逻辑,而不是仅仅根据列名表名?
    XTTX
        20
    XTTX  
       2024-12-10 19:51:02 +08:00
    IndieYe
        21
    IndieYe  
    OP
       2024-12-11 09:04:24 +08:00
    @idealhs 事实上这个工具只是去获取相关的表列,文档等信息,组成上下文后向 AI 提问,业务逻辑如果有,也是生成时靠 AI 判断。
    IndieYe
        22
    IndieYe  
    OP
       2024-12-11 09:08:13 +08:00
    @XTTX 看了下,这是根据提示词生成表结构,不一样的功能
    0x663
        23
    0x663  
       2024-12-11 17:01:16 +08:00
    能再加一个数据源连接管理工具和 sql 执行面板吗?感觉加上这两个更牛逼
    IndieYe
        24
    IndieYe  
    OP
       2024-12-11 19:09:30 +08:00
    @0x663 我先记下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     894 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:13 PVG 05:13 LAX 13:13 JFK 16:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86