在您的終端中享受 ChatGPT。 中文
A guru is a teacher or mentor who is highly respected and knowledgeable in
their field. The term is often associated with spiritual or religious
leaders, but can also refer to experts in other areas such as business,
technology, or health. -- generated by ChatGPT
--oneshot
進入一次性模式,該模式會刪除每個請求的上下文訊息。以--last
開始guru
繼續上次對話。 go install github.com/shafreeck/guru@latest
Guru 使用 OpenAI 的開放 API 與 ChatGPT 進行通訊。以開發者身分登入您的帳戶取得對應的API key。
https://platform.openai.com/account/api-keys
首次使用時設定 guru,執行guru config
並輸入從上述步驟取得的 OpenAI API 金鑰。可以選擇使用socks5 代理程式。您可以繞過此步驟並直接使用命令參數,但建議將您的金鑰儲存到設定檔中。
> guru [text]
直接執行guru
進入對話模式。 guru
其實是guru chat
指令的別名。使用--oneshot
標誌運行 guru 以進入oneshot
模式,在此模式下,guru 會刪除每個詢問的上下文訊息。會話始終自動記錄~/.guru/session/
> guru cheat
guru cheat
是guru chat -p Cheatsheet
指令的別名,用來簡化使用者輸入。
> git diff | guru commit
guru commit
是guru chat -p Committer
的別名。
使用--oneshot
參數進入一次性會話模式。在這種模式下,上下文訊息將被自動丟棄。但是,如果--prompt, -p
指定提示,則提示的內容將被固定並隨每個請求一起提交。
使用
: message pin
指令固定任何訊息
guru --oneshot
echo list files in this dir in detail | guru cheat | sh
ChatGPT 不會在伺服器端儲存對話的上下文。它的上下文感知能力是透過提交客戶端的所有上下文內容來實現的。根據 OpenAI API 中的定義,提交的問題或回覆的答案都稱為訊息。訊息內容被標記為token,提交和回覆的token總數都有限制,最多為4096個。長時間的對話會耗盡代幣。
Guru支援自動清理舊訊息,實現滾動視窗持續通話。然而,有時我們希望對提交給 ChatGPT 的訊息進行更精確的控制。此時,可以使用訊息管理的內部指令來手動收縮、刪除或追加訊息。
對於我們不想刪除或不想被滾動視窗清理的訊息,我們可以使用: message pin
命令固定訊息。 oneshot 模式使用此方法固定提示訊息,從而保留每個問題都會提交的提示。
: message list
列出所有目前訊息,別名:ls
: message delete [id...]
刪除訊息,其中參數為訊息ID,可以同時刪除多個訊息: message shrink [expr]
收縮訊息,其中expr
是範圍表達式,與 Golang Slice 中的表達式相同: begin:end
。 Begin 或 End 可以省略,例如5:
,表示保留所有 ID 大於或等於 5 的訊息。message show [id]
顯示某則訊息並用 Markdown 渲染它。預設顯示最後一條訊息。message append
追加訊息,也可使用快捷方式:append
message pin [id]
固定一則訊息,固定的訊息不會被訊息自動收縮機制自動刪除,也不能被: message delete
指令刪除。message unpin [id]
取消固定訊息每次執行guru
時,都會自動建立一個會話。會話歷史記錄預設保存在~/.guru/session/
目錄中。啟動時,您可以使用--session-id, -s
指定會話 ID 或使用--last
恢復最後一個會話。如果指定的會話 ID 不存在,則會自動建立。
會話管理提供了豐富的功能。會話管理最有用的功能是會話堆疊,它可以在不中斷當前會話的情況下巢狀子會話。會話的連續性非常有用,例如在談論論文時進行長時間對話,我希望將對話訊息記錄下來,以便將來審查時可以看到清晰的聊天記錄。 Guru 稍後也將支援匯出會話歷史記錄。
guru > :session
Available commands:
:session new create a new session
:session remove delete a session
:session shrink shrink sessions
:session list list sessions
:session switch switch a session
:session history print history of current session
:session stack show the session stack
:session stack push create a new session, and stash the current
:session stack pop pop out current session
:session new
建立一個新會話,也可以透過簡寫別名:new
觸發。:session remove [sid]
刪除會話。:session shrink [expr]
收縮會話,其中expr
是範圍表達式,類似:message shrink
指令。:session list
列出所有會話,目前會話以*
表示。:session switch [sid]
切換到不同的會話。:session history
顯示會話歷史記錄。:session stack
顯示會話堆疊狀態,也可以透過簡寫別名:stack
觸發。:session stack push
建立一個新會話並將其推送到堆疊上,也可以透過簡寫別名>
來觸發。:session stack pop
從堆疊中彈出目前會話,也可以透過簡寫別名<
來觸發。>
是一個特殊指令,用作:session stack push
的別名。執行時,它會建立一個新會話並將其推入堆疊。命令提示字元將附加一個“>”符號,例如guru >>
。 <
是:session stack pop
的別名。執行時,它會從堆疊中彈出最頂層的會話,命令提示字元將刪除“>”符號。
注意:目前只有
>
和<
命令會影響命令提示字元。直接使用:session stack push/pop
不會有這種效果,但我們計劃將來改進機制。
prompt repo
命令使您能夠新增或同步提示儲存庫。目前,Guru 支援兩個高品質的提示儲存庫: awesome-chatgpt-prompts
和awesome-chatgpt-prompts-zh
。用戶還可以添加自己喜歡的存儲庫。
請注意,在初次使用時, Cheatsheet
和Committer
以外的遠端提示將需要:prompt repo sync
命令來同步其檔案以供使用。同步的提示檔案預設儲存在~/.guru/prompt/
目錄中。
guru > :prompt
Available commands:
:prompt act as act as a role
:prompt list list all prompts
:prompt repo sync sync prompts with remote repos
:prompt repo add add a remote repo
:prompt repo list list remote repos
Alias commands:
:prompts alias :prompts = :prompt list
:prompt
指令可讓您使用在awesome-chatgpt-prompts
儲存庫中定義的提示,以及新增和同步您自己的提示儲存庫。
:prompt act as
as 充當提示符的角色,也可以透過簡寫別名:act as
來觸發。:prompt list
列出所有載入的提示訊息,也可以透過簡寫別名:prompts
觸發。:prompt repo add/sync/list
新增、同步並列出提示儲存庫。 guru > :act as Linux Terminal
您可以使用$
符號執行系統命令,命令的輸出將在下一輪對話中提交給ChatGPT。當您需要載入文件時,這特別有用。
如果$
符號後面沒有命令,Guru 將切換到 shell 模式,並且命令提示字元將變更為guru $
。在此模式下,您輸入的任何命令都會像在 shell 中一樣執行,並且所有輸出都將在下一輪對話中提交給 ChatGPT。
在 shell 模式下,輸入>
將返回對話模式。
:info
查看即時參數:set
設定即時參數 dir /Users/shafreeck/.guru
filename
openai-api-key sk-************************************************
pin false
prompt
session-id chat-1680879639912-1ec4e509-af5b-4abb-9f4b-bebde2276d96
socks5 localhost:8804
stdin false
timeout 3m0s
------------------------------
chatgpt.frequency_penalty 0
chatgpt.max_tokens 0
chatgpt.model gpt-3.5-turbo
chatgpt.n 1
chatgpt.presence_penalty 0
chatgpt.stop
chatgpt.stream true
chatgpt.temperature 1
chatgpt.top_p 1
chatgpt.user
disable-auto-shrink false
executor
feedback false
non-interactive false
oneshot false
system
verbose false
:set chatgpt.temperature 0.5
執行器是 Guru 最強大、最獨特的功能。啟動 Guru 時,您可以使用--executor, -e
參數指定執行程式。每輪聊天結束後,Guru 都會透過 stdin 將 ChatGPT 輸出傳遞給執行器。如果指定了--feedback
,執行器的輸出也會回饋到ChatGPT。
執行器與上面提到的系統命令不同。系統指令只是豐富了透過shell
輸入資料的手段。而執行器則用於處理ChatGPT的輸出,實現了input
-> output
-> input
的完整閉環。這意味著我們可以在會話期間使用執行器來處理訊息。
出於安全原因,每次執行程式呼叫都需要使用者確認。
最簡單的使用場景是透過shell
執行ChatGPT返回的命令。
> guru cheat -e sh
您可以使用以下指令來實作ChatGPT自對話:
> guru -e "guru --dir ./conversation --last" --feedback Hi
自聊的原理是使用另一個guru
作為執行者,將第二個guru
的--dir
設置為自己獨立的目錄,以避免與第一個guru
混淆,並設置--last
在每次啟動時恢復會話以維持對話的上下文。