3 个不稳定版本
0.2.0 | 2023年11月19日 |
---|---|
0.1.1 | 2023年8月21日 |
0.1.0 | 2023年8月21日 |
0.0.0 |
|
#2608 in 命令行工具
32 每月下载量
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
: 退出 ShaiEsc
: 取消当前请求
命令生成
当生成命令时,以下控件也可用
Ctrl+a
: 接受生成的命令- 这将检查模型是否遵循格式说明,当模型提供长答案时,此快捷键将只检索markdown代码块内的文本。
Ctrl+r
: 接受生成的命令(原始)- 这将接受模型输入而不进行任何检查
Ctrl+e
: 解释生成的命令- 这将生成Shai刚刚生成的命令的解释。
这些快捷键目前不能更改。
示例
Git
杂项
在运行的容器上运行bash:
创建SSH隧道:
简单的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