shell_gpt

GitHub
12k 950 简单 1 次阅读 今天MIT插件开发框架语言模型
AI 解读 由 AI 自动生成,仅供参考

ShellGPT 是一款由大型语言模型驱动的智能命令行效率工具,旨在帮助开发者在终端内快速完成各类任务。它彻底改变了传统工作中需要频繁切换窗口、打开浏览器搜索语法或查阅文档的低效模式,让用户只需输入自然语言描述,即可直接生成精准的 Shell 命令、代码片段、技术文档甚至分析日志内容。

无论是忘记复杂的 find 命令语法,还是需要根据代码差异自动生成 Git 提交信息,亦或是快速排查 Docker 容器报错,ShellGPT 都能即时提供解决方案。其独特之处在于具备强大的环境感知能力,能自动识别用户当前的操作系统(如 Linux、macOS 或 Windows)及 Shell 类型(如 Bash、Zsh 或 PowerShell),从而生成完全适配当前环境的指令。例如,同样的“更新系统”请求,在 macOS 上会生成 softwareupdate 命令,而在 Ubuntu 上则会自动转换为 apt 指令。此外,它还支持灵活的标准输入输出流操作,可轻松集成到现有的管道工作流中。

这款工具特别适合经常与终端打交道的软件开发人员、运维工程师及技术研究人员。虽然默认配置需调用 OpenAI API,但它也兼容本地部署的开源模型,为注重隐私或有离线需求的用户提供了更多选择。通过 ShellGPT,你可以将更多精力专注于核心逻辑,让繁琐的命令行操作变得简单高效。

使用场景

一位后端开发工程师在深夜排查生产环境 Docker 容器异常,急需快速定位错误根源并执行修复命令。

没有 shell_gpt 时

  • 面对复杂的 Docker 报错日志,需要手动复制粘贴到搜索引擎或文档网站,反复切换窗口查找含义。
  • 忘记特定的 findjq 命令语法来提取关键信息,不得不查阅大量在线教程才能拼凑出正确指令。
  • 在不同操作系统(如 macOS 开发机与 Linux 服务器)间切换时,容易混淆系统更新或包管理命令,导致操作失败。
  • 从分析日志到生成修复命令耗时过长,打断了排查思路,增加了故障恢复的平均时间(MTTR)。

使用 shell_gpt 后

  • 直接通过管道将 docker logs 输出传递给 shell_gpt,它能瞬间分析日志并指出具体的连接超时或内存分配错误及解决方案。
  • 只需输入自然语言描述(如“找出当前目录下所有修改过的 JSON 文件”),shell_gpt 立即生成精准的 Shell 命令供确认执行。
  • 自动识别当前操作系统环境,针对“更新系统”这类模糊指令,在 macOS 上生成 softwareupdate 命令,而在 Ubuntu 上则生成 apt 命令,无需人工区分。
  • 整个排查与修复过程在终端内一气呵成,无需离开命令行界面,显著提升了运维效率与专注度。

shell_gpt 将繁琐的搜索与记忆负担转化为流畅的自然语言交互,让开发者能专注于解决核心问题而非命令语法。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

未说明

内存

未说明

依赖
notes默认使用 OpenAI API(需付费及 API Key);支持通过 Ollama 运行本地开源模型,但官方提示该工具未针对本地模型优化,可能无法按预期工作;安装后需配置 API Key 至 ~/.config/shell_gpt/.sgptrc;支持 Bash、Zsh、PowerShell 和 CMD 等主流 Shell。
python未说明
openai (通过 API 调用)
ollama (可选,用于本地模型)
shell_gpt hero image

快速开始

ShellGPT

一款由人工智能大型语言模型(LLM)驱动的命令行生产力工具。该命令行工具能够高效生成Shell 命令、代码片段和文档,从而无需借助外部资源(如 Google 搜索)。支持 Linux、macOS 和 Windows 系统,并兼容所有主流 Shell,例如 PowerShell、CMD、Bash、Zsh 等。

https://github.com/TheR1D/shell_gpt/assets/16740832/721ddb19-97e7-428f-a0ee-107d027ddd59

安装

pip install shell-gpt

默认情况下,ShellGPT 使用 OpenAI 的 API 和 GPT-4 模型。您需要一个 API 密钥,可以在这里生成。系统会提示您输入密钥,该密钥将被存储在 ~/.config/shell_gpt/.sgptrc 文件中。OpenAI API 并非免费,请参阅 OpenAI 定价 以获取更多信息。

