推荐一个好用的命令行工具ShellGPT

news2025/5/14 8:04:15

ShellGPT

  • 配置安装
  • 常用功能
    • 聊天
    • 写命令并执行
  • 高级功能
    • 函数调用
    • 角色管理
  • 总结

在这里插入图片描述

  这两天突然想到,现有的很多工具都在被大模型重构,比如诞生了像perplexity.ai 这种新交互形式的搜索引擎,就连wps也推出了AI服务,甚至都可以直接生成ppt,我就想是不是shell也有类似的工具,可以帮忙写脚本,然后我就在网上检索了下,起初发现了wrap这个软件,它虽然有ai交互的功能,但也不是我想要的,后来就检索到了ShellGPT这个工具,试用了半天,发现很好用,这里写个简单的介绍教程并推荐给大家。

  ShellGPT是个开源软件,其github地址是https://github.com/TheR1D/shell_gpt,它可以帮助你快速生成 shell 命令、代码片段和文档,无需再依赖外部资源(如 Google 搜索)。

配置安装

  ShellGPT 支持 Linux、macOS、Windows 等操作系统,并兼容 PowerShell、CMD、Bash、Zsh 等主流 Shell。ShellGPT的安装很简单,直接使用pip即可:

pip install shell-gpt

  但配置相对复杂一些,主要是它必须依赖于外部大语言模型(LLM),它默认是依赖于openai (第三方模型也支持),我们就以openai配置为例,介绍下如何将ShellGPT配置运行起来。
  因为它依赖于openai的接口,所以你必须申请到openai的API KEY,可以在这里申请https://platform.openai.com/account/api-keys,然后需要在环境变量里设置好OPENAI_API_KEY 这个值,配置好openai key之后其实就已经可以运行了,它的命令是sgpt,如下:

>> sgpt "介绍下你自己"
我是ShellGPT,您的编程和系统管理助手。我在管理Darwin/MacOS 10.16操作系统,使用zsh
shell。我可以帮助您执行Shell命令,管理系统设置,解决问题,并提供有关编程和系统管理的建议。有什么我可以帮助您的
吗?

  它也提供了一些高级配置,配置文件在 ~/.config/shell_gpt/.sgptrc,具体的含义如下:

CHAT_CACHE_PATH=/var/folders/qt/945fyfdj52x11956lkf15pzw0000gn/T/chat_cache  # 聊天的缓存路径
CACHE_PATH=/var/folders/qt/945fyfdj52x11956lkf15pzw0000gn/T/cache    
CHAT_CACHE_LENGTH=100   # 缓存大小
CACHE_LENGTH=100
REQUEST_TIMEOUT=60  # 聊天超时时间
DEFAULT_MODEL=gpt-3.5-turbo  # 默认的模型,这里我为了省钱切换成gpt3.5了
DEFAULT_COLOR=magenta   # 默认颜色
ROLE_STORAGE_PATH=/Users/xindoo/.config/shell_gpt/roles  # 角色的存储路径
DEFAULT_EXECUTE_SHELL_CMD=false  # 是否自动执行shell,建议设置成false,当前gpt下shell命令的准确还是建议人工review下
DISABLE_STREAMING=false  # 禁用流式响应 
CODE_THEME=dracula  # 代码主题
OPENAI_FUNCTIONS_PATH=/Users/xindoo/.config/shell_gpt/functions  # 函数调用的存储路径,下文会详细介绍
OPENAI_USE_FUNCTIONS=true  # 是否开启函数调用
SHOW_FUNCTIONS_OUTPUT=false  # 是否展示函数调用的执行结果 
API_BASE_URL=default  # openai的服务地址,如果你买了其他比如微软提供的接口,或者其他兼容openai接口的模型,都可以改这里  
PRETTIFY_MARKDOWN=true  # 优先使用markdown格式返回 
USE_LITELLM=false

常用功能

聊天

  这是LLM最基础的功能了,有了sgpt后你就可以实现在命令行里和GPT聊天的功能了,以后摸鱼就不容易被发现了[狗头]。

