惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
IT之家
IT之家
The Register - Security
The Register - Security
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
The GitHub Blog
The GitHub Blog
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
W
WeLiveSecurity
博客园_首页
A
About on SuperTechFans
G
Google Developers Blog
博客园 - 叶小钗
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
量子位
Google DeepMind News
Google DeepMind News
博客园 - 【当耐特】
aimingoo的专栏
aimingoo的专栏
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 三生石上(FineUI控件)
N
News | PayPal Newsroom
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
AI
AI
TaoSecurity Blog
TaoSecurity Blog
P
Proofpoint News Feed
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 司徒正美
www.infosecurity-magazine.com
www.infosecurity-magazine.com
J
Java Code Geeks
Hacker News - Newest:
Hacker News - Newest: "LLM"
爱范儿
爱范儿
S
SegmentFault 最新的问题
Martin Fowler
Martin Fowler
Vercel News
Vercel News
Schneier on Security
Schneier on Security
Know Your Adversary
Know Your Adversary
H
Heimdal Security Blog
N
News and Events Feed by Topic

XINDOO

关于内卷,几个值得深想的洞察 当创作被 Skill 化:我用 AI 写了一部 320 章的长篇网文 AI第一剑,先斩程序员 AI 也会偷懒?这个 PUA 工具专治“摸鱼式编程” Gstack 深度解析:YC CEO 开源的 AI 工程团队 GitHub Trending霸榜!深度解析AI Coding辅助神器 Superpowers 深度探讨:从 OpenClaw 爆火,看 AI Agent 的真相与程序员的未来 我复刻了NotebookLM的信息图功能 我用AI写了部小说,这里是整个过程 [翻译]我在谷歌14年学到的21堂课 2万字吊打40万字:为什么我的“牛马Agent”比“数字分身”更聪明? 最近AI领域爆火的 Agent Skills 是什么? 从计算机科学的视角来看拖延症 一周改6个库后我悟了:AI时代,程序员正在退化成“甲方” 使用n8n做一个自动同步更新的Github项目问答机器人 Agent设计模式——第 20 章:优先级排序 Agent设计模式——第 1 章:提示词链 Agent设计模式——附录 D - 使用 AgentSpace 构建 Agent Agent设计模式——第 19 章:评估和监控 Agent设计模式——第 10 章:模型上下文协议 (MCP) Agent设计模式——第 21 章:探索和发现 Agent设计模式——智能体设计模式 Agent设计模式——第 11 章:目标设定和监控 Agent设计模式——第 9 章:学习和适应 Agent设计模式——第 16 章:资源感知优化 Agent设计模式——附录 G - 编码 Agent Agent设计模式——第 13 章:人机协同 Agent设计模式——第 17 章:推理技术 Agent设计模式——附录 F - 深入剖析:Agent 推理引擎的内部运作机制 Agent设计模式——章节目录 Agent设计模式—— Agent设计模式——第 7 章:多 Agent 协作 Agent设计模式——附录 E - 命令行界面中的 AI Agent Agent设计模式——附录 C - Agentic 框架快速概览 Agent设计模式——第 3 章:并行化 Agent设计模式——**常见问题解答:Agentic 设计模式** Agent设计模式——第 14 章:知识检索(RAG) Agent设计模式——第 18 章:Guardrails/安全模式 Agent设计模式——第 15 章:Agent 间通信(A2A) Agent设计模式——第 8 章:内存管理 Agent设计模式——第 12 章:异常处理和恢复 Agent设计模式——第 4 章:反思 Agent设计模式——附录 B - AI Agentic 交互:从图形界面到现实世界环境 Agent设计模式——第 5 章:工具使用(函数调用) Agent设计模式——结论 Agent设计模式——第 6 章:规划 Agent设计模式——第 2 章:路由 从经验主义到贝叶斯理论:如何排查线上问题 我用AI为自己造了一把安全的开发者“瑞士军刀”” 从LLM和MCP的协同过程看如何做优化 打通Dify与AI工具生态:将Workflow转为MCP工具的实践 一文了解知识库背后的技术RAG AI应用的五个级别:从入门到专家的进阶之路 一文入门AI圈最近爆火的MCP协议 HTTP/3:性能改进(第 2 部分) deepseek-r1祛魅:从过度热捧到理性认知⁠ 为什么AI智能体需要工作流 如何用GPT-4o解读视频 json命令行处理神器jq介绍 OpenAI的结构化浅析 从大模型的原理到提示词优化 从经济学原理看团队分工合作 [翻译]关于人工智能的30个思考 从马斯洛需求层次理论谈职场激励 知识与智慧 如何使用大语言模型绘制专业图表 两个开源项目打造自己的大模型聚合平台 我让gpt4o给我推荐了一千多次书 得到了这些数据 用Langchain创建一个可以总结网页内容的Agent 关于ffmpeg height not divisible by 2的错误 使用Certbot解决https证书自动更新的问题 Spring Cache简明教程 软件开发中的抓大放小vs极致细节思维 OpenAI Assistants-API简明教程 OpenAI的多函数调用(Multiple Function Calling)简介 如何使用ffmpeg制作透明背景的视频 spring-kafka中ContainerProperties.AckMode详解 如何在地图上寻找最密集点的位置? IO密集型服务提升性能的三种方法 职场中的基本归因错误和自利归因 使用javax.validation.constraints校验参数合法性 Java Optional:让你的代码更优雅 ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力 如何使用ChatGPT提升自己的“码”力? 使用ffmpeg拼接两张图片 ThreadPoolExecutor——高效处理并发任务的必备良器 从CPU的视角看 多线程代码为什么那么难写! 使用ffmpeg缩小视频体积的几种方式 Linux parallel 命令使用手册 为什么说过早优化是万恶之源? Linux xargs命令介绍 深入理解Spring的事件通知机制 Java高并发之CyclicBarrier简介 聊一聊过度设计! 详解Redisson分布式限流的实现原理 Java中使用HashMap时指定初始化容量性能一定会更好吗? 如何用ffmpeg截取视频片段&截取时间不准确的坑 XINDOO的2022年年终总结 使用ffmpeg将视频转成HLS(m3u8)格式 谷歌Guava LoadingCache介绍
推荐一个好用的命令行工具ShellGPT
xindoo · 2024-04-30 · via XINDOO

在这里插入图片描述

  这两天突然想到,现有的很多工具都在被大模型重构,比如诞生了像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-interaction shell选项的交互模式。 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。
角色选项 --role GPT模型的系统角色。 None
--create-role 创建角色。 None
--show-role 显示角色。 None
--list-roles -lr 列出角色。