[!TIP] 或者,您也可以使用本地部署的开源模型,这些模型是免费的。要使用本地模型,您需要运行自己的 LLM 后端服务器,例如 Ollama。要将 ShellGPT 与 Ollama 配合使用,请按照这份全面的指南进行操作。

❗️请注意,ShellGPT 并未针对本地模型进行优化,可能无法按预期工作。

使用方法

ShellGPT 旨在快速分析和检索信息。它适用于从技术配置到通用知识等各类简单请求。

sgpt "什么是斐波那契数列"
# -> 斐波那契数列是一系列数字,其中每个数字 ...

ShellGPT 可以接受来自标准输入和命令行参数的提示。无论您是喜欢通过终端管道传递输入,还是直接将其作为参数指定,sgpt 都能满足您的需求。例如,您可以根据差异轻松生成 Git 提交信息:

git diff | sgpt "为我的更改生成 Git 提交信息"
# -> 在 README.md 中添加了主要功能详情

您可以通过标准输入将来自不同来源的日志传递给 ShellGPT,并附上提示,从而对其进行分析。例如,我们可以用它快速分析日志、识别错误并提供可能的解决方案:

docker logs -n 20 my_app | sgpt "检查日志,查找错误,并提供可能的解决方案"
检测到错误:第 7 行出现连接超时。
可能的解决方案:检查网络连接和防火墙设置。
检测到错误:第 12 行内存分配失败。
可能的解决方案:考虑增加内存分配或优化应用程序的内存使用。

您还可以使用各种重定向运算符来传递输入:

sgpt "总结" < document.txt
# -> 该文档讨论了影响...
sgpt << EOF
学习 Go 语言的最佳方式是什么?
请提供一个简单的 Hello World 示例。
EOF
# -> 学习 Go 语言的最佳方式...
sgpt <<< "学习 Shell 重定向的最佳方式是什么?"
# -> 学习 Shell 重定向的最佳方式是通过..."

Shell 命令

您是否曾经忘记过一些常用的 Shell 命令,比如 find,不得不上网查找语法?借助 --shell 或简写 -s 选项,您可以在终端中快速生成并执行所需的命令。

sgpt --shell "查找当前目录下的所有 JSON 文件"
# -> find . -type f -name "*.json"
# -> [E]xecute, [D]escribe, [A]bort: e

Shell GPT 会识别您使用的操作系统和 $SHELL 环境变量,并为您所在的具体系统提供相应的 Shell 命令。例如,如果您让 sgpt 更新您的系统,它会根据您的操作系统返回一条命令。以下是在 macOS 上的一个示例:

sgpt -s "更新我的系统"
# -> sudo softwareupdate -i -a
# -> [E]xecute, [D]escribe, [A]bort: e

同样的提示,在 Ubuntu 上则会产生不同的建议:

sgpt -s "更新我的系统"
# -> sudo apt update && sudo apt upgrade -y
# -> [E]xecute, [D]escribe, [A]bort: e

让我们再试试 Docker:

sgpt -s "启动 Nginx 容器,挂载 ./index.html"
# -> docker run -d -p 80:80 -v $(pwd)/index.html:/usr/share/nginx/html/index.html nginx
# -> [E]xecute, [D]escribe, [A]bort: e

我们仍然可以使用管道将输入传递给 sgpt 并生成 Shell 命令:

sgpt -s "向 localhost 发送 POST 请求,数据为" < data.json
# -> curl -X POST -H "Content-Type: application/json" -d '{"a": 1, "b": 2}' http://localhost
# -> [E]xecute, [D]escribe, [A]bort: e

在提示中应用额外的 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
# -> [E]xecute, [D]escribe, [A]bort: e

如果您希望通过管道传递生成的 Shell 命令,可以使用 --no-interaction 选项。这将禁用交互模式,并将生成的命令输出到标准输出。在下面的例子中,我们使用 pbcopy 将生成的命令复制到剪贴板:

sgpt -s "查找当前目录下的所有 JSON 文件" --no-interaction | pbcopy

Shell 集成