>>>sgpt "讲个关于程序员的冷笑话"
为什么程序员喜欢雨天? 因为下雨时他们可以在家里“云”端编程!

  上面这种是单轮聊天,如果想通过多轮聊天解决一些比较复杂的问题,可以通过添加--repl (Read–eval–print loop)参数来开启循环响应模式。

>>> sgpt --repl chat1  # chat1是我自定义的聊天id,后续可以通过这个聊天id接着聊 
>>> 你好
你好!有什么可以帮助您的吗?
>>> 你是谁?
我是ShellGPT,您的编程和系统管理助手。您有什么问题或需要帮助的吗?
>>> 我之前问过你什么问题?
您之前问过我关于我的身份和问候的问题。您还有其他问题需要我回答吗?
>>>

  如果你不想通过循环相应模型(repl),只想单次接着之前的记录聊,可以直接使用--chat 参数

>>> sgpt --chat chat1 "复述下我之前说的内容"
你说你之前问过什么问题。

写命令并执行

  GPT诞生后,它的编码能力就已经被验证过了,当然写个脚本自然也不在话下,如果你不知道某个命令如何写,就可以直接让它帮你写出来。当然写命令所有的LLM基本上都可以实现,但是在别的地方调用,你还得把命令copy过来执行。而在sgpt下,它自动帮你生成完你直接确认就可以执行了,通过调整默认配置,你甚至可以让他自动执行。

>>> sgpt -s "统计下a.txt里有多少行文本包含关键词'xindoo'"
grep -c 'xindoo' a.txt
[E]xecute, [D]escribe, [A]bort: E  #这里输入E确定执行,D会解释这个命令,A放弃执行 
2   # 这里是命令的正常执行结果

高级功能

函数调用

  ShellGPT 允许 LLM 执行系统中的函数,从而实现更复杂的功能。例如,你可以使用函数播放音乐、打开网页或执行 shell 命令。在mac系统下,官方已经准备好了执行shell和执行apple script的函数,终端下执行sgpt --install-functions 就可以自动安装了,之后开启函数调用就可以正常使用,当然你也可以在~/.config/shell_gpt/functions路径下,定义自己的函数调用,只需要按照如下代码实现即可:

# execute_shell_command.py
import subprocess
from pydantic import Field
from instructor import OpenAISchema


class Function(OpenAISchema):
    """
    Executes a shell command and returns the output (result).
    """
    shell_command: str = Field(..., example="ls -la", descriptions="Shell command to execute.")

    class Config:
        title = "execute_shell_command"

    @classmethod
    def execute(cls, shell_command: str) -> str:
        result = subprocess.run(shell_command.split(), capture_output=True, text=True)
        return f"Exit code: {result.returncode}, Output:\n{result.stdout}"

角色管理

  ShellGPT也提供了角色管理的功能,类似于openai提供的GPTS,你可以创建自定义角色,这些角色可以用来生成代码、执行shell命令,或者满足用户的特定需求。通过使用--create-role选项并附上角色名称来创建一个新的角色。在创建过程中,你需要为角色提供一个描述以及其他一些细节。这些信息会存储在 ~/.config/shell_gpt/roles 下。在这个目录中,你还可以编辑默认的 sgpt 角色,如 shell、code 和 default。使用 --list-roles 选项可以列出所有可用的角色,而 --show-role 选项可以显示特定角色的详细信息。

  这里我们创建一个角色,它的功能就是将一个时间戳转换成yyyy-MM-dd HH:mm:s 的格式,这里我们就可以这么去做。

>>> sgpt --create-role timestamp_convert
> Enter role description: 将时间戳转化为yyyy-MM-dd HH:mm:s格式的时间,其他不要返回! # 这里输入角色的系统提示词 

## 之后我们就可以通过--role来指定特定的角色执行我们的指令了
>>> sgpt --role timestamp_convert "1714484761"
> @FunctionCall `execute_shell_command(shell_command="date -r 1714484761 '+%Y-%m-%d %H:%M:%S'")`  # 这里触发了函数调用 
2024-04-30 21:46:01    # 这里就是我们想要的结果

