Client Python pour Copilot (anciennement nommé Bing Chat), également connu sous le nom de Sydney.
Note
Ceci est un client non officiel .
Pour installer Sydney.py, exécutez la commande suivante :
pip install sydney-py
ou, si vous utilisez de la poésie :
poetry add sydney-py
Conseil
Assurez-vous d'utiliser la dernière version de Sydney.py pour garantir une meilleure compatibilité avec Copilot.
Pour utiliser Sydney.py, vous devez d'abord extraire tous les cookies de la page Web Copilot. Ces cookies sont utilisés pour authentifier vos demandes auprès de l'API Copilot.
Pour obtenir les cookies, suivez ces étapes sur Microsoft Edge :
F12
ou en cliquant avec le bouton droit sur la boîte de dialogue de discussion et en sélectionnant Inspect
).Network
pour afficher toutes les demandes envoyées à Copilot.create?bundleVersion=XYZ
et cliquez dessus.Cookie:
.Ensuite, définissez-le comme variable d'environnement dans votre shell :
export BING_COOKIES= < your-cookies >
ou, dans votre code Python :
os . environ [ "BING_COOKIES" ] = "<your-cookies>"
Conseil
Dans certaines régions, l'utilisation de cookies n'est pas obligatoire, auquel cas les instructions ci-dessus peuvent être ignorées.
Conseil
Il est également possible d'utiliser l'extension Cookie-Editor
, d'exporter les cookies au format Header String
et de les paramétrer de la même manière.
Important
Pour les régions où un cookie est requis, il est recommandé d'écrire manuellement des messages dans Copilot jusqu'à ce qu'une boîte contenant un message Verifying
apparaisse, qui devrait alors passer à un Success!
message. Sans cette étape, il est possible que Sydney.py échoue avec une erreur CaptchaChallenge
.
Vous pouvez utiliser Sydney.py pour créer facilement un client CLI pour 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 ())
Vous pouvez créer un client Sydney et initialiser une connexion avec Copilot qui démarre une conversation :
sydney = SydneyClient ()
await sydney . start_conversation ()
# Conversation
await sydney . close_conversation ()
Alternativement, vous pouvez utiliser l'instruction async with
pour garder le code compact :
async with SydneyClient () as sydney :
# Conversation
Vous pouvez définir le style de conversation lors de la création d'un client Sydney :
sydney = SydneyClient ( style = "creative" )
Les options disponibles sont creative
, balanced
et precise
.
Vous pouvez réinitialiser la conversation afin de faire oublier au client la conversation précédente. Vous pouvez également modifier le style de conversation sans créer de nouveau client :
async with SydneyClient () as sydney :
# Conversation
await sydney . reset_conversation ( style = "creative" )
Vous pouvez poser des questions à Copilot et (éventuellement) inclure des citations dans les résultats :
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , citations = True )
print ( response )
Vous pouvez également diffuser les jetons de réponse :
async with SydneyClient () as sydney :
async for response in sydney . ask_stream ( "When was Bing Chat released?" , citations = True ):
print ( response , end = "" , flush = True )
Les deux versions de la méthode ask
prennent en charge les mêmes paramètres.
Il est également possible de fournir une URL vers une image ou un chemin de fichier image local en pièce jointe, qui sera utilisée comme entrée avec l'invite :
async with SydneyClient () as sydney :
response = await sydney . ask ( "What does this picture show?" , attachment = "<image-url-or-path>" )
print ( response )
Vous pouvez également fournir le contenu d'une page Web comme contexte supplémentaire à utiliser avec l'invite :
async with SydneyClient () as sydney :
response = await sydney . ask ( "Describe the webpage" , context = "<web-page-source>" )
print ( response )
Il est possible de déterminer si Copilot peut rechercher sur le Web des informations à utiliser dans les résultats :
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , search = False )
print ( response )
La recherche sur le Web est activée par défaut.
Note
La recherche sur le Web ne peut pas être désactivée lorsque la réponse est diffusée.
Il est possible d'utiliser des versions spécialisées de Copilot, adaptées à des tâches ou conversations spécifiques :
async with SydneyClient ( persona = "travel" ) as sydney :
response = await sydney . ask ( "Tourist attractions in Sydney" )
print ( response )
Les options disponibles pour le paramètre persona
sont :
copilot
travel
cooking
fitness
Par défaut, Sydney.py utilisera le personnage copilot
.
Vous pouvez demander à Copilot de composer différents types de contenu, tels que des e-mails, des articles, des idées et bien plus encore :
async with SydneyClient () as sydney :
response = await sydney . compose ( "Why Python is a great language" , format = "ideas" )
print ( response )
Vous pouvez également diffuser les jetons de réponse :
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 )
Les options disponibles par défaut pour le paramètre tone
sont :
professional
casual
enthusiastic
informational
funny
Il est également possible de fournir toute autre valeur pour le paramètre tone
.
Les options disponibles pour le paramètre format
sont :
paragraph
email
blogpost
ideas
Les options disponibles pour le paramètre length
sont :
short
medium
long
Les deux versions de la méthode compose
prennent en charge les mêmes paramètres.
Vous pouvez également recevoir les réponses utilisateur suggérées générées par Copilot avec la réponse textuelle. Les deux ask
ask_stream
prennent en charge cette fonctionnalité :
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 )
Et aussi compose
et 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 )
Note
Les réponses utilisateur suggérées sont renvoyées uniquement si le paramètre suggestions est vrai. Sinon, toutes les méthodes ask
et compose
renvoient uniquement la réponse.
Note
Lorsque vous utilisez la méthode ask_stream
ou compose_stream
avec le paramètre suggestions, seules les dernières réponses utilisateur suggérées renvoyées peuvent contenir une valeur. Pour toutes les itérations précédentes, les réponses utilisateur suggérées seront None
.
Vous pouvez également améliorer ou modifier les résultats de compose
en utilisant soit les réponses suggérées, soit toute autre invite :
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 )
Vous pouvez également recevoir la réponse JSON brute provenant de Copilot au lieu d'une réponse textuelle. ask
et compose
prennent en charge cette fonctionnalité :
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , raw = True )
print ( response )
Vous pouvez également recevoir toutes les conversations existantes qui ont été effectuées avec le client actuel :
async with SydneyClient () as sydney :
response = await sydney . get_conversations ()
print ( response )
En cas de problème, Sydney.py peut générer l'une des exceptions suivantes :
Exception | Signification | Solution |
---|---|---|
NoConnectionException | Aucune connexion à Copilot n'a été trouvée | Réessayer |
ConnectionTimeoutException | La tentative de connexion à Copilot a expiré | Réessayer |
NoResponseException | Aucune réponse n'a été renvoyée par Copilot | Réessayez ou utilisez un nouveau cookie |
ThrottledRequestException | La demande est limitée | Attendez et réessayez |
CaptchaChallengeException | Le défi Captcha doit être résolu | Utiliser un nouveau cookie |
ConversationLimitException | Limite de conversation atteinte de N messages | Démarrer une nouvelle conversation |
CreateConversationException | Échec de la création de la conversation | Réessayez ou utilisez un nouveau cookie |
GetConversationsException | Impossible d'obtenir des conversations | Réessayer |
Pour une documentation et des options plus détaillées, veuillez vous référer aux docstrings du code.
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.