这是一个由ChatGPT支持的命令行工具,旨在帮助您更快、更高效地完成任务

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/TheR1D/shell_gpt

Shell GPT

这是一个由OpenAI的ChatGPT(GPT-3.5)支持的命令行工具,作为开发者,我们可以利用ChatGPT的能力来生成shell命令、代码片段、评论和文档等。忘记繁琐的备忘录和笔记吧,使用这个工具,您可以在终端中获得准确的答案,可能会发现自己减少了每天的谷歌搜索,节省宝贵的时间和精力。

安装

pip install shell-gpt

您需要一个OpenAI API密钥,您可以在此处生成一个。

如果设置了$OPENAI_API_KEY环境变量,则会使用该值,否则会提示您输入API key,并将其存储在~/.config/shell_gpt/.sgptrc中。

用法

sgpt有许多用途,包括简单查询、shell查询和代码查询。

简单查询

我们可以像普通搜索引擎一样使用它,询问任何内容:

sgpt "nginx默认配置文件位置"
# -> Nginx的默认配置文件位于/etc/nginx/nginx.conf。

sgpt "docker显示所有本地镜像"
# -> 您可以通过运行`docker images`来查看所有可用的Docker镜像。

sgpt "太阳的质量"
# -> = 1.99 × 10^30 kg

转换

不必要搜索转换公式或使用单独的转换网站,即可转换各种单位和测量。您可以转换时间、距离、重量、温度等单位。

sgpt "1小时30分钟转换为秒"
# -> 5,400 秒

sgpt "1公里转换为英里"
# -> 1公里等于0.62137英里。

Shell 命令

您是否曾经遗忘了常见的 shell 命令(例如 chmod),需要在网上查找语法?使用 --shell 或简写 -s 选项,您可以在终端中快速找到并执行所需的命令。

sgpt --shell "将当前目录中的所有文件设置为只读"
# -> chmod 444 *
# -> Execute shell command? [y/N]: y
# ...

Shell GPT 知道您正在使用的操作系统和 $SHELL,它将为您提供特定系统的 shell 命令。例如,如果您要求 sgpt 更新您的系统,则它将根据您的操作系统返回一个命令。以下是在 macOS 上使用的示例:

sgpt -s "更新我的系统"
# -> sudo softwareupdate -i -a

在 Ubuntu 上使用相同提示时,将生成不同的建议:

sgpt -s "更新我的系统"
# -> sudo apt update && sudo apt upgrade -y

让我们尝试一些 Docker 容器:

sgpt -s "使用 Docker 启动 nginx,转发 443 和 80 端口,将当前文件夹与 index.html 挂载"
# -> docker run -d -p 443:443 -p 80:80 -v $(pwd):/usr/share/nginx/html nginx
# -> Execute shell command? [y/N]: y
# ...

此外,在提示中我们可以指定一些参数名称,例如将输出文件名传递给 ffmpeg:

sgpt -s "使用 ffmpeg 减慢两倍视频速度,输入视频名称为 \"input.mp4\",输出视频名称为 \"output.mp4\""
# -> ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" output.mp4
# -> Execute shell command? [y/N]: y
# ...

我们还可以在提示中应用其他 shell 魔法,例如将文件名传递给 ffmpeg:

ls
# -> 1.mp4 2.mp4 3.mp4
sgpt -s "使用 ffmpeg 将多个视频合并成一个(无音频)。视频文件名:$(ls -m)"
# -> ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex "[0:v] [1:v] [2:v] concat=n=3:v=1 [v]" -map "[v]" out.mp4
# -> Execute shell command? [y/N]: y
# ...

由于 ChatGPT 还可以对输入文本进行摘要和分析,因此我们可以要求它生成提交信息:

sgpt "生成 git 提交信息,我的更改:$(git diff)"
# -> Commit message: Implement Model enum and get_edited_prompt() func, add temperature, top_p and editor args for OpenAI request.

或者要求它查找日志中的错误并提供更多详细信息:

sgpt "检查这些日志,找出错误,并解释错误内容:${docker logs -n 20 container_name}"
# ...

生成代码

使用 --code 参数,我们可以只查询代码作为输出,例如:

sgpt --code "使用 Python 解决经典的 Fizz Buzz 问题"

for i in range(1, 101):
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

由于它是有效的 Python 代码,因此我们可以将输出重定向到文件:

sgpt --code "使用 Python 解决经典的 Fizz Buzz 问题" > fizz_buzz.py
python fizz_buzz.py
# 1
# 2
# Fizz
# 4
# Buzz
# Fizz
# ...

聊天

要开始聊天会话,请使用 --chat 选项,后跟唯一会话名称和提示:

sgpt --chat number "请记住我的最喜爱的数字:4"
# -> 我会记住你最喜欢的数字是4。
sgpt --chat number "如果加上4,我的最喜欢的数字会是多少?"
# -> 你最喜欢的数字是4,因此如果添加4,则结果将为8。

您还可以使用聊天会话迭代地提高 ChatGPT 的建议,通过提供其他线索。

