在您的终端中享受 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 REPL 中创建和切换会话。会话管理最有用的功能是会话堆栈,它可以在不中断当前会话的情况下嵌套子会话。会话的连续性非常有用,例如在谈论一篇论文时进行长时间的对话,我希望将对话消息记录下来,以便将来审阅时可以看到清晰的聊天记录。 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
每次启动时恢复会话以维持对话的上下文。