总结

  由于文章篇幅的原因,我挑选了大部内容做了介绍,当然ShellGPT还有一些其他的细节需要大家自行去探索。其所有的参数都可以通过sgpt --help 查看,完整的信息如下:

分类参数命令缩写/其他参数描述默认值
基本选项prompt用于生成完成的提示。
--model使用的大型语言模型。gpt-4-1106-preview
--temperature生成输出的随机性。0.0
--top-p限制最高可能的token。1.0
--md美化markdown输出。md
--editor打开$EDITOR来提供提示。no-editor
--cache缓存完成结果。cache
--version显示版本。
--help显示此消息并退出。
辅助选项--shell-s生成并执行shell命令。
--interaction--no-interactionshell选项的交互模式。interaction
--describe-shell-d描述一个shell命令。
--code-c仅生成代码。
--functions--no-functions允许函数调用。functions
聊天选项--chat跟随对话id进行会话,使用"temp"进行快速会话。None
--repl启动REPL(读取-求值-打印循环)会话。None
--show-chat显示提供的聊天id的所有消息。None
--list-chats-lc列出所有现有的聊天id。
角色选项--roleGPT模型的系统角色。None
--create-role创建角色。None
--show-role显示角色。None
--list-roles-lr列出角色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1635725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信源信息数智化招采平台赋能各行业信创生态建设

信创,即“信息化应用创新”,是保障国家数据安全、网络安全的重要基础,也是新基建的重要组成部分。加强IT基础设施、软件、硬件、安全等领域的防护能力,实现国产化自主可控,是招采供应链数字化转型必须面对的课题。 全…

[二叉树] 二叉树的前中后三序遍历#知二求一

标题:[二叉树] 二叉树的前中后三序遍历#知二求一 水墨不写bug (图片来源于网络) 正文开始: 其实这一类题就是考察对二叉树的结构理解,此类题目的二叉树一般通过数组传入,我们只需根据二叉树的就够特点对数…

今日科普:认识颅脑肿瘤

颅脑肿瘤,这个医学名词常常令人心生畏惧,但其实它是指发生在大脑、小脑、脑膜等部位的肿瘤。这些肿瘤可能源于颅内组织,也可能是由身体其他部位的肿瘤转移而来。令人欣慰的是,并非所有颅内肿瘤都是恶性的,良性肿瘤和恶…

windows浅尝NW.js