sgpt --chat python_requst --code "使用 Python 进行示例请求"

import requests

response = requests.get('http://localhost')
print(response.text)

要求 ChatGPT 向我们的请求添加缓存。

sgpt --chat python_request --code "添加缓存"

import requests
from cachecontrol import CacheControl

sess = requests.session()
cached_sess = CacheControl(sess)

response = cached_sess.get('http://localhost')
print(response.text)

我们可以使用 --code--shell 选项来启动 --chat,因此您可以不断完善结果:

sgpt --chat sh --shell "这个目录中有哪些文件?"
# -> ls
sgpt --chat sh "按名称对它们进行排序"
# -> ls | sort
sgpt --chat sh "使用 FFMPEG 连接它们"
# -> ffmpeg -i "concat:$(ls | sort | tr '\n' '|')" -codec copy output.mp4
sgpt --chat sh "将生成的文件转换为 MP3"
# -> ffmpeg -i output.mp4 -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 final_output.mp3

聊天会话

要列出所有当前聊天会话,请使用 --list-chat 选项:

sgpt --list-chat
# .../shell_gpt/chat_cache/number
# .../shell_gpt/chat_cache/python_request

要显示与特定聊天会话相关的所有消息,请使用 --show-chat 选项,后跟会话名称:

sgpt --show-chat number
# user: please remember my favorite number: 4
# assistant: I will remember that your favorite number is 4.
# user: what would be my favorite number + 4?
# assistant: Your favorite number is 4, so if we add 4 to it, the result would be 8.

请求缓存

使用 --cache(默认)和 --no-cache 选项来控制缓存。此缓存适用于所有针对 OpenAI API 的 sgpt 请求:

sgpt "what are the colors of a rainbow"
# -> The colors of a rainbow are red, orange, yellow, green, blue, indigo, and violet.

下一次,相同的查询将立即从本地缓存获取结果。请注意,sgpt "what are the colors of a rainbow" --temperature 0.5 将进行新的请求,因为我们没有在之前的请求中提供 --temperature(同样适用于 --top-probability)。

这只是使用 ChatGPT 模型的一些示例,我相信您会在特定用例中发现它非常有用。

运行时配置文件

您可以在运行时配置文件 ~/.config/shell_gpt/.sgptrc 中设置一些参数:

# API 密钥,OPENAI_API_KEY env 也可以定义。
OPENAI_API_KEY=your_api_key
# OpenAI 主机,如果要使用代理,则很有用。
OPENAI_API_HOST=https://api.openai.com
# 每个聊天会话的最大缓存消息数量。
CHAT_CACHE_LENGTH=100
# 聊天缓存文件夹。
CHAT_CACHE_PATH=/tmp/shell_gpt/chat_cache
# 请求缓存长度(数量)。
CACHE_LENGTH=100
# 请求缓存文件夹。
CACHE_PATH=/tmp/shell_gpt/cache
# 请求超时(秒)。
REQUEST_TIMEOUT=60

完整的参数列表

╭─ Arguments ───────────────────────────────────────────────────────────────────────────────────────────────╮
│   prompt      [PROMPT]  The prompt to generate completions for.                                           │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --temperature      FLOAT RANGE [0.0<=x<=1.0]  Randomness of generated output. [default: 1.0]              │
│ --top-probability  FLOAT RANGE [0.1<=x<=1.0]  Limits highest probable tokens (words). [default: 1.0]      │
│ --chat             TEXT                       Follow conversation with id (chat mode). [default: None]    │
│ --show-chat        TEXT                       Show all messages from provided chat id. [default: None]    │
│ --list-chat                                   List all existing chat ids. [default: no-list-chat]         │
│ --shell                                       Generate and execute shell command.                         │
│ --code                                        Provide code as output. [default: no-code]                  │
│ --editor                                      Open $EDITOR to provide a prompt. [default: no-editor]      │
│ --cache                                       Cache completion results. [default: cache]                  │
│ --help                                        Show this message and exit.                                 │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Docker

要使用 OPENAI_API_KEY 环境变量和 docker 卷存储缓存运行容器:

docker run --rm \
           --env OPENAI_API_KEY="your OPENAI API key" \
           --volume gpt-cache:/tmp/shell_gpt \
       ghcr.io/ther1d/shell_gpt --chat rainbow "what are the colors of a rainbow"

以下是一次对话的示例,使用别名和 OPENAI_API_KEY 环境变量:

alias sgpt="docker run --rm --env OPENAI_API_KEY --volume gpt-cache:/tmp/shell_gpt ghcr.io/ther1d/shell_gpt"
export OPENAI_API_KEY="your OPENAI API key"
sgpt --chat rainbow "what are the colors of a rainbow"
sgpt --chat rainbow "inverse the list of your last answer"
sgpt --chat rainbow "translate your last answer in french"

您还可以使用提供的 Dockerfile 来构建自己的镜像:

docker build -t sgpt .

 

 

标签:工具分享, ChatGPT