3 个不稳定版本

0.2.0 2023年11月19日
0.1.1 2023年8月21日
0.1.0 2023年8月21日
0.0.0 2023年8月2日

#2608 in 命令行工具

32 每月下载量

MIT 许可证

67KB
1.5K SLoC

Shai. 壳 AI 助手

Shai 是一个壳 AI 助手。它的目的是通过命令行界面帮助你与你的机器交互。它主要有两种方式来实现这一点。

  • 命令生成:Shai 允许你快速请求 LLM 模型根据你应该执行的操作生成命令。
  • 命令解释:给定一个命令,Shai 将解释该命令将做什么以及它的副作用。

你可能会主要在与 Shai 的命令生成模式交互。 主示例

你也可以要求 Shai 解释它刚才生成的命令: 解释生成的命令

或者当前缓冲行中的命令: 解释缓冲行命令

请注意,解释将不会考虑你的初始提示。这是故意为之,以避免对模型解释产生偏差。此外,这可以帮助双重检查模型是否生成了正确的命令并检测模型幻觉。

模型解释将简要解释命令并列举出常见的副作用。此外,如果命令可能具有危险性,模型通常会指出。

作为后端,你可以使用以下任何 OpenAI 模型

  • GPT-3.5-turbo
  • GPT-3.5-turbo-16k
  • GPT-4
  • GPT-4-32k

这可能只是轶事,但我有时发现大型上下文模型的延迟更低。

目前我无法访问 gpt-4 模型 API,但如果你的账户有权限访问,它们应该可以工作。所有示例都已使用 GPT-3.5-turbo 生成,因此我预计 GPT-4 的结果将与 GPT-3.5-turbo 相当或更好(特别是当请求有几个移动部分,如管道或重定向时)。

计划支持其他模型。请参阅 当前状态

请注意,Shai 并非旨在取代你对系统及其命令的深入了解,但它可以帮助减轻记忆每个标志和命令语法的负担。OpenAI GPT 模型并非万无一失,通常只有当操作者已经熟悉想要生成的命令相关的术语和能力时,才能获得最佳结果。它还可以作为资源来解释从教程或论坛中获取的命令。

安装

Cargo
cargo install shai

请记住将 .cargo/bin 添加到你的 PATH 中。

此方法应适用于所有平台,但你需要安装 Cargo,并使用 rustup 来安装它。

注意:参见下一节以集成 shai 并允许其与你的缓冲区行交互。

Arch Linux. AUR
yay -S shai
其他

使用此 github 仓库中的最新版本 latest release。将二进制文件放置在包含在 PATH 中的位置,在你的 rc 文件中源相应的集成 shell 脚本(参见下一节),然后你应该可以正常运行。

Shell 集成

我开发 Shai 的目标是让它与 shell 集成得非常紧密。我倾向于像使用 fzf 一样使用它,所以只需一个快捷键即可。

在这个仓库中,你可以找到集成 Shai 到你的 shell 体验所需的脚本。以下列表包含当前支持的 shell 以及计划支持的 shell。

  • Bash
  • Zsh
  • Fish
  • Nushell
  • PowerShell
  • Window CMD

为了使 Shai 通过快捷键可用,你需要源相应的脚本。这些脚本提供了默认绑定,你可以根据需要修改它。所有这些脚本都执行相同的功能,即设置一个通过键绑定调用的函数。该函数取当前 shell 缓冲区的内容,将其转发给 Shai,如果正在使用命令生成界面并且 Shai 以 Ctrl+a(接受)退出,则缓冲区行将修改为生成的命令。在大多数情况下,该函数本质上劫持了 shell 的命令编辑功能,将 Shai 作为文本编辑器对待。

Shell 集成文件
Bash bash_assistant.sh
Zsh zsh_assistant.zsh
Fish fish_assistant.fish
Nushell nushell_assistant.nu
PowerShell powershell_assistant.ps1

如果你只安装了二进制文件,你可以使用 shai 生成集成脚本。

shai generate-script --shell <your-shell, one of {bash, zsh, fish, nushell, powershell}>
# e.g
shai generate-script --shell zsh > zsh_assistant.zsh
# then in your .zshrc
source zsh_assistant.zsh

