共计 2088 个字符,预计需要花费 6 分钟才能阅读完成。
背景痛点
作为一名开发者,我经常需要在命令行环境下快速获取技术问题的解答或生成代码片段。虽然 ChatGPT 网页版很好用,但在 CLI 中使用时却遇到不少问题:

- API 调用需要手动构造 HTTP 请求,过程繁琐
- 输出内容缺乏格式化,长文本难以阅读
- 无法保持对话上下文,每次查询都是独立会话
- 缺少自动化集成方案,无法与其他 CLI 工具配合
技术选型
目前主要有两类解决方案:
- 官方 CLI 工具
- 优点:官方维护,稳定性高
-
缺点:功能较基础,缺乏高级特性
-
第三方开源工具(以 chatgpt-cli 和 shell-gpt 为例)
- 优点:
- 支持上下文记忆
- 提供输出格式化选项
- 可扩展性强
- 缺点:需要自行处理 API 密钥等敏感信息
经过对比测试,我最终选择了 shell-gpt 作为主要工具,因为它的以下特性特别适合开发者:
- 支持 Markdown 格式输出
- 可以保存对话历史
- 提供方便的快捷命令
核心实现
安装步骤
# 使用 pip 安装(Python 3.7+ required)pip install shell-gpt
# 设置 API 密钥
export OPENAI_API_KEY="your-api-key"
对于不同的操作系统,还需要注意:
- Linux/macOS:建议将 export 命令加入
~/.bashrc或~/.zshrc - Windows:使用
setx命令永久设置环境变量
基础命令解析
-
简单查询
sgpt "如何用 Python 读取 CSV 文件" -
带上下文的对话
sgpt --chat temp "帮我写个 Python 函数" sgpt --chat temp "现在给这个函数加上类型提示" -
配置选项
# 设置默认模型 sgpt --config model "gpt-4" # 查看当前配置 sgpt --config show
自动化脚本示例
Shell 脚本示例:
#!/bin/bash
# 获取错误日志分析建议
error_log=$(cat /var/log/nginx/error.log | tail -n 20)
analysis=$(sgpt "请分析以下 Nginx 错误日志并给出修复建议:\n$error_log")
echo "修复建议:"
echo "$analysis"
Python 脚本示例:
import os
from subprocess import run, PIPE
def ask_gpt(question):
cmd = f'sgpt"{question}"'
result = run(cmd, shell=True, stdout=PIPE, text=True)
return result.stdout
# 自动生成 Dockerfile
docker_question = """
生成一个 Python 3.9 的 Dockerfile,要求:1. 使用 alpine 基础镜像
2. 安装 pandas 和 numpy
3. 暴露 8080 端口
"""
print(ask_gpt(docker_question))
高级技巧
输出格式化
-
JSON 格式输出:
sgpt "列出 5 种编程语言及其主要用途" --json -
Markdown 转纯文本:
sgpt "解释 RESTful API 设计原则" --markdown | pandoc -f markdown -t plain -
结合 jq 处理 JSON 输出:
sgpt "生成 3 个随机用户名和邮箱" --json | jq -r '.[] | .username +":"+ .email'
上下文保持实现
创建持久化对话会话:
# 创建新会话
sgpt --chat my_session "Python 中如何实现单例模式"
# 继续会话
sgpt --chat my_session "请用装饰器方式实现"
# 查看所有会话
ls ~/.config/shell_gpt/chat_sessions/
工具链集成
-
与 grep 配合搜索代码建议:
sgpt "给出 10 个常用 Linux 命令" | grep -E "^[0-9]+" -
生成 Git 提交信息:
git diff --cached | sgpt "根据这些代码变更生成简洁的 Git 提交信息"
生产环境建议
API 调用频率控制
为避免触发速率限制,建议:
-
在脚本中添加延时:
# 每 30 秒发送一次请求 while read -r question; do sgpt "$question" sleep 30 done < questions.txt -
使用
pv控制查询速率:cat queries.txt | pv -L 1 | xargs -I {} sgpt "{}"
敏感信息处理
-
不要在命令历史中保存 API 密钥:
# 在命令前加空格(需要设置 HISTCONTROL=ignorespace)export OPENAI_API_KEY="your-key" -
使用环境变量文件:
# 在~/.env 文件中设置 source ~/.env
错误处理机制
建议脚本中添加错误检查:
response=$(sgpt "$query" 2>&1)
if [[$? -ne 0]]; then
echo "请求失败: $response" >&2
exit 1
fi
结语
经过一段时间的实践,我发现将 ChatGPT 集成到 CLI 工作流中确实能显著提升开发效率。特别是在以下场景特别有用:
- 快速生成代码模板
- 排查错误信息
- 自动化文档生成
建议你从简单的日常查询开始尝试,逐步构建自己的自动化脚本。如果在使用过程中有好的实践心得,欢迎分享交流。
正文完
