ChatGPT CLI
ChatGPT CLI 提供了一个强大的命令行界面,通过 OpenAI 和 Azure 与 ChatGPT 模型无缝互动,并具有流媒体功能和广泛的配置选项。
目录
功能
- 流媒体模式: 与 GPT 模型的实时互动。
- 查询模式: 与 GPT 模型的单次输入输出互动。
- 互动模式: 互动模式允许更具对话体验的模型互动。当与查询模式结合使用时,会打印令牌使用情况。
- 基于线程的上下文管理: 在每个线程中享受与 GPT 模型的无缝对话体验,就像在 OpenAI 网站上的体验一样。每个独特的线程都有其自身的历史记录,确保在不同的聊天实例中提供相关和连贯的响应。
- 滑动窗口历史记录: 为了保持在令牌限制内,聊天历史记录会自动修剪,同时仍保留必要的上下文。此窗口的大小可以通过
context-window
设置进行调整。 - 来自任意来源的自定义上下文: 您可以在对话中为 GPT 模型提供自定义上下文。该上下文可以从任何来源传递过来,例如本地文件、标准输入,甚至是另一个程序。此灵活性允许模型适应广泛的对话场景。
- 模型列表: 使用
-l
或--list-models
标志访问可用模型列表。 - 线程列表: 使用
--list-threads
标志显示活跃线程列表。 - 高级配置选项: CLI 支持分层配置系统,可以通过默认值、
config.yaml
文件和环境变量指定设置。为了快速调整,提供了各种--set-<value>
标志。要验证当前设置,请使用--config
或-c
标志。 - 可用性说明: 此 CLI 支持 gpt-4 和 gpt-3.5-turbo 模型。然而,chat.openai.com 上使用的特定 ChatGPT 模型可能无法通过 OpenAI API 获取。
安装
使用 Homebrew(macOS)
您可以使用 Homebrew 安装 ChatGPT CLI:
brew tap kardolus/chatgpt-cli && brew install chatgpt-cli
直接下载
若不直接编译,您可以为您的操作系统和架构直接下载预构建的二进制文件,以便快速轻松安装:
Apple Silicon
curl -L -o chatgpt https://github.com/kardolus/chatgpt-cli/releases/latest/download/chatgpt-darwin-arm64 && chmod +x chatgpt && sudo mv chatgpt /usr/local/bin/
macOS Intel 芯片
curl -L -o chatgpt https://github.com/kardolus/chatgpt-cli/releases/latest/download/chatgpt-darwin-amd64 && chmod +x chatgpt && sudo mv chatgpt /usr/local/bin/
Linux (amd64)
curl -L -o chatgpt https://github.com/kardolus/chatgpt-cli/releases/latest/download/chatgpt-linux-amd64 && chmod +x chatgpt && sudo mv chatgpt /usr/local/bin/
Linux (arm64)
curl -L -o chatgpt https://github.com/kardolus/chatgpt-cli/releases/latest/download/chatgpt-linux-arm64 && chmod +x chatgpt && sudo mv chatgpt /usr/local/bin/
Linux (386)
curl -L -o chatgpt https://github.com/kardolus/chatgpt-cli/releases/latest/download/chatgpt-linux-386 && chmod +x chatgpt && sudo mv chatgpt /usr/local/bin/
Windows (amd64)
从此链接下载二进制文件并将其添加到您的 PATH。
选择适合您系统的命令,该命令将下载二进制文件,使其可执行并将其移动到 /usr/local/bin 目录(或 Windows 上的 %PATH%),以便于访问。
快速入门
-
将
OPENAI_API_KEY
环境变量设置为您的 ChatGPT 密钥。要设置环境变量,您可以将以下行添加到您的 shell 配置文件(例如,~/.bashrc, ~/.zshrc, 或 ~/.bash_profile),将 your_api_key 替换为您的实际密钥:export OPENAI_API_KEY="your_api_key"
-
要在 CLI 调用之间启用历史记录跟踪,请使用以下命令创建 ~/.chatgpt-cli 目录:
mkdir -p ~/.chatgpt-cli
一旦此目录到位,CLI 将自动管理您与之交谈的每个“线程”的消息历史。这种历史记录像滑动窗口一样操作,保持上下文在可配置的令牌最大值内。这确保在保持对话上下文和实现最佳性能之间取得平衡。
默认情况下,如果用户未提供特定线程,CLI 使用默认线程并将历史记录存储在
~/.chatgpt-cli/history/default.json
中。有关如何配置thread
参数的更多详细信息,请参见本文档的配置部分。 -
试试看:
chatgpt 荷兰的首都是哪里?
-
要启动交互模式,请使用
-i
或--interactive
标志:chatgpt --interactive
-
要使用管道功能,请创建一个包含一些上下文的文本文件。例如,创建一个名为 context.txt 的文件,内容如下:
Kya 是一只爱游泳和玩取物游戏的顽皮的狗。
然后,使用管道功能将此上下文提供给 ChatGPT:
cat context.txt | chatgpt "Kya 会喜欢什么样的玩具?"
-
要列出所有可用的模型,请使用 -l 或 --list-models 标志:
chatgpt --list-models
-
更多选项,可参阅:
chatgpt --help
配置
ChatGPT CLI 采用三级配置策略,不同优先级分别指定默认值、config.yaml
文件和环境变量。
通用配置
配置变量:
变量 | 描述 | 默认值 |
---|---|---|
name | 环境变量覆盖的前缀。 | 'openai' |
api_key | 您的 OpenAI API 密钥。 | (出于安全性的考虑不设置) |
model | 应用程序使用的 GPT 模型。 | 'gpt-3.5-turbo' |
max_tokens | 单个 API 调用中可以使用的最大令牌数。 | 4096 |
context_window | 一次记住对话的内存限制。 | 8192 |
role | 系统角色 | 'You are a helpful assistant.' |
temperature | 采样温度值,介于 0 和 2 之间。较高的值使输出更随机;较低的值使其更专注和确定性。 | 1.0 |
frequency_penalty | 介于 -2.0 和 2.0 之间的值。正值会根据新词在文本中出现的频率进行处罚。 | 0.0 |
top_p | 采样温度的替代方案,称为核采样,模型考虑 top_p 概率质量的结果。 | 1.0 |
presence_penalty | 介于 -2.0 和 2.0 之间的值。正值会根据新令牌在文本中是否出现进行处罚。 | 0.0 |
thread | 当前聊天线程的名称。每个唯一的线程名称都有其自己的上下文。 | 'default' |
omit_history | 如果为 true,聊天历史将不用于为 GPT 模型提供上下文。 | false |
url | OpenAI API 的基本 URL。 | 'https://api.openai.com' |
completions_path | 完成操作的 API 端点。 | '/v1/chat/completions' |
models_path | 访问模型信息的 API 端点。 | '/v1/models' |
auth_header | API 请求中用于授权的标头。 | 'Authorization' |
auth_token_prefix | 在 auth_header 中,在令牌前需要添加的前缀。 | 'Bearer ' |
command_prompt | 交互模式中的命令提示符。应为单引号。 | '[%datetime] [Q%counter]' |
交互模式的变量:
%date
: 当前日期,格式为YYYY-MM-DD
。%time
: 当前时间,格式为HH:MM:SS
。%datetime
: 当前日期和时间,格式为YYYY-MM-DD HH:MM:SS
。%counter
: 当前会话中的查询总数。%usage
: 总令牌使用量(仅在查询模式下有效)。
可以通过在用户配置文件中提供自己的值来覆盖默认值,该文件名为 .chatgpt-cli/config.yaml
,位于您的主目录中。
用户配置文件的结构与默认配置相似。例如,若要覆盖 model
和 max_tokens
参数,您的文件可能如下所示:
model: gpt-3.5-turbo-16k
max_tokens: 4096
这将模型改为 gpt-3.5-turbo-16k
并将 max_tokens
设置为 4096
。所有其他选项,如 url
、completions_path
和 models_path
,也可以进行类似的修改。如果用户配置文件无法访问或丢失,应用程序将回退到默认配置。
另一种无需手动编辑配置文件就能调整值的方法是使用环境变量。 name
属性构成这些变量的前缀。例如,可以使用 OPENAI_MODEL
环境变量修改 model
。同样,若要在命令执行期间禁用历史记录,请使用:
OPENAI_OMIT_HISTORY=true chatgpt 丹麦的首都是什么?
此方法特别适用于临时更改或测试不同配置。
此外,您可以使用 --config
或 -c
标志查看当前配置。此便捷功能允许用户快速验证当前设置,而无需手动检查配置文件。
chatgpt --config
执行此命令将显示活动配置,包括任何由环境变量或用户配置文件引入的覆盖。
为了方便调整,ChatGPT CLI提供了一些标志,可以快速修改用户配置的config.yaml
中的model
、thread
、context-window
和max_tokens
参数。这些标志是--set-model
、--set-thread
、--set-context-window
和--set-max-tokens
。
例如,要更新模型,请使用以下命令:
chatgpt --set-model gpt-3.5-turbo-16k
此功能允许快速更改关键配置参数,优化您的ChatGPT CLI体验。
Azure配置
对于Azure,使用类似的配置:
name: azure
api_key: <your_key>
model: <not relevant, read from the completions path>
max_tokens: 4096
context_window: 8192
role: You are a helpful assistant.
temperature: 1
top_p: 1
frequency_penalty: 0
presence_penalty: 0
thread: default
omit_history: false
url: https://<your_resource>.openai.azure.com
completions_path: /openai/deployments/<your_deployment>/chat/completions?api-version=<your_api>
models_path: /v1/models
auth_header: api-key
auth_token_prefix: " "
command_prompt: '[%datetime] [Q%counter]'
您可以将API密钥设置在如上所示的config.yaml
文件中,或者将其导出为环境变量:
export AZURE_API_KEY=<your_key>
命令行自动补全
通过我们的新自动补全功能增强您的CLI体验!
启用自动补全
自动补全目前支持以下shell:Bash、Zsh、Fish和PowerShell。要在当前shell会话中激活标志补全,请根据您的shell执行相应的命令:
- Bash
. <(chatgpt --set-completions bash)
- Zsh
. <(chatgpt --set-completions zsh)
- Fish
chatgpt --set-completions fish | source
- PowerShell
chatgpt --set-completions powershell | Out-String | Invoke-Expression
持久化自动补全
为了方便起见,您可以通过将相应的源命令添加到shell的启动文件中,使自动补全在所有新的shell会话中持久存在。以下是每个shell通常使用的文件:
- Bash: 添加到
.bashrc
或.bash_profile
- Zsh: 添加到
.zshrc
- Fish: 添加到
config.fish
- PowerShell: 添加到您的PowerShell配置脚本中
例如,对于Bash,您可以在.bashrc
文件中添加以下行:
. <(chatgpt --set-completions bash)
这确保每次打开新终端窗口时自动启用命令标志自动补全。
开发
要开始开发,请将OPENAI_API_KEY
环境变量设置为您的ChatGPT密钥。按照以下步骤运行测试并构建应用程序:
-
使用以下脚本运行测试:
对于单元测试,运行:
./scripts/unit.sh
对于集成测试,运行:
./scripts/integration.sh
对于合同测试,运行:
./scripts/contract.sh
运行所有测试,请使用:
./scripts/all-tests.sh
-
使用安装脚本构建应用程序:
./scripts/install.sh
-
构建成功后,使用以下命令测试应用程序:
./bin/chatgpt what type of dog is a Jack Russel?
-
如前所述,ChatGPT CLI支持在不同CLI调用间跟踪对话历史记录。此功能在后续交互中将历史记录用作上下文,创造无缝对话体验。
要启用此功能,需要使用以下命令创建一个
~/.chatgpt-cli
目录:mkdir -p ~/.chatgpt-cli
报告问题和贡献
如果您遇到任何问题或有改进建议,请在GitHub上提交一个问题。我们感谢您的反馈和贡献,以帮助改进这个项目。
卸载
如果出于任何原因您希望从系统中卸载ChatGPT CLI应用程序,请按照以下步骤操作:
使用Homebrew(macOS)
如果您使用Homebrew安装了CLI,可以执行:
brew uninstall chatgpt-cli
并移除tap:
brew untap kardolus/chatgpt-cli
macOS / Linux
如果您直接安装了二进制文件,请按照以下步骤操作:
-
移除二进制文件:
sudo rm /usr/local/bin/chatgpt
-
如果您希望移除历史记录跟踪目录,还可以删除
~/.chatgpt-cli
目录:rm -rf ~/.chatgpt-cli
Windows
-
进入系统中
chatgpt
二进制文件的位置,该文件应该在您的PATH中。 -
删除
chatgpt
二进制文件。 -
如果您希望移除历史记录,请进入
~/.chatgpt-cli
目录(~
指您的用户主目录)并删除它。
请注意,历史记录跟踪目录~/.chatgpt-cli
仅包含对话历史记录,不包含任何个人数据。如果有任何顾虑,请在卸载期间随时删除此目录。
有用链接
其他资源
- "通过单个快捷方式立即总结任何文本" on Medium: Dive deep into the capabilities of this CLI tool with this detailed walkthrough.
- 加入对话 on Reddit: Discuss the tool, ask questions, and share your experiences with our growing community.
感谢您使用ChatGPT CLI!