Cliente Python para Copilot (anteriormente denominado Bing Chat), também conhecido como Sydney.
Observação
Este é um cliente não oficial .
Para instalar Sydney.py, execute o seguinte comando:
pip install sydney-py
ou, se você usar poesia:
poetry add sydney-py
Dica
Certifique-se de usar a versão mais recente do Sydney.py para garantir a melhor compatibilidade com o Copilot.
Para usar Sydney.py, primeiro você precisa extrair todos os cookies da página da web do Copilot. Esses cookies são usados para autenticar suas solicitações à API Copilot.
Para obter os cookies, siga estas etapas no Microsoft Edge:
F12
ou clicando com o botão direito na caixa de diálogo de bate-papo e selecionando Inspect
).Network
para visualizar todas as solicitações enviadas ao Copilot.create?bundleVersion=XYZ
e clique nela.Cookie:
:.Em seguida, defina-o como uma variável de ambiente no seu shell:
export BING_COOKIES= < your-cookies >
ou, no seu código Python:
os . environ [ "BING_COOKIES" ] = "<your-cookies>"
Dica
Em algumas regiões, o uso de cookies não é obrigatório; nesse caso, as instruções acima podem ser ignoradas.
Dica
Também é possível utilizar a extensão Cookie-Editor
, exportar os cookies no formato Header String
e configurá-los da mesma forma.
Importante
Para regiões onde um cookie é necessário, é recomendado escrever mensagens manualmente para o Copilot até que apareça uma caixa contendo uma mensagem Verifying
, que deve então mudar para uma mensagem Success!
mensagem. Sem esta etapa, é possível que Sydney.py falhe com um erro CaptchaChallenge
.
Você pode usar Sydney.py para criar facilmente um cliente CLI para o Copilot:
import asyncio
from sydney import SydneyClient
async def main () -> None :
async with SydneyClient () as sydney :
while True :
prompt = input ( "You: " )
if prompt == "!reset" :
await sydney . reset_conversation ()
continue
elif prompt == "!exit" :
break
print ( "Sydney: " , end = "" , flush = True )
async for response in sydney . ask_stream ( prompt ):
print ( response , end = "" , flush = True )
print ( " n " )
if __name__ == "__main__" :
asyncio . run ( main ())
Você pode criar um cliente Sydney e inicializar uma conexão com o Copilot que inicia uma conversa:
sydney = SydneyClient ()
await sydney . start_conversation ()
# Conversation
await sydney . close_conversation ()
Alternativamente, você pode usar a instrução async with
para manter o código compacto:
async with SydneyClient () as sydney :
# Conversation
Você pode definir o estilo de conversa ao criar um cliente Sydney:
sydney = SydneyClient ( style = "creative" )
As opções disponíveis são creative
, balanced
e precise
.
Você pode reiniciar a conversa para fazer o cliente esquecer a conversa anterior. Você também pode alterar o estilo da conversa sem criar um novo cliente:
async with SydneyClient () as sydney :
# Conversation
await sydney . reset_conversation ( style = "creative" )
Você pode fazer perguntas ao Copilot e (opcionalmente) incluir citações nos resultados:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , citations = True )
print ( response )
Você também pode transmitir os tokens de resposta:
async with SydneyClient () as sydney :
async for response in sydney . ask_stream ( "When was Bing Chat released?" , citations = True ):
print ( response , end = "" , flush = True )
Ambas as versões do método ask
suportam os mesmos parâmetros.
Também é possível fornecer uma URL para uma imagem ou um caminho de arquivo de imagem local como anexo, que será usado como entrada junto com o prompt:
async with SydneyClient () as sydney :
response = await sydney . ask ( "What does this picture show?" , attachment = "<image-url-or-path>" )
print ( response )
Você também pode fornecer o conteúdo de uma página da web como contexto adicional a ser usado junto com o prompt:
async with SydneyClient () as sydney :
response = await sydney . ask ( "Describe the webpage" , context = "<web-page-source>" )
print ( response )
É possível determinar se o Copilot pode pesquisar na web informações para usar nos resultados:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , search = False )
print ( response )
A pesquisa na web está habilitada por padrão.
Observação
A pesquisa na Web não pode ser desativada quando a resposta é transmitida.
É possível utilizar versões especializadas do Copilot, adequadas para tarefas ou conversas específicas:
async with SydneyClient ( persona = "travel" ) as sydney :
response = await sydney . ask ( "Tourist attractions in Sydney" )
print ( response )
As opções disponíveis para o parâmetro persona
são:
copilot
travel
cooking
fitness
Por padrão, Sydney.py usará a persona copilot
.
Você pode pedir ao Copilot para redigir diferentes tipos de conteúdo, como e-mails, artigos, ideias e muito mais:
async with SydneyClient () as sydney :
response = await sydney . compose ( "Why Python is a great language" , format = "ideas" )
print ( response )
Você também pode transmitir os tokens de resposta:
async with SydneyClient () as sydney :
async for response in sydney . compose_stream ( "Why Python is a great language" , format = "ideas" ):
print ( response , end = "" , flush = True )
As opções padrão disponíveis para o parâmetro tone
são:
professional
casual
enthusiastic
informational
funny
Também é possível fornecer qualquer outro valor para o parâmetro tone
.
As opções disponíveis para o parâmetro format
são:
paragraph
email
blogpost
ideas
As opções disponíveis para o parâmetro length
são:
short
medium
long
Ambas as versões do método compose
suportam os mesmos parâmetros.
Você também pode receber as respostas sugeridas do usuário geradas pelo Copilot junto com a resposta em texto. Ambos ask
e ask_stream
suportam este recurso:
async with SydneyClient () as sydney :
response , suggested_responses = await sydney . ask ( "When was Bing Chat released?" , suggestions = True )
if suggested_responses :
print ( "Suggestions:" )
for suggestion in suggested_responses :
print ( suggestion )
E também compose
e compose_stream
:
async with SydneyClient () as sydney :
response , suggested_responses = await sydney . compose (
"Why Python is a great language" , format = "ideas" , suggestions = True
)
if suggested_responses :
print ( "Suggestions:" )
for suggestion in suggested_responses :
print ( suggestion )
Observação
As respostas sugeridas do usuário serão retornadas somente se o parâmetro sugestões for verdadeiro. Caso contrário, todos os métodos ask
e compose
retornarão apenas a resposta.
Observação
Ao usar o método ask_stream
ou compose_stream
com o parâmetro Suggestions, apenas as respostas sugeridas do usuário retornadas por último podem conter um valor. Para todas as iterações anteriores, as respostas sugeridas do usuário serão None
.
Você também pode melhorar ou alterar os resultados da compose
usando as respostas sugeridas ou qualquer outro prompt:
async with SydneyClient () as sydney :
response , suggested_responses = await sydney . compose (
prompt = "Why Python is a great language" , format = "ideas" , suggestions = True ,
)
response , suggested_responses = await sydney . compose (
prompt = suggested_responses [ 0 ], format = "ideas" , suggestions = True
)
print ( response )
Você também pode receber a resposta JSON bruta que vem do Copilot em vez de uma resposta de texto. Tanto ask
quanto compose
suportam este recurso:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , raw = True )
print ( response )
Você também pode receber todas as conversas existentes que foram feitas com o cliente atual:
async with SydneyClient () as sydney :
response = await sydney . get_conversations ()
print ( response )
Quando algo dá errado, Sydney.py pode lançar uma das seguintes exceções:
Exceção | Significado | Solução |
---|---|---|
NoConnectionException | Nenhuma conexão com o Copilot foi encontrada | Tentar novamente |
ConnectionTimeoutException | A tentativa de conexão com o Copilot expirou | Tentar novamente |
NoResponseException | Nenhuma resposta foi retornada do Copilot | Tente novamente ou use um novo cookie |
ThrottledRequestException | A solicitação está limitada | Aguarde e tente novamente |
CaptchaChallengeException | O desafio do Captcha deve ser resolvido | Usar novo cookie |
ConversationLimitException | Atingiu o limite de conversas de N mensagens | Iniciar nova conversa |
CreateConversationException | Falha ao criar conversa | Tente novamente ou use um novo cookie |
GetConversationsException | Falha ao obter conversas | Tentar novamente |
Para documentação e opções mais detalhadas, consulte a documentação do código.
Este projeto está licenciado sob a licença MIT - consulte o arquivo LICENSE para obter detalhes.