TTY 中的 ChatGPT 包裝器
筆記
此版本支援gpt4和gpt4-turbo!
gptty 是一個 ChatGPT shell 接口,它允許您 (1) 以類似於 Web 應用程式的方式與 ChatGPT 交互,但不需要依賴 Web 應用程式的穩定性; (2) 在聊天會話中保留上下文並按照您想要的方式建立對話; (3) 儲存對話的本機副本以方便參考。
也許您是系統管理員,正在為您的雇主配置 Web 伺服器。您從實體介面存取系統,具有互聯網連接,但沒有桌面環境或圖形使用者介面。在配置 Web 伺服器時,您會收到一個莫名其妙的錯誤,您將其重定向到一個文件,但又不想費力地使用瀏覽器將其複製到另一個系統,以便查找該錯誤。相反,您安裝 gptty 並使用gptty query --tag error --question "$(cat app.error | tr 'n' ' ')"
等命令將錯誤重定向到聊天用戶端(這將消除換行符)為你)或cat app.error | xargs -d 'n' -I {} gptty query --tag error --question "{}"
(假設您的錯誤只跨越一行)。
或者,您是軟體開發人員或資料科學家,希望透過 ChatGPT 傳輸數據,但希望使用高度抽象的 API 來發出這些請求,而不是熟悉 OpenAI API 及其各種特定於語言的包裝器。當您想要更新程式碼庫以使用不同的模型時,您希望能夠僅修改單個配置文件,並期望查詢回應格式在各種模型之間保持一致。
或者,您可能是愛好者,想要保留對話的本地副本,或者想要對這些對話所採用的分類方法進行更直接的控制。
OpenAI 透過其 API 提供了許多模型。 [1] 目前,gptty 支援Completions
(davinci、curie)和ChatCompletions
(gpt-3.5-turbo、gpt-4)。您需要做的就是在配置中指定模型名稱(預設為 text-davinci-003),應用程式將處理其餘的內容。
您可以在 pip 上安裝gptty
:
pip install gptty
您也可以從 git 安裝:
cd ~/Code # replace this with whatever directory you want to use
git clone https://github.com/signebedi/gptty.git
cd gptty/
# now install the requirements
python3 -m venv venv
source venv/bin/activate
pip install -e .
現在,您可以透過執行gptty --help
來驗證它是否正常運作。如果您遇到錯誤,請嘗試設定應用程式。
gptty
從名為gptty.ini
的檔案中讀取配置設置,除非您傳遞自訂config_file
,否則應用程式預計該檔案位於您執行gptty
同一目錄中。該檔案使用 INI 檔案格式,該格式由多個部分組成,每個部分都有自己的鍵值對。
鑰匙 | 類型 | 預設值 | 描述 |
---|---|---|---|
api_key | 細繩 | ”” | 您的 OpenAI GPT 服務的 API 金鑰 |
組織ID | 細繩 | ”” | 您的 OpenAI GPT 服務的組織 ID |
你的名字 | 細繩 | “問題” | 輸入提示的名稱 |
gpt_名稱 | 細繩 | "回覆" | 產生的回應的名稱 |
輸出檔案 | 細繩 | “輸出.txt” | 將保存輸出的文件的名稱 |
模型 | 細繩 | “文-達文西-003” | 要使用的 GPT 模型的名稱 |
溫度 | 漂浮 | 0.0 | 採樣溫度 |
最大令牌數 | 整數 | 250 | 為回應產生的最大令牌數 |
最大上下文長度 | 整數 | 150 | 輸入上下文的最大長度 |
僅上下文關鍵字 | 布林 | 真的 | 對關鍵字進行標記以減少 API 使用 |
保留新行 | 布林 | 錯誤的 | 保留回覆的原始格式 |
驗證網際網路端點 | 細繩 | “google.com” | 用於驗證網際網路連線的位址 |
您可以修改設定檔中的設定以滿足您的需求。如果設定檔中不存在某個鍵,則將使用預設值。 [main] 部分用於指定程式的設定。
[main]
api_key =my_api_key
此儲存庫提供了一個範例設定檔assets/gptty.ini.example
,您可以將其用作起點。
聊天功能提供了一個互動式聊天介面來與ChatGPT進行通訊。您可以提出問題並即時接收回覆。
若要啟動聊天介面,請執行gptty chat
。您也可以透過執行指定自訂設定檔路徑:
gptty chat --config_path /path/to/your/gptty.ini
在聊天介面中,您可以直接輸入問題或命令。若要查看可用指令的列表,請鍵入:help
,這將顯示下列選項。
元命令 | 描述 |
---|---|
:幫助 | 顯示可用指令及其描述的清單。 |
:辭職 | 退出 ChatGPT。 |
:紀錄 | 顯示目前配置設定。 |
:上下文[a:b] | 顯示上下文歷史記錄,可以選擇指定範圍 a 和 b。開發中 |
要使用命令,只需在命令提示字元中鍵入該命令並按 Enter 鍵即可。例如,使用以下命令顯示終端機中的目前組態設定:
> :configs
api_key: SOME_KEY_HERE
org_id: org-SOME_CHARS_HERE
your_name: question
gpt_name: response
output_file: output.txt
model: text-davinci-003
temperature: 0.0
max_tokens: 250
max_context_length: 5000
您可以隨時在提示中輸入問題,它會為您產生答案。如果您想跨查詢共享上下文,請參閱下面的上下文部分。
查詢功能可讓您向 ChatGPT 提交單一或多個問題並直接在命令列中接收答案。
若要使用查詢功能,請執行以下命令:
gptty query --question "What is the capital of France?" --question "What is the largest mammal?"
您也可以提供可選標籤來對查詢進行分類:
gptty query --question "What is the capital of France?" --tag "geography"
如果需要,您可以指定自訂設定檔路徑:
gptty query --config_path /path/to/your/gptty.ini --question "What is the capital of France?"
請記住,gptty 使用設定檔(預設為 gptty.ini)來儲存 API 金鑰、模型配置和輸出檔案路徑等設定。在執行 gptty 命令之前,請確保您具有有效的設定檔。
透過在聊天和查詢命令末尾添加--verbose
標籤,應用程式將提供額外的偵錯數據,包括每個請求的令牌計數。當您需要追蹤 API 使用率時,這會很有用。
透過將--additional_context [some_string_here]
選項新增至查詢命令中,應用程式將會新增您傳遞的任何字串作為問題的進一步外部上下文。
透過在查詢命令末尾添加--json
標籤,應用程式將跳過將人類可讀的文字寫入標準輸出,而是將問題和回應寫入 json 對象,例如[{"question":QUESTION_1, "response":RESPONSE_1},{"question":QUESTION_1, "response":RESPONSE_1},...]
.
透過在查詢命令末尾添加--quiet
標記,應用程式將跳過向 stdout 寫入任何內容,但仍會將回應寫入應用程式設定檔中指定的output_file
。
在此應用程式中使用chat
和query
子命令時標記上下文文字有助於提高生成回應的準確性。以下是應用程式如何使用chat
命令處理上下文:
bananas
或shakespeare
。[tag]
前綴來將標籤包含在輸入訊息中。例如,如果您的問題的上下文是“烹飪”,您可以將其標記為[cooking]
。確保對所有相關查詢一致使用相同的標籤。以下是使用標記為[shakespeare]
問題的範例。請注意,在第二個問題中,根本沒有提到“威廉·莎士比亞”這個名字。
使用query
命令時,請按照上述相同步驟操作,但不要在問題文字前面新增所需的標籤,而是使用--tag
選項在提交查詢時包含該標籤。例如,如果您的問題的上下文是“烹飪”,您可以使用:
gptty --question "some question" --tag cooking
該應用程式會將您標記的問題和回應保存在設定檔中指定的輸出檔中。
您可以使用 bash 腳本自動執行將多個問題傳送到gptty query
命令的程序。如果您在文件中儲存了問題列表,並且您想要一次處理所有問題,這會特別有用。例如,假設您有一個檔案questions.txt
每個問題都佔一個新行,如下所示。
What are the key differences between machine learning, deep learning, and artificial intelligence?
How do I choose the best programming language for a specific project or task?
Can you recommend some best practices for code optimization and performance improvement?
What are the essential principles of good software design and architecture?
How do I get started with natural language processing and text analysis in Python?
What are some popular Python libraries or frameworks for building web applications?
Can you suggest some resources to learn about data visualization and its implementation in Python?
What are some important concepts in cybersecurity, and how can I apply them to my projects?
How do I ensure that my machine learning models are fair, ethical, and unbiased?
Can you recommend strategies for staying up-to-date with the latest trends and advancements in technology and programming?
您可以使用以下 bash 單行程式碼將questions.txt
檔案中的每個問題傳送到gptty query
命令:
xargs -d ' n ' -I {} gptty query --question " {} " < questions.txt
UniversalCompletion 類別提供了一個統一的接口,用於與 OpenAI 的語言模型交互,(主要)抽像出應用程式是使用 Completion 還是 ChatCompletion 模式的細節。主要思想是促進語言模型的創建、配置和管理。這是一些範例用法。
# First, import the UniversalCompletion class from the gptty library.
from gptty import UniversalCompletion
# Now, we instantiate a new UniversalCompletion object.
# The 'api_key' parameter is your OpenAI API key, which you get when you sign up for the API.
# The 'org_id' parameter is your OpenAI organization ID, which is also provided when you sign up.
g = UniversalCompletion ( api_key = "sk-SOME_CHARS_HERE" , org_id = "org-SOME_CHARS_HERE" )
# This connects to the OpenAI API using the provided API key and organization ID.
g . connect ()
# Now we specify which language model we want to use.
# Here, 'gpt-3.5-turbo' is specified, which is a version of the GPT-3 model.
g . set_model ( 'gpt-3.5-turbo' )
# This method is used to verify the model type.
# It returns a string that represents the endpoint for the current model in use.
g . validate_model_type ( g . model ) # Returns: 'v1/chat/completions'
# We send a request to the language model here.
# The prompt is a question, given in a format that the model understands.
# The model responds with a completion - an extension of the prompt based on what it has learned during training.
# The returned object is a representation of the response from the model.
g . fetch_response ( prompt = [{ "role" : "user" , "content" : "What is an abstraction?" }])
# Returns a JSON response with the assistant's message.