请记住在 rc 文件中源生成的脚本,否则你将没有可用的快捷键。

根据你使用的模型,你可能需要将 API 密钥作为环境变量提供。对于 OpenAI 模型,你可以使用以下命令设置:

export OPENAI_API_KEY=$(<command_to_get_API_key>)
# if you have it on a text file
export OPENAI_API_KEY=$(cat ~/.secrets/chatgpt.key)

请参见这里了解如何获取你的 OpenAI API 密钥。

如何使用它

Shell 快捷键

如果你没有修改 shell 集成脚本,快捷键将是以下内容

  • Alt+s : 命令生成
  • Alt+e : 命令解释

你可以在 shell 集成文件中更改这些快捷键。它们已被选择以避免与 readline 中已存在的快捷键冲突。

Shai 控制

  • Enter : 发送提示
  • Ctrl+c : 退出 Shai
  • Esc : 取消当前请求

命令生成

当生成命令时,以下控件也可用

  • Ctrl+a : 接受生成的命令
    • 这将检查模型是否遵循格式说明,当模型提供长答案时,此快捷键将只检索markdown代码块内的文本。
  • Ctrl+r : 接受生成的命令(原始)
    • 这将接受模型输入而不进行任何检查
  • Ctrl+e : 解释生成的命令
    • 这将生成Shai刚刚生成的命令的解释。

这些快捷键目前不能更改。

示例

Git

Get the commit hash in which a string was introduced Get the commit hash of the commits that include string Get the commit hash of the commits that modify a file

杂项

在运行的容器上运行bash: 在运行的容器上运行bash

创建SSH隧道: SSH隧道

简单的ffmpeg操作或命令修改: 从视频文件制作GIF 修改ffmpeg命令

丢弃命令输出: 丢弃终端输出

当前状态

目前Shai是无记忆的,当你发送一个提示时,它会将提示发送到模型,而不带任何来自你之前提示的上下文。Shai的目的不是成为一个对话应用,而是快速利用LLMs生成命令。我可能会在将来实现对话功能,如果它改善了生成的命令。

我计划在他们提供API或可以本地运行的方式(即使机器要求较高,但高端台式机内)之后添加对其他模型的支持,例如 OpenAssistant。如果你有其他可以本地运行或具有可用API的类似模型的提示,请填写一个issue,我会尝试添加对该模型的支持。

上下文感知。

你可以通过修改假设的操作系统或发行版来获取更相关的结果。此信息在 --operating-system 选项中提供。你可以使用适当的值修改你的集成脚本。

同样,--shell 选项让模型知道它在哪个shell中运行,这可以帮助模型使用shell特定功能。然而,对于现代shell如 nushell,这实际上可能会使模型困惑,因为它在其训练数据中不会有太多关于这个shell的信息。在这种情况下,可能最好让模型相信它在另一个shell(如 bash)上运行。

实验选项

最初我设想Shai是一个更强大的助手,可以将关于您机器当前状态的上下文信息转发给它,并相应地行事。有一些选项默认是禁用的

选项 描述
pwd 为模型提供当前工作目录
深度 运行tree命令的深度。它提供了关于当前目录及其内容的上下文信息
环境 已设置的環境变量列表(仅传递其名称给模型)
程序 模型可用的程序列表,用于完成任务

我发现GPT3.5模型在这方面性能不足。我有一些希望GPT-4(或未来的)模型表现更好,所以仍然可以向前传递此上下文给模型。如果你发现使用它效果良好,请告诉我!

路线图

无特定顺序

  • 自定义快捷键
  • 提示覆盖
  • 添加提示历史导航。
  • 添加对其他模型的支持。(我希望使其易于与本地运行的模型交互)
    • OpenAI
    • 本地
    • OpenAssistant(一旦公开API可用)
    • Google Bard(一旦公开API可用)
  • 添加其他shell
    • Bash
    • Zsh
    • Fish
    • Nushell
    • PowerShell
    • Window CMD

致谢

  • fzf
    • fzf在shell集成方面是主要灵感来源
  • ChatGPT-rs
    • 我确实从这个项目中汲取了一些灵感来实现从OpenAI的流式响应。

依赖项

~15–29MB
~461K SLoC