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

我写了一个工具,能在 chatGPT 帮助下为任意 CLI 生成 fish 的参数自动补全文件

  •  
  •   werifu · 2023-03-12 15:26:37 +08:00 · 1129 次点击
    这是一个创建于 383 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先上链接: https://github.com/werifu/complish

    应用场景

    参数补全:你在 shell 里输入命令后,按 Tab 键可以给你列出的子命令或者参数候选项,如下图

    非常知名的 CLI 一般都会自带补全,但是很多 CLI 开发者并不提供该 CLI 在各种 shell 下的补全,每次使用的时候如果忘记参数了又要重新执行 cmd --help 去看帮助,非常影响体验。能够简单地为所有 CLI 生成补全的话就可以解决这个问题,如上图的补全就是由 complish 实现的,croc 的作者并没有提供。

    原理

    各个 shell ( bash 、zsh 、fish 、powershell )等都支持 completion 的语法,允许为命令增加自定义的参数补全,但是各家的语法并不相通,因此我只做了我用的 fish 版本,同时也相当于安利 fish 了吧: https://fishshell.com/😄

    原理其实很简单,就是程序里靠执行 cmd --help 得到 help page 的文本,分析文本然后按 completion 语法去生成对应的 completion 脚本。然而难点在于 help page 并没有统一的规范,不同的框架、不同的语言都有不一样的写法,写出来的 help page 没有统一的严格结构,很难解析,因此 chatGPT 的出现真的是这个问题的救星,喂入 help page 的文本,生成一个该 help page 的结构化 json ,我就能很轻松地解析并生成补全文件。

    我相信 chatGPT 拥有的 text to structure 的能力能很大程度改善生产生活的体验,这只是一个很小的应用场景

    短板

    • 解析速度取决于 openai 的接口返回速度,同时因为 openai 的接口频率限制,接口调用失败是大概率会出现的,因此代码中做了重试处理,也会影响时间。个人体验:只有几个参数的 CLI 大概 10 秒内完成解析,好几十个参数的可能超过 30 秒,只有一层子命令的一般会在一分钟内完成。
    • 有些 CLI 的 help page 实在太长,chatGPT 吃不下。比如统计代码行数的 cloc 工具就会超出限制,因为有超过 400 行、6k+字符的 help……目前还没解决,但是绝大多数的情况下是 ok 的。

    欢迎大家来使用体验!如果觉得好还请给个 ⭐️

    第 1 条附言  ·  364 天前

    3.30 更新:

    我增加了对 zsh 的支持,现在 CLI 也可以生成 zsh 下的补全文件了!

    未来还可能增加对 bash 的补全,但是觉得还能忍受 bash 的人或许不太需要这个……如果有需要可以在这留个言

    6 条回复    2023-03-30 22:15:49 +08:00
    xiebruce
        1
    xiebruce  
       2023-03-12 15:57:31 +08:00
    别提了,我今天服务器 ip 刚被封(就是通过我服务器上 chatgtp ,显示 access denied)
    werifu
        2
    werifu  
    OP
       2023-03-12 16:58:03 +08:00
    @xiebruce 为什么呀,因为服务器在非 openai 服务的范围吗
    dayeye2006199
        3
    dayeye2006199  
       2023-03-13 01:17:37 +08:00 via Android
    这个真不错,是个很好的主意。文本过长的问题看看 langchain 能否解决?
    xiebruce
        4
    xiebruce  
       2023-03-14 14:44:33 +08:00
    @werifu 刚被封的意思就是,之前是可以的,后来封了,至于为什么封,也许跟我切换 ip 有关(因为不止一台服务器)
    werifu
        5
    werifu  
    OP
       364 天前
    @dayeye2006199 sorry 我之前意识回复了发现没真的回复,前段时间捣鼓了 langchain ,感觉场景还是不太一样,langchain 更适合检索的场景,比如大段大段 pdf ,不要求多精确,但是这个是用来做结构化解析的,加上之后 GPT4 将支持更高的 token 限制,所以我觉得这个问题放着不管哪天就自己解决了😁
    werifu
        6
    werifu  
    OP
       364 天前
    服务器上因为没法用 fish 当默认 shell (会导致 vscode 的 remote 爆炸),所以一直用的 zsh ,为了方便给服务器也加上 CLI 的补全,我新增加了对 zsh 的支持,现在 CLI 也可以生成 zsh 下的补全文件了,应该适用范围更大了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2747 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 109ms · UTC 12:24 · PVG 20:24 · LAX 05:24 · JFK 08:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.