Aproveite o ChatGPT no seu terminal. 中文
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
para entrar no modo oneshot que descarta as mensagens de contexto para cada solicitação. Inicie guru
com --last
para continuar a última conversa. go install github.com/shafreeck/guru@latest
Guru usa a API aberta do OpenAI para se comunicar com ChatGPT. Obtenha a chave API correspondente fazendo login em sua conta como desenvolvedor.
https://platform.openai.com/account/api-keys
Configure o guru pela primeira vez usando, execute guru config
e insira sua chave de API OpenAI obtida na etapa acima. O uso de um proxy Socks5 é opcional. Você pode ignorar esta etapa usando parâmetros diretamente para o comando, mas é recomendado salvar sua chave secreta no arquivo de configuração.
> guru [text]
Entre no modo de conversação executando diretamente guru
. guru
é na verdade um apelido para o comando guru chat
. Execute guru com o sinalizador --oneshot
para entrar no modo oneshot
; neste modo, o guru elimina as mensagens de contexto para cada pergunta. A sessão é sempre gravada automaticamente. (padrão no diretório ~/.guru/session/
)
> guru cheat
guru cheat
é um alias para o comando guru chat -p Cheatsheet
, que é usado para simplificar a entrada do usuário.
> git diff | guru commit
guru commit
é um apelido para guru chat -p Committer
.
Use o parâmetro --oneshot
para entrar no modo de conversação única. Neste modo, as mensagens de contexto serão descartadas automaticamente. No entanto, se --prompt, -p
especificar um prompt, o conteúdo do prompt será fixado e enviado com cada solicitação.
Use o comando
: message pin
para fixar qualquer mensagem
guru --oneshot
echo list files in this dir in detail | guru cheat | sh
ChatGPT não armazena o contexto da conversa no servidor. Sua capacidade de reconhecimento de contexto é obtida através do envio de todo o conteúdo de contexto do cliente. Conforme definido na API OpenAI, tanto uma pergunta enviada quanto uma resposta respondida são chamadas de mensagem. O conteúdo de uma mensagem é tokenizado em tokens, e há uma limitação do total de tokens enviados e respondidos, que é no máximo 4.096. Uma longa conversa acabaria com as fichas.
O Guru oferece suporte à limpeza automática de mensagens antigas para obter conversas contínuas com uma janela contínua. Porém, às vezes esperamos um controle mais preciso sobre as mensagens enviadas ao ChatGPT. Neste momento, comandos internos do gerenciamento de mensagens podem ser usados para reduzir, excluir ou anexar mensagens manualmente.
Para mensagens que não queremos excluir ou que não queremos que sejam limpas pela janela contínua, podemos fixar mensagens com o comando : message pin
. O modo oneshot usa esse método para fixar a mensagem de prompt, o que mantém o prompt enviado para cada pergunta.
: message list
Lista todas as mensagens atuais, alias :ls
: message delete [id...]
Excluir mensagens, onde os parâmetros são IDs de mensagens que podem excluir várias mensagens ao mesmo tempo: message shrink [expr]
Reduz mensagens, onde expr
é uma expressão de intervalo, é igual à expressão em Golang Slice: begin:end
. Begin ou End podem ser omitidos, por exemplo 5:
, o que significa reter todas as mensagens com ID maior ou igual a 5.message show [id]
Exibe uma determinada mensagem e a renderiza com Markdown. O padrão é exibir a última mensagem.message append
Acrescenta uma mensagem, também disponível com o atalho :append
message pin [id]
Fixa uma mensagem, e a mensagem fixada não será excluída automaticamente pelo mecanismo de redução automática de mensagens e não pode ser excluída pelo comando : message delete
.message unpin [id]
Desafixa uma mensagem Cada vez que guru
é executado, uma sessão é criada automaticamente. O histórico da sessão é salvo no diretório ~/.guru/session/
por padrão. Ao iniciar, você pode especificar um ID de sessão com --session-id, -s
ou restaurar a última sessão com --last
. Se o ID de sessão especificado não existir, ele será criado automaticamente.
O gerenciamento de sessões oferece diversos recursos. Você pode criar e alternar sessões dentro do mesmo Guru REPL. O recurso mais útil do gerenciamento de sessões é a pilha de sessões, que permite o aninhamento de sessões filhas sem interromper a sessão atual. A continuidade da sessão é muito útil, por exemplo, em uma longa conversa ao falar sobre um artigo, espero que as mensagens da conversa sejam gravadas e então verei o histórico claro do bate-papo ao revisar no futuro. O Guru também oferecerá suporte à exportação de históricos de sessões posteriormente.
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
cria uma nova sessão, também pode ser acionada através do alias abreviado :new
.:session remove [sid]
remove uma sessão.:session shrink [expr]
reduz uma sessão, onde expr
é uma expressão de intervalo, semelhante ao comando :message shrink
.:session list
lista todas as sessões, com a sessão atual indicada por *
.:session switch [sid]
muda para uma sessão diferente.:session history
exibe o histórico da sessão.:session stack
exibe o status da pilha da sessão, também pode ser acionado por meio do alias abreviado :stack
.:session stack push
cria uma nova sessão e a coloca na pilha, também pode ser acionada por meio do alias abreviado >
.:session stack pop
retira a sessão atual da pilha, também pode ser acionado por meio do alias abreviado <
. >
é um comando especial que serve como alias para :session stack push
. Quando executado, ele cria uma nova sessão e a coloca na pilha. O prompt de comando anexará um símbolo ">", como guru >>
. <
é um alias para :session stack pop
. Quando executado, ele exibe a sessão superior da pilha e o prompt de comando removerá o símbolo “>”.
Nota: atualmente, apenas os comandos
>
e<
afetarão o prompt de comando. Usar:session stack push/pop
diretamente não terá esse efeito, mas planejamos melhorar o mecanismo no futuro.
Os comandos prompt repo
permitem adicionar ou sincronizar repositórios de prompt. Atualmente, o Guru oferece suporte a dois repositórios de prompts de alta qualidade: awesome-chatgpt-prompts
e awesome-chatgpt-prompts-zh
. Os usuários também podem adicionar seus próprios repositórios favoritos.
Observe que, após o uso inicial, prompts remotos diferentes do Cheatsheet
e Committer
exigirão um comando :prompt repo sync
para sincronizar seus arquivos para uso. Os arquivos de prompt sincronizados serão armazenados no diretório ~/.guru/prompt/
por padrão.
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
Os comandos :prompt
permitem que você use os prompts definidos em seu repositório awesome-chatgpt-prompts
, bem como adicione e sincronize seus próprios repositórios de prompts.
:prompt act as
atua como a função do prompt, também pode ser acionado por meio do alias abreviado :act as
.:prompt list
lista todas as informações de prompt carregadas, também pode ser acionado por meio do alias abreviado :prompts
.:prompt repo add/sync/list
adiciona, sincroniza e lista repositórios de prompt. guru > :act as Linux Terminal
Você pode usar o sinal $
para executar comandos do sistema, e a saída do comando será enviada ao ChatGPT na próxima rodada de conversa. Isto é particularmente útil quando você precisa carregar um arquivo.
Se nenhum comando seguir o sinal $
, o Guru mudará para o modo shell e o prompt de comando mudará para guru $
. Neste modo, qualquer comando digitado será executado como em um shell, e todas as saídas serão enviadas ao ChatGPT na próxima rodada de conversa.
No modo shell, inserir >
retornará ao modo de conversação.
:info
visualizando parâmetros ao vivo:set
definir parâmetros ao vivo 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
O Executor é o recurso mais poderoso e exclusivo do Guru. Ao iniciar o Guru, você pode especificar o executor usando o argumento --executor, -e
. Após cada rodada de chat, o Guru passará a saída do ChatGPT para o executor por meio de stdin. Se --feedback
for especificado, a saída do executor também será retornada ao ChatGPT.
O executor é diferente dos comandos do sistema mencionados acima. Os comandos do sistema apenas enriquecem os meios de entrada de dados através do shell
. Enquanto o executor é usado para lidar com a saída ChatGPT, implementando um loop fechado completo de input
-> output
-> input
. Isso significa que podemos usar o executor durante a conversa para processar mensagens.
Por motivos de segurança, é necessária a confirmação do usuário para cada chamada do executor.
O cenário de uso mais simples é executar o comando retornado pelo ChatGPT através do shell
.
> guru cheat -e sh
Você pode usar o seguinte comando para obter autoconversação do ChatGPT:
> guru -e "guru --dir ./conversation --last" --feedback Hi
O princípio do bate-papo interno é usar outro guru
como executor, definir o --dir
do segundo guru
para seu próprio diretório independente para evitar confusão com o primeiro guru
e definir --last
para restaurar a sessão toda vez que ela for iniciada para manter o contexto da conversa.