V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
IndieYe
V2EX  ›  分享创造

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

  •  
  •   IndieYe · 2 天前 · 2038 次点击

    开源地址

    https://github.com/IndieYe/sqlwise

    截图

    项目列表页面

    image

    项目页面

    image image image

    DDL 页面

    image

    文档页面

    image

    规则页面

    image

    设置页面

    image

    24 条回复    2024-12-11 19:09:30 +08:00
    falcon05
        1
    falcon05  
       2 天前 via iPhone
    和我直接问 ChatGPT 相比有哪些优势?
    Configuration
        2
    Configuration  
       2 天前   ❤️ 1
    有写 context 的时间,早就把 SQL 写出来了,而且更可靠
    IndieYe
        3
    IndieYe  
    OP
       2 天前 via iPhone
    @falcon05 关键就是上下文的提供吧(提供相关的表跟列定义),现实中的数据库可能比较复杂,比如 1000 个表,一个表 100 字段,字段命名也不规范,甚至有自定义字段 1 之类的命名,那让 ai 如何推断?这个项目就是做了这些比较细致的活,根据提问,查询出相关的表跟列作为上下文,然后提问 ai
    IndieYe
        4
    IndieYe  
    OP
       2 天前 via iPhone
    @Configuration 那就是手撸 sql ,不知道写的会不会比较累,我本来是想找个方式让写 sql 能有类似 cursor 写代码的自动提示体验,但实在找不到,所以做了这么个工具。
    功能是有用的,就是不知道是否足够方便
    npe
        5
    npe  
       2 天前
    直接把 prompt 发出来更好吧
    Configuration
        6
    Configuration  
       2 天前
    @IndieYe #4
    AI 写出来的你还是得话时间检查、验证。SQL 这种手到擒来的东西想不通为什么要 AI 写
    就你贴图中的例子而言,都是些简单的不能再简单的 SQL
    falcon05
        7
    falcon05  
       2 天前 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  
       2 天前
    @falcon05 #7
    就一条 SQL 语句而已,你看你要喂这么一大段 context 给 AI ?你写着一大段 context 要多长时间?需不需要反复调整 context 两三次才能得出正确的 SQL ?
    falcon05
        9
    falcon05  
       2 天前 via iPhone
    @Configuration 没办法我打字快,因为我用五笔,!打字的同时也是对逻辑的梳理,但 ai 写得比我快,而且会用一些 mysql 的特性。
    IndieYe
        10
    IndieYe  
    OP
       2 天前
    @npe 每个任务步骤的 prompt 都能查看,比如这是生成 sql 的:

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

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

    然后就尝试做了这么个工具,就是没想到会做这么久。
    serco
        16
    serco  
       2 天前
    已经执行力很强了,才 2 周时间又不是全职在写。
    IndieYe
        17
    IndieYe  
    OP
       2 天前
    @serco #16 主要是看很多文章教程里,其他人都 1 小时,1 天生成一个项目,不熟悉背后的技术细节,也没碰到任何问题,搞得我怀疑是不是我效率太低了或者用法有问题。
    serco
        18
    serco  
       2 天前
    @IndieYe 总要吸引眼球的嘛。除非自己对如何实现或者产品细节了如指掌,不然基本不能指望快速生成且调试通过。
    idealhs
        19
    idealhs  
       2 天前
    6, 不知道对于业务逻辑的理解能力怎么样。是否可以根据数据库的注释来判断业务逻辑,而不是仅仅根据列名表名?
    XTTX
        20
    XTTX  
       2 天前
    IndieYe
        21
    IndieYe  
    OP
       1 天前
    @idealhs 事实上这个工具只是去获取相关的表列,文档等信息,组成上下文后向 AI 提问,业务逻辑如果有,也是生成时靠 AI 判断。
    IndieYe
        22
    IndieYe  
    OP
       1 天前
    @XTTX 看了下,这是根据提示词生成表结构,不一样的功能
    0x663
        23
    0x663  
       1 天前
    能再加一个数据源连接管理工具和 sql 执行面板吗?感觉加上这两个更牛逼
    IndieYe
        24
    IndieYe  
    OP
       1 天前
    @0x663 我先记下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1049 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:29 · PVG 02:29 · LAX 10:29 · JFK 13:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.