3个版本
0.1.3 | 2023年6月4日 |
---|---|
0.1.2 | 2023年6月4日 |
0.1.0 | 2023年6月4日 |
#387 in 机器学习
每月 29 次下载
26KB
339 行
ai.sh:终端交互的未来 🚀
(本节完全由ChatGPT编写。)
欢迎来到与终端交互的革命性方式 - 认识ai.sh
。使用Rust开发,此工具利用OpenAI的语言模型,在您的控制台提供交互式、上下文感知的对话。它易于使用,直观,旨在增强您的终端会话和命令行生产力。
ai.sh是您的编码伴侣,在您的命令下提供AI见解,简化您的编码之旅。欢迎来到编码的未来!
演示
下载iris数据集,进行一些分析,全部通过shell命令在终端内完成。(播放3次。使用GPT-4)
您可能对其他示例感兴趣
命令
ask
:直接从您的终端查询AIfill
:让AI建议命令,您可以直接将其输入到shell中
主要功能
从您的终端查询AI
无需使用单独的浏览器。直接从您的终端咨询AI。以下是一个示例
❯ ask how to unzip tar gz
AI响应
❯ ask how to unzip tar gz
To unzip a tar.gz file, you can use the following command in a terminal:
`tar -xzf file.tar.gz`
where "file.tar.gz" is the name of your compressed file. This command will extract the contents of the file into a directory with the same name as the file. If you want to extract the contents into a different directory, you can specify the path with the -C option:
`tar -xzf file.tar.gz -C /path/to/directory`
Once the extraction is complete, you should have access to the uncompressed files in the directory where you extracted them.
答案会逐步打印出来,确保您不需要等待完整响应!
AI理解您的上下文!
AI终端助手可以解释您的操作上下文,提供更有意义的通知和解释。看看这个
您输入了一个命令并遇到了错误。
❯ rm .git
rm: .git: is a directory
只需询问AI
❯ ask what does this mean
AI响应
❯ ask what does this mean
The message "is a directory" means that you are trying to remove a directory (in this case, the .git directory). In order to remove a directory, you need to use the command "rm -r" instead of just "rm". The "-r" flag tells the "rm" command to remove directories recursively. However, be careful when using this command as it can delete multiple files and directories at once.
太棒了!不是吗?
注意:您需要使用tmux来使用此功能。请参阅Q&A。
在您的终端与AI进行多轮对话
通过理解您的终端上下文,ai.sh
不仅仅是提问和接收答案;它关于参与多轮的见解性对话。这里是它的一个预览
❯ git init
Reinitialized existing Git repository in /Users/yotaro/projects/llm-demo/ai.sh/.git/
你知道再次运行 git init
时会发生什么吗?让我们来询问。
❯ ask what does reinitialized mean
"Reinitialized" means that Git has reset the repository's initialization parameters. When you run `git init` in an existing Git repository, Git will re-run the repository's initialization process, but with the existing repository metadata in place. This allows you to reset the repository configuration without losing the existing commit history and other Git metadata.
嗯,还有问题吗?再问一遍
❯ ask what configuration is reset
When you run init` with the `--reinitialize` or `-o` option, Git will re-run the repository's initialization process, but with the existing repository metadata in place. This allows you to reset the repository configuration without losing the existing commit history and other Git metadata. The specific configuration that is reset depends on what options you passed to `git init`. If you did not pass any options, then Git will reset all initialization parameters to their default values. Is there anything else I can help you with?
让AI直接向您的终端写入!
fill
命令让你可以直接将 AI 建议的命令输入到 shell 中。
让 AI 建立这样的命令
❯ fill allocate 5GB file here
AI 会给出一些命令的建议
To allocate a 5GB file here, you can use the `fallocate` command. `fallocate` can be used to allocate space for a file using either the preallocated or the zeroed method.
To allocate space for a 5GB file with the preallocated method, run the following command:
```
fallocate -l 5G filename
```
Remember to replace `filename` with the desired name for your file. This will create a file of size 5GB without actually allocating the space until it is actually used.
To allocate space for a 5GB file with the zeroed method, run the following command:
```
fallocate -l 5G -z filename
```
This will create a file of size 5GB with all bits set to 0.
然后,你将获得覆盖选择器(peco)来选择最佳命令。
AI suggested commands (Enter to use / Ctrl+C to exit):
fallocate -l 5G filename
fallocate -l 5G -z filename
选定的命令将直接输入到 shell 中。只需按回车键即可执行。
❯ fallocate -l 5G filename
你不会在终端上挣扎文本选择!
操作系统 / CPU 架构 / 识别对话!
ask
命令可以识别你的 shell、操作系统和 CPU 架构。因此,你可以提出有关 shell、操作系统和 CPU 架构的具体问题。
❯ ask how to install tmux
AI响应
❯ ask how to install tmux
To install tmux on your macOS machine, you can use Homebrew package manager. Here are the steps:
1. Open the terminal.
2. Install Homebrew package manager by running the following command:
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
3. Once Homebrew is installed, install tmux:
```
brew install tmux
```
4. Wait for the installation to complete.
That's it! Now you can use tmux on your macOS machine.
太棒了!不是吗?(有些人可能不喜欢 homebrew...)
想看到更多吗?
查看示例!
设置
先决条件
如果你只想使用 ask
命令
- rust
如果你也想使用 fill
命令
peco
:fill
命令使用 peco 来让你从 AI 建议的命令中选择要执行的命令。
如果你想使 fill
命令运行得更好
tmux
:如果你在 tmux 中运行 ai.sh,你可以将当前终端发送到 AI 以实现上下文感知的输入。zsh
:如果你在 zsh(不是 Bash)中运行 ai.sh,你可以直接填充下一个命令。无需复制粘贴。
安装
- 使用 cargo 安装:
cargo install ai-sh
- 在 shell 中设置
AI_SH_OPENAI_API_KEY
。例如:export AI_SH_OPENAI_API_KEY=xxxx
- 如果你不想使用 tmux 或将终端输出发送到 OpenAI 服务器,请设置
AI_SH_NO_PANE=true
- 如果你不设置此变量,
ask
命令将始终建议你使用 tmux。
- 如果你不设置此变量,
- 使用
ask hey whats up
测试命令
shell 设置
如果你只想使用 ask
命令,你可以安全地跳过这里。
zsh(推荐)
- 如果你使用 zsh,将其写入 .zshrc 的末尾
fill
命令,让你可以直接输入 AI 建议的命令。
function fill() {
command=`echo "$@" | ask --fill 2> >(cat 1>&2) | peco --prompt "AI suggested commands (Enter to use / Ctrl+C to exit):"`
print -z $command
}
Bash 和其他
- 如果你使用 Bash,你不能直接输入 AI 建议的命令,因为 Bash 没有必要的 API。
- 但是,下面的代码会将选定的命令插入到历史记录的末尾。因此,如果你按上箭头键,就可以使用该命令。
fill() {
command=`echo "$@" | ask --fill 2> >(cat 1>&2) | peco --prompt "AI suggested commands (Enter to use / Ctrl+C to exit):"`
history -s $command
}
附加功能!
- 我们将很快发布一个 Chrome 扩展程序,让你可以打开 chat.openai.com 并使用终端输出。
- 如果你想要更多,请通过创建问题来告诉我们!(但请注意,我最近有点忙。)
许可证
本项目根据 MIT 许可证条款授权。
免责声明
-
自行承担风险:本软件按“原样”提供,不提供任何明示或暗示的保证。使用本软件属于您自行决定和承担风险,您将完全对由此使用造成的任何损害或损失负责。
-
向OpenAI发送数据传输:通过使用本软件,您输入的文本以及某些终端信息将作为软件运行的一部分发送到OpenAI。
-
意外数据传输的可能性:请注意,由于软件存在缺陷或意外行为,可能会意外地向OpenAI发送数据或其他。尽管我们努力确保您数据的安全和隐私,但这些风险无法完全消除。
问答
ai.sh如何发送终端的当前输出?
- ai.sh使用
tmux capture-pane -p
获取当前终端状态。因此,如果您在tmux面板中运行ask
和fill
,面板上的文本将被发送到OpenAI。 - 这将给AI提供您请求的上下文并提高结果。
- 如果您不想使用此功能,请在您的shell中将
AI_SH_NO_PANE=true
设置为。
我可以使用GPT-4吗?
- 是的!您可以通过设置环境变量
AI_SH_OPENAI_MODEL=gpt-4
来使用GPT-4。- 这个环境变量只是传递给OpenAI API。因此,您可以使用OpenAI提供的任何模型。
- 目前,默认模型设置为
gpt-3.5-turbo
。
为什么使用Rust?
- 这只是因为shell工具应该有更少的依赖!
- 在Python中没有标准方式可以在任何地方提供命令。
贡献
- 当然,我们欢迎贡献!请随时打开一个问题或提交一个pull请求。
依赖项
~13–28MB
~450K SLoC