这是一项非常实用的功能,它允许您直接在终端中使用 sgpt 的 Shell 补全功能,而无需键入 sgpt 及其提示和参数。Shell 集成使您能够在终端中通过快捷键使用 ShellGPT,Bash 和 ZSH 壳都支持此功能。该功能会将 sgpt 的补全内容直接插入终端缓冲区(输入行),以便您立即编辑建议的命令。

https://github.com/TheR1D/shell_gpt/assets/16740832/bead0dab-0dd9-436d-88b7-6abfb2c556c1

要安装 Shell 集成,请运行 sgpt --install-integration,然后重启终端以使更改生效。这将在您的 .bashrc.zshrc 文件中添加几行内容。之后,您可以使用 Ctrl+l(默认快捷键)调用 ShellGPT。按下 Ctrl+l 后,当前的输入行(缓冲区)将被建议的命令替换。您可以对其进行编辑,然后直接按 Enter 执行。

生成代码

通过使用 --code-c 参数,您可以专门请求纯代码输出,例如:

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
# ...

我们也可以使用管道传递输入:

cat fizz_buzz.py | sgpt --code "为我代码的每一行生成注释"

# 遍历数字 1 到 100
for i in range(1, 101):
    # 检查数字是否同时能被 3 和 5 整除
    if i % 3 == 0 and i % 5 == 0:
        # 如果数字能被 3 和 5 整除,打印 "FizzBuzz"
        print("FizzBuzz")
    # 检查数字是否能被 3 整除
    elif i % 3 == 0:
        # 如果数字能被 3 整除,打印 "Fizz"
        print("Fizz")
    # 检查数字是否能被 5 整除
    elif i % 5 == 0:
        # 如果数字能被 5 整除,打印 "Buzz"
        print("Buzz")
    # 如果数字既不能被 3 整除,也不能被 5 整除,就打印该数字本身
    else:
        print(i)

聊天模式

在很多情况下,保存和回顾对话非常重要。sgpt 在每次请求 LLM 完成时都会创建一个对话记录。这些对话可以逐条进行(聊天模式),也可以通过 REPL 循环以交互方式展开(REPL 模式)。这两种方式都依赖于同一个底层对象,称为聊天会话。会话存储在可配置的 CHAT_CACHE_PATH 中。

要开始一次对话,使用 --chat 选项,后接唯一的会话名称和提示语。

sgpt --chat conversation_1 "请记住我最喜欢的数字是:4"
# -> 我会记住你最喜欢的数字是4。
sgpt --chat conversation_1 "那我最喜欢的数字加4是多少呢?"
# -> 你最喜欢的数字是4,所以加上4就是8。

你可以利用聊天会话逐步完善 GPT 的建议,提供更多的细节。还可以结合 --code--shell 选项来启动聊天:

sgpt --chat conversation_2 --code "用 Python 向 localhost 发送请求"
import requests

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

现在我们让 LLM 为我们的请求添加缓存功能:

sgpt --chat conversation_2 --code "添加缓存"
import requests
from cachecontrol import CacheControl

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

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

同样的方法也适用于 Shell 命令:

sgpt --chat conversation_3 --shell "当前目录下有什么内容?"
# -> ls
sgpt --chat conversation_3 "按文件名排序"
# -> ls | sort
sgpt --chat conversation_3 "用 FFMPEG 将它们拼接起来"
# -> ffmpeg -i "concat:$(ls | sort | tr '\n' '|')" -codec copy output.mp4
sgpt --chat conversation_3 "将生成的文件转换为 MP3"
# -> ffmpeg -i output.mp4 -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 final_output.mp3

要列出所有会话,无论是聊天模式还是其他模式,都可以使用 --list-chats-lc 选项:

sgpt --list-chats
# .../shell_gpt/chat_cache/conversation_1  
# .../shell_gpt/chat_cache/conversation_2

要查看特定会话的所有消息,使用 --show-chat 选项并指定会话名称:

sgpt --show-chat conversation_1
# 用户: 请记住我最喜欢的数字是:4
# 助手: 我会记住你最喜欢的数字是4。
# 用户: 那我最喜欢的数字加4是多少呢?
# 助手: 你最喜欢的数字是4,所以加上4就是8。

REPL 模式

还有一种非常方便的 REPL(读取-求值-打印循环)模式,允许你与 GPT 模型进行交互式对话。要在 REPL 模式下启动聊天会话,使用 --repl 选项并指定一个唯一的会话名称。你也可以使用“temp”作为会话名称来启动一个临时的 REPL 会话。需要注意的是,--chat--repl 使用的是同一个底层对象,因此你可以先用 --chat 启动一个会话,然后再用 --repl 继续以 REPL 模式进行对话。