windows浅尝NW.js 在本指南中,我们将详细介绍如何在windows上部署NW.js,实现应用的构成、启动方式、开发环境 环境部署 首先我们需要从官网下载对应的压缩包 (https://nwjs.io/downloads/) 下载完成后解压,可以看到对应的文件目录 然后我们运行目录下…

【LangChain系列 12】Prompt模版——序列化

本文速读: PromptTemplate FewShotPromptTemplate 通常prompt以文件形式存储比python代码更好,一方面可以更容易共享、存储。本文将介绍在LangChain中如何对prompt以不同的方式序列化。 一般来说,对于序列化有以下两个设计原则&#xff1a…

牛客热题:合并K个升序链表

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:合并K个升序链表题目链接&#…

周三多《管理学原理》第3版/考研真题/章节练习题

普通高等教育“十一五”国家级规划教材《管理学原理》(第3版,周三多、陈传明、龙静编著,南京大学出版社)是我国高校广泛采用的管理学权威教材之一,也被众多高校(包括科研机构)指定为考研考博专业…

开源医疗大模型排行榜: 健康领域大模型基准测试

开源医疗大模型排行榜: 健康领域大模型基准测试 文章目录 开源医疗大模型排行榜: 健康领域大模型基准测试一、引言二、数据集、任务和评估设置1、MedQA2、MedMCQA3、PubMedQA4、MMLU 子集 (医学和生物学) 三、洞察与分析四、提交你的模型以供评估五、下一步是什么?扩…

node.js 解析post请求 方法二

前提:以前面发的node.js解析post请求方法一为模板,具体见 http://t.csdnimg.cn/ABaIn 此文我们运用第二种方法:使用第三方模块formidable对post请求进行解析。 1》代码难点 *** 在Node.js中使用formidable模块来解析POST请求主要涉及到处理…

74、堆-数组中的第K个最大元素

思路&#xff1a; 直接排序是可以的&#xff0c;但是时间复杂度不符合。可以使用优先队列&#xff0c;代码如下&#xff1a; class Solution {public int findKthLargest(int[] nums, int k) {if (numsnull||nums.length0||k<0||k>nums.length){return Integer.MAX_VAL…

网工内推 | 互联网大厂百度、虎牙项目管理岗,15薪,PMP认证优先

01 百度在线 招聘岗位&#xff1a;商业项目管理组_项目管理 职责描述&#xff1a; 1. 商业部核心项目管理工作&#xff0c;主导制定项目目标、计划&#xff0c;推进项目实施及交付&#xff0c;有效管控项目进度、成本、质量、风险等 2. 商业技术/业务创新氛围建设&#xff0c;…

SQL底层执行过程

MySQL 的查询流程 客户端请求连接器 负责与客户端的通信,是半双工模式&#xff08;半双工(Half Duplex)数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。&#xff09;&#xff0c;验证请求用户的账户和密码是否正确&#xff0c;③如果用户的账户和密码验…

Linux基础——Linux开发工具(下)_make/makefile

前言&#xff1a;在经过前面两篇学习&#xff0c;大家对Linux开发工具都有一定的了解&#xff0c;而在此之前最重要的两个工具就是vim&#xff0c;gcc。 如果对这两个工具不太了解&#xff0c;可以先阅读这两篇文章&#xff1a; Linux开发工具 (vim) Linux开发工具 (gcc/g) 首先…

跟TED演讲学英文:Innovating to zero! by Bill Gates

Innovating to zero! Link: https://www.ted.com/talks/bill_gates_innovating_to_zero Speaker: Bill Gates Date: February 2010 文章目录 Innovating to zero!IntroductionVocabularyTranscriptQ&A with Chris AndersonSummary后记 Introduction At TED2010, Bill Ga…

.NET C# ORM 瀚高数据库

SqlSugar ORM SqlSugar 是一款 老牌 .NET开源ORM框架&#xff0c;由果糖大数据科技团队维护和更新 &#xff0c;开箱即用最易上手的ORM 优点 &#xff1a;【生态丰富】【高性能】【超简单】 【功能全面】 【多库兼容】【适合产品】 【SqlSugar视频教程】 支持 &#xff1a…

判断字符串由几个单词组成(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int world 0;int i 0;char c 0;char string[81] { 0 };int num 0;//提示用户&#xff…

一个docker配置mysql主从服务器

这也就是因为穷&#xff0c;不然谁用一个docker配置主从&#xff0c;哈哈 既然成功了就记录下。过程挺折磨人的。 首先要保证你的电脑安装好了docker 为了保证docker当中主从能正常连网&#xff0c;现在docker里面创建一个网络环境 docker network create --driver bridge mysq…

C++-9

C 1.已知C风格的字符串&#xff0c;完成对字符串通过下标访问时的异常处理机制(越界访问) 2.写一个程序&#xff0c;程序包含两个类&#xff0c;类中实现一个成员函数&#xff0c;MyGetChar(), 类A中每调用一 次&#xff0c;按顺序得到一个数字字符&#xff0c;比如第-次调用得…

社交论坛问答发帖系统源码-java+vue+uniapp开发前后端

源码说明&#xff1a; 前后端分离社交论坛问答发帖BBS源码&#xff0c;社交论坛小程序|H5论坛。 下 载 地 址 &#xff1a; runruncode.com/php/19462.html 该项目是一个使用Java、Vue和Uniapp开发的前后端分离的社交论坛问答发帖/BBS项目。它包括了论坛图文帖、视频、圈子…

新唐的nuc980/nuc972的开发1-环境和源码同步

开发环境安装 1.1更新源 服务器端&#xff1a;可以参考&#xff1a;Linux替换清华源_更改清华源-CSDN博客 下面是桌面端的方法&#xff1a; 打开系统的软件中心&#xff0c;选择自己想要使用的源 更新缓存 1.2安装必须的库 apt-get install patch apt-get install libc6-dev …