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

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列出角色。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript转换和校验数字

本节我们使用的案例还是继续之前的银行家应用程序,只不过我们呢增加了两个账号,代码如下: const account1 {owner: Jonas Schmedtmann,movements: [200, 455.23, -306.5, 25000, -642.21, -133.9, 79.97, 1300],interestRate: 1.2, // %pin…

Leetcode 145:二叉树的后序遍历(迭代法)

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 思路: 迭代法的思路是,使用栈,一层一层的将树节点遍历入栈。 比如下面这个树,使用迭代法,1)第一层,让根节点入栈。2&a…

20240428如何利用IDM下载磁链视频

缘起: https://weibo.com/tv/show/1034:4864336909500449 中国获奖独立纪录片《阿辉》揭秘红灯区“教父”的生存法则 5,751次观看 1年前 发布于 陕西 身为里中横 67.7万粉丝 互联网科技博主 微博原创视频博主 头条文章作者 https://weibo.com/tv/show/1034:4864…

树莓派驱动开发----spi flash设备w25q64开发

这期使用的是spi驱动开发框架&#xff0c;其实spi和iic合起来有一个 Regmap 子系统&#xff0c;下回讲这个&#xff01;&#xff01; 使用方法 &#xff1a;./w25q64App /dev/w25q64-device <cmd> <address> <cnt> <data> ... 可读写擦&#xff0…

代码审计之SAST自动化

前言: 很久没写文章了&#xff0c;有点忙&#xff0c;落个笔&#xff0c;分享一些捣鼓或说适配好的一些好玩的东西。 脚本工具不开源&#xff0c;给一些思路&#xff0c;希望能给大家带来一些收获。 笔者能力有限&#xff0c;如有错误&#xff0c;欢迎斧正。 正文&#xff1a…

文件分块+断点续传 实现大文件上传全栈解决方案(前端+nodejs)

1. 文件分块 将大文件切分成较小的片段&#xff08;通常称为分片或块&#xff09;&#xff0c;然后逐个上传这些分片。这种方法可以提高上传的稳定性&#xff0c;因为如果某个分片上传失败&#xff0c;只需要重新上传该分片而不需要重新上传整个文件。同时&#xff0c;分片上传…

linux 搭建知识库文档系统 mm-wiki

目录 一、前言 二、常用的知识库文档工具 2.1 PingCode 2.2 语雀 2.3 Tettra 2.4 Zoho Wiki 2.5 Helpjuice 2.6 SlimWiki 2.7 Document360 2.8 MM-Wiki 2.9 其他工具补充 三、MM-Wiki 介绍 3.1 什么是MM-Wiki 3.2 MM-Wiki 特点 四、搭建MM-Wiki前置准备 4.1 前置…

带环链表及例题

环形链表&#xff0c;链表中的尾节点指向链表中的某个节点导致形成循环的链表。 通过图可以这样表示。 我们一般采用快慢指针的方式解决带环链表的题目&#xff0c;下面直接上例题 环形链表 力扣链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 让我们判断一个…

渗透测试之sql注入绕过技巧

在sql注入中&#xff0c;通常会将某些关键的字符过滤掉&#xff0c;以此来达到预防sql注入的目的。这时我们就可以通过某些技巧来绕过。 绕过技巧1&#xff1a; 这个是在某个比赛中出现的&#xff0c;当时并没有多少人成功绕过。 如下&#xff1a; 如下图&#xff1a;在php中…

Django前后端项目部署

Django前后端分离项目部署 本文采用阿里云服务器&#xff0c;centos7.9操作系统 本文默认服务器已安装nginx,mysql并且可以正常运行Django vue uwsgi nginx注意&#xff1a;先部署后端&#xff0c;使用postman测试请求没有问题后在修改vue中的axios文件中baseURL&#xff0…

PLC通过Modbus转Profinet网关连接变频器与电机通讯

Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;是一种能够实现Modbus协议和Profinet协议之间转换的设备。Modbus转Profinet网关可提供单个或多个RS485接口&#xff0c;PLC作为控制中枢&#xff0c;变频器作为控制电机转速&#xff0c;通过Modbus转Profinet网关&#…

美国站群服务器的定义、功能以及在网站运营中的应用

美国站群服务器的定义、功能以及在网站运营中的应用 在当今互联网的蓬勃发展中&#xff0c;站群服务器已成为网站运营和SEO优化中不可或缺的重要工具之一。尤其是美国站群服务器&#xff0c;在全球范围内备受关注。本文将深入探讨美国站群服务器的定义、功能以及在网站运营中的…

【城市】应届生第一次打工需要知道的常识(薪资结构,社保,五险二金,个税,专项扣除)

【城市】应届生第一次打工需要知道的常识&#xff08;薪资结构&#xff0c;社保&#xff0c;五险二金&#xff0c;个税&#xff0c;专项扣除&#xff09; 文章目录 1、什么是应届生 & 如何界定应届生2、社保&#xff0c;五险一金&#xff0c;五险二金3、薪资结构&#xff0…

运存与内存?内存与存储? 傻傻分不清

主页: 元存储博客 图片来源: Blackblaze 文章目录 名词为何“内存”的含义混乱内存和存储含义内存和存储作用RAM 与 存储差异速度和性能容量和尺寸易失性和持久性常见问题:总结名词 内存: Memory,如内存条 存储器: Storage, 包括硬盘等 为何“内存”的含义混乱 <

class089 贪心经典题目专题1【左程云算法】

class089 贪心经典题目专题1【左程云算法】 前言版权推荐class089 贪心经典题目专题1code1 179. 最大数code2 1029. 两地调度code3 1553. 吃掉 N 个橘子的最少天数code4 253. 会议室IIcode5 630. 课程表 IIIcode6 1167. 连接棒材的最低费用(leetcode测试)code6 P1090 连接棒材的…

C进阶-数据的存储

文章目录 1. 数据类型介绍类型的基本归类 2. 整型在内存中的存储:原码,反码,补码2.1. 原码,反码,补码 2.2. 大小端介绍大端字节序存储小端字节序存储例:设计程序判断是大端还是小端? 2.3. 练习练习1练习2练习3练习4 3. 浮点型在内存中的存储 1. 数据类型介绍 数据类型数据类型…

YARN详解

YARN 简介 YARN 是Yet Another Resource Negotiator的缩写。 YARN是第二代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的;通俗讲就是资源管理器. YARN核心思想: 将 MR1 中资源管理和作业调度两个功能分…

node.js 解析post请求 方法二

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

读(用知云翻译)gaitedge论文

文章目录 前言摘要一、介绍二、相关工作2.1步态识别2.2端到端学习 三、跨域问题四、我们的框架4.1步法合成4.2步态对准模块 五、实验5.1设置5.2性能比较5.3消融实验5.4可视化 六、结论 前言 本篇博客仅为个人学习&#xff0c;全文均为知云翻译&#xff0c;如有翻译不当&#x…

Android中的屏幕刷新机制(动画视频形象说明机制)

一&#xff0c;刷新率和帧率&#xff0c;60hz和60fps的区别 在Android系统中&#xff0c;刷新率和帧率是两个不同的概念&#xff0c;它们各自在显示过程中扮演着不同的角色。以下是对它们的详细解释&#xff1a; 刷新率&#xff0c;单位是Hz&#xff0c;是指屏幕在一秒内刷新…