gif

sgpt --repl temp
进入 REPL 模式,按 Ctrl+C 退出。
>>> 什么是 REPL?
REPL 是指读取-求值-打印循环。它是一种编程环境…
>>> 如何在 REPL 中使用 Python?
要在 REPL 中使用 Python,只需打开终端或命令提示符…

REPL 模式可以配合 --shell--code 选项使用,这使得它非常适合交互式 Shell 命令和代码生成:

sgpt --repl temp --shell
进入 Shell REPL 模式,输入 [e] 执行命令,或按 Ctrl+C 退出。
>>> 当前目录下有什么内容?
ls
>>> 显示文件大小
ls -lh
>>> 按文件大小排序
ls -lhS
>>> e(只需输入 e 即可执行命令,或输入 d 描述命令)

如果需要多行提示,可以使用三重引号 """

sgpt --repl temp
进入 REPL 模式,按 Ctrl+C 退出。
>>> """
... 解释以下代码:
... import random
... print(random.randint(1, 10))
... """
这是一个 Python 脚本,使用 random 模块生成并打印一个随机整数。

你还可以通过传递参数、标准输入,甚至两者结合的方式,直接进入带有初始提示的 REPL 模式:

sgpt --repl temp < my_app.py
进入 REPL 模式,按 Ctrl+C 退出。
──────────────────────────────────── 输入 ────────────────────────────────────
name = input("你的名字是什么?")
print(f"你好,{name}")
───────────────────────────────────────────────────────────────────────────────
>>> 这段代码是关于什么的?
你提供的这段代码是用 Python 编写的。它会提示用户…
>>> 接下来的问题…

函数调用

函数调用是 OpenAI 提供的一项强大功能。它允许 LLM 在你的系统中执行函数,从而完成各种任务。要安装默认函数,请运行:

sgpt --install-functions

ShellGPT 提供了一种便捷的方式来定义和使用函数。要创建自定义函数,导航到 ~/.config/shell_gpt/functions 目录,然后创建一个新的 .py 文件,文件名即为函数名称。在这个文件中,你可以参考这个示例来定义你的函数:

# 示例:execute_shell.py
class ExecuteShell:
    """执行任意 Shell 命令,并返回输出结果。
    参数:
        shell_command (str): 要执行的 Shell 命令。
    返回:
        str: Shell 命令的输出结果。
    """

    def __init__(self, shell_command):
        self.shell_command = shell_command

    def execute(self):
        import subprocess
        result = subprocess.run(self.shell_command, shell=True, capture_output=True, text=True)
        return result.stdout

类中的文档字符串注释会作为函数描述传递给 OpenAI API,同时还会包含 title 属性及参数说明。当 LLM 决定调用你的函数时,就会执行 execute 方法。例如,我们这里允许 LLM 在系统中执行任何 Shell 命令。由于我们会返回命令的输出结果,LLM 可以分析这些结果,判断是否符合当前的提示要求。以下是 LLM 调用此函数的一个示例:

sgpt "请问 /tmp 目录下有哪些文件?"
# -> @FunctionCall execute_shell_command(shell_command="ls /tmp")
# -> /tmp 目录下有以下文件和目录:
# -> test.txt

# -> test.json

请注意,如果由于某种原因函数(execute_shell_command)会返回错误,LLM 可能会尝试根据输出来完成任务。假设我们的系统中没有安装 jq,而我们让 LLM 解析 JSON 文件:

sgpt "使用 jq 解析 /tmp/test.json 文件,并只返回 email 值"
# -> @FunctionCall execute_shell_command(shell_command="jq -r '.email' /tmp/test.json")
# -> 似乎系统中未安装 jq。让我尝试用 brew 安装它。
# -> @FunctionCall execute_shell_command(shell_command="brew install jq")
# -> jq 已成功安装。让我再试一次解析文件。
# -> @FunctionCall execute_shell_command(shell_command="jq -r '.email' /tmp/test.json")
# -> /tmp/test.json 中的 email 值是 johndoe@example.com。

在提示中也可以串联多个函数调用:

sgpt "播放音乐并打开 Hacker News"
# -> @FunctionCall play_music()
# -> @FunctionCall open_url(url="https://news.ycombinator.com")
# -> 音乐正在播放,Hacker News 已在您的浏览器中打开。祝您享受!

这只是一个简单的示例,展示了如何使用函数调用。它确实是一项强大的功能,可用于完成各种复杂任务。我们在 GitHub Discussions 中专门设立了类别,用于分享和讨论函数。

需要注意的是,LLM 可能会执行破坏性命令,请务必自行承担风险❗️

角色

ShellGPT 允许您创建自定义角色,这些角色可以用来生成代码、Shell 命令,或满足您的特定需求。要创建新角色,使用 --create-role 选项,后接角色名称。系统会提示您提供该角色的描述以及其他详细信息。这将在 ~/.config/shell_gpt/roles 目录下创建一个以角色名称命名的 JSON 文件。在此目录中,您还可以编辑默认的 sgpt 角色,例如 shellcodedefault。使用 --list-roles 选项列出所有可用角色,使用 --show-role 选项显示特定角色的详细信息。以下是一个自定义角色的示例:

sgpt --create-role json_generator
# 输入角色描述:仅提供有效的 JSON 作为响应。
sgpt --role json_generator "random: user, password, email, address"
{
  "user": "JohnDoe",
  "password": "p@ssw0rd",
  "email": "johndoe@example.com",
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA",
    "zip": "12345"
  }
}

如果角色描述中包含“APPLY MARKDOWN”(区分大小写),则聊天将以 Markdown 格式显示,除非使用 --no-md 显式关闭。

请求缓存

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

sgpt "彩虹有哪些颜色"
# -> 彩虹的颜色有红色、橙色、黄色、绿色、蓝色、靛色和紫色。

下次输入完全相同的查询时,结果将立即从本地缓存中获取。请注意,sgpt "彩虹有哪些颜色" --temperature 0.5 将发起新的请求,因为在之前的请求中我们没有提供 --temperature(同样适用于 --top-probability)。

以上只是利用 OpenAI GPT 模型所能实现的一些示例,我相信它们对您的具体用法也会很有帮助。

运行时配置文件

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

# API 密钥,也可以通过 OPENAI_API_KEY 环境变量定义。
OPENAI_API_KEY=your_api_key
# 后端服务器的基础 URL。若为"default",URL 将根据 --model 自动解析。
API_BASE_URL=default
# 每次聊天会话中缓存的消息最大数量。
CHAT_CACHE_LENGTH=100
# 聊天缓存文件夹。
CHAT_CACHE_PATH=/tmp/shell_gpt/chat_cache
# 请求缓存的数量上限。
CACHE_LENGTH=100
# 请求缓存文件夹。
CACHE_PATH=/tmp/shell_gpt/cache
# 请求超时时间(秒)。
REQUEST_TIMEOUT=60
# 默认使用的 OpenAI 模型。
DEFAULT_MODEL=gpt-4o
# Shell 和代码补全的默认颜色。
DEFAULT_COLOR=magenta
# 在 --shell 模式下,默认为"N"表示无需输入。
DEFAULT_EXECUTE_SHELL_CMD=false
# 禁用响应流式传输。
DISABLE_STREAMING=false
# 查看 Markdown 时使用的 Pygments 主题(默认/角色描述)。
CODE_THEME=default
# 函数目录的路径。
OPENAI_FUNCTIONS_PATH=/Users/user/.config/shell_gpt/functions
# 当 LLM 使用函数时,打印函数的输出。
SHOW_FUNCTIONS_OUTPUT=false
# 允许 LLM 使用函数。
OPENAI_USE_FUNCTIONS=true
# 强制使用 LiteLLM(用于本地 LLM)。
USE_LITELLM=false

DEFAULT_COLOR 的可选值包括:黑色、红色、绿色、黄色、蓝色、洋红、青色、白色、亮黑色、亮红色、亮绿色、亮黄色、亮蓝色、亮洋红、亮青色、亮白色。

CODE_THEME 的可选值请参考:https://pygments.org/styles/

参数完整列表

╭─ 参数 ──────────────────────────────────────────────────────────────────────────────────────────────╮
│   prompt      [PROMPT]  用于生成补全的提示词。                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ 选项 ────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --model            TEXT                       使用的大语言模型。[默认值:gpt-4o]             │
│ --temperature      FLOAT RANGE [0.0<=x<=2.0]  生成输出的随机性。[默认值:0.0]             │
│ --top-p            FLOAT RANGE [0.0<=x<=1.0]  限制最可能的标记(单词)。[默认值:1.0]     │
│ --md             --no-md                      格式化 Markdown 输出。[默认值:md]                    │
│ --editor                                      打开 $EDITOR 提供提示词。[默认值:不使用编辑器]     │
│ --cache                                       缓存补全结果。[默认值:缓存]                 │
│ --version                                     显示版本信息。                                              │
│ --help                                        显示此消息并退出。                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ 辅助选项 ─────────────────────────────────────────────────────────────────────────────────────────────╮
│ --shell           -s                      生成并执行 Shell 命令。                           │
│ --interaction         --no-interaction    --shell 选项的交互模式。[默认值:交互]    │
│ --describe-shell  -d                      描述一个 Shell 命令。                                      │
│ --code            -c                      仅生成代码。                                            │
│ --functions           --no-functions      允许函数调用。[默认值:允许函数调用]                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ 聊天选项 ───────────────────────────────────────────────────────────────────────────────────────────╮
│ --chat                 TEXT  按照会话 ID 继续对话,使用 "temp" 进行快速会话。[默认值:无]  │
│ --repl                 TEXT  启动 REPL(读取-求值-打印循环)会话。[默认值:无]                │
│ --show-chat            TEXT  显示指定会话 ID 的所有消息。[默认值:无]                    │
│ --list-chats  -lc            列出所有现有的会话 ID。                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ 角色选项 ───────────────────────────────────────────────────────────────────────────────────────────╮
│ --role                  TEXT  GPT 模型的系统角色。[默认值:无]                                 │
│ --create-role           TEXT  创建角色。[默认值:无]                                               │
│ --show-role             TEXT  显示角色。[默认值:无]                                                 │
│ --list-roles   -lr            列出角色。                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Docker

使用 OPENAI_API_KEY 环境变量和一个 Docker 卷来存储缓存,运行容器。可以根据自己的偏好设置 OS_NAMESHELL_NAME 环境变量。

docker run --rm \
           --env OPENAI_API_KEY=api_key \
           --env OS_NAME=$(uname -s) \
           --env SHELL_NAME=$(echo $SHELL) \
           --volume gpt-cache:/tmp/shell_gpt \
       ghcr.io/ther1d/shell_gpt -s "update my system"

使用别名和 OPENAI_API_KEY 环境变量进行对话的示例:

alias sgpt="docker run --rm --volume gpt-cache:/tmp/shell_gpt --env OPENAI_API_KEY --env OS_NAME=$(uname -s) --env SHELL_NAME=$(echo $SHELL) 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 .

Docker + Ollama

如果你想将请求发送到 Ollama 实例,并在 Docker 容器中运行 ShellGPT,你需要调整 Dockerfile 并自行构建容器:需要安装 litellm 包,并正确设置环境变量。

示例 Dockerfile:

FROM python:3-slim

ENV DEFAULT_MODEL=ollama/mistral:7b-instruct-v0.2-q4_K_M
ENV API_BASE_URL=http://10.10.10.10:11434
ENV USE_LITELLM=true
ENV OPENAI_API_KEY=bad_key
ENV SHELL_INTERACTION=false
ENV PRETTIFY_MARKDOWN=false
ENV OS_NAME="Arch Linux"
ENV SHELL_NAME=auto

WORKDIR /app
COPY . /app

RUN apt-get update && apt-get install -y gcc
RUN pip install --no-cache /app[litellm] && mkdir -p /tmp/shell_gpt

VOLUME /tmp/shell_gpt

ENTRYPOINT ["sgpt"]

更多文档

版本历史

1.5.02026/01/28
1.4.52025/04/08
1.4.42024/08/10
1.4.32024/04/06
1.4.02024/02/22
1.3.12024/02/17
1.3.02024/02/09
1.2.02024/01/28
1.1.02024/01/09
1.0.12023/12/22
1.0.02023/12/20
0.9.42023/07/19
0.9.32023/06/14
0.9.22023/06/04
0.9.12023/05/21
0.9.02023/04/16
0.8.92023/04/14
0.8.82023/04/10
0.8.72023/04/10
0.8.62023/04/09

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

152.6k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|3天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|3天前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|6天前
插件开发框架