这是一个由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 .