Python-Client für Copilot (früher Bing Chat genannt), auch bekannt als Sydney.
Notiz
Dies ist ein inoffizieller Kunde.
Führen Sie den folgenden Befehl aus, um Sydney.py zu installieren:
pip install sydney-py
oder, wenn Sie Poesie verwenden:
poetry add sydney-py
Tipp
Stellen Sie sicher, dass Sie die neueste Version von Sydney.py verwenden, um die beste Kompatibilität mit Copilot zu gewährleisten.
Um Sydney.py verwenden zu können, müssen Sie zunächst alle Cookies von der Copilot-Webseite extrahieren. Diese Cookies werden zur Authentifizierung Ihrer Anfragen an die Copilot-API verwendet.
Um die Cookies zu erhalten, befolgen Sie diese Schritte auf Microsoft Edge:
F12
drücken oder mit der rechten Maustaste auf das Chat-Dialogfeld klicken und Inspect
auswählen).Network
, um alle an Copilot gesendeten Anfragen anzuzeigen.create?bundleVersion=XYZ
und klicken Sie darauf.Cookie:
.Legen Sie es dann als Umgebungsvariable in Ihrer Shell fest:
export BING_COOKIES= < your-cookies >
oder in Ihrem Python-Code:
os . environ [ "BING_COOKIES" ] = "<your-cookies>"
Tipp
In einigen Regionen ist die Verwendung von Cookies nicht erforderlich. In diesem Fall können die obigen Anweisungen übersprungen werden.
Tipp
Es ist auch möglich, die Cookie-Editor
Erweiterung zu verwenden, die Cookies im Header String
-Format zu exportieren und sie auf die gleiche Weise festzulegen.
Wichtig
Für Regionen, in denen ein Cookie erforderlich ist, wird empfohlen, manuell Nachrichten an Copilot zu schreiben, bis ein Feld mit einer Verifying
erscheint, die dann auf Success!
umschalten sollte. Nachricht. Ohne diesen Schritt ist es möglich, dass Sydney.py mit einem CaptchaChallenge
Fehler fehlschlägt.
Mit Sydney.py können Sie ganz einfach einen CLI-Client für Copilot erstellen:
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 ())
Sie können einen Sydney-Client erstellen und eine Verbindung mit Copilot initialisieren, wodurch eine Konversation gestartet wird:
sydney = SydneyClient ()
await sydney . start_conversation ()
# Conversation
await sydney . close_conversation ()
Alternativ können Sie die async with
-Anweisung verwenden, um den Code kompakt zu halten:
async with SydneyClient () as sydney :
# Conversation
Sie können den Konversationsstil beim Erstellen eines Sydney-Clients festlegen:
sydney = SydneyClient ( style = "creative" )
Die verfügbaren Optionen sind creative
, balanced
und precise
.
Sie können das Gespräch zurücksetzen, damit der Kunde das vorherige Gespräch vergisst. Sie können den Gesprächsstil auch ändern, ohne einen neuen Kunden zu erstellen:
async with SydneyClient () as sydney :
# Conversation
await sydney . reset_conversation ( style = "creative" )
Sie können Copilot Fragen stellen und (optional) Zitate in die Ergebnisse einbeziehen:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , citations = True )
print ( response )
Sie können die Antworttokens auch streamen:
async with SydneyClient () as sydney :
async for response in sydney . ask_stream ( "When was Bing Chat released?" , citations = True ):
print ( response , end = "" , flush = True )
Beide Versionen der ask
-Methode unterstützen dieselben Parameter.
Es ist auch möglich, eine URL zu einem Bild oder einen lokalen Bilddateipfad als Anhang bereitzustellen, der zusammen mit der Eingabeaufforderung als Eingabe verwendet wird:
async with SydneyClient () as sydney :
response = await sydney . ask ( "What does this picture show?" , attachment = "<image-url-or-path>" )
print ( response )
Sie können auch den Inhalt einer Webseite als zusätzlichen Kontext bereitstellen, der zusammen mit der Eingabeaufforderung verwendet wird:
async with SydneyClient () as sydney :
response = await sydney . ask ( "Describe the webpage" , context = "<web-page-source>" )
print ( response )
Es ist möglich festzustellen, ob Copilot das Internet nach Informationen durchsuchen kann, die in den Ergebnissen verwendet werden können:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , search = False )
print ( response )
Die Suche im Internet ist standardmäßig aktiviert.
Notiz
Die Websuche kann nicht deaktiviert werden, wenn die Antwort gestreamt wird.
Es ist möglich, spezielle Versionen von Copilot zu verwenden, die für bestimmte Aufgaben oder Gespräche geeignet sind:
async with SydneyClient ( persona = "travel" ) as sydney :
response = await sydney . ask ( "Tourist attractions in Sydney" )
print ( response )
Die verfügbaren Optionen für den persona
-Parameter sind:
copilot
travel
cooking
fitness
Standardmäßig verwendet Sydney.py die copilot
Persona.
Sie können Copilot bitten, verschiedene Arten von Inhalten zu verfassen, z. B. E-Mails, Artikel, Ideen und mehr:
async with SydneyClient () as sydney :
response = await sydney . compose ( "Why Python is a great language" , format = "ideas" )
print ( response )
Sie können die Antworttokens auch streamen:
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 )
Die standardmäßig verfügbaren Optionen für den tone
sind:
professional
casual
enthusiastic
informational
funny
Es ist auch möglich, einen beliebigen anderen Wert für den tone
anzugeben.
Die verfügbaren Optionen für den format
sind:
paragraph
email
blogpost
ideas
Die verfügbaren Optionen für den length
sind:
short
medium
long
Beide Versionen der compose
-Methode unterstützen dieselben Parameter.
Sie können auch die von Copilot generierten vorgeschlagenen Benutzerantworten zusammen mit der Textantwort erhalten. Sowohl ask
als auch ask_stream
unterstützen diese Funktion:
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 )
Und auch compose
und 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 )
Notiz
Die vorgeschlagenen Benutzerantworten werden nur zurückgegeben, wenn der Vorschlagsparameter wahr ist. Andernfalls geben alle ask
und compose
-Methoden nur die Antwort zurück.
Notiz
Bei Verwendung der Methode ask_stream
oder compose_stream
mit dem Parameter „Suggestions“ dürfen nur die zuletzt zurückgegebenen vorgeschlagenen Benutzerantworten einen Wert enthalten. Für alle vorherigen Iterationen lauten die vorgeschlagenen Benutzerantworten None
.
Sie können die Ergebnisse von compose
auch verbessern oder ändern, indem Sie entweder die vorgeschlagenen Antworten oder eine andere Eingabeaufforderung verwenden:
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 )
Sie können anstelle einer Textantwort auch die rohe JSON-Antwort von Copilot erhalten. Sowohl ask
als auch compose
unterstützen diese Funktion:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , raw = True )
print ( response )
Sie können auch alle bestehenden Gespräche empfangen, die mit dem aktuellen Kunden geführt wurden:
async with SydneyClient () as sydney :
response = await sydney . get_conversations ()
print ( response )
Wenn etwas schief geht, löst Sydney.py möglicherweise eine der folgenden Ausnahmen aus:
Ausnahme | Bedeutung | Lösung |
---|---|---|
NoConnectionException | Es wurde keine Verbindung zu Copilot gefunden | Wiederholen |
ConnectionTimeoutException | Zeitüberschreitung beim Verbindungsversuch mit Copilot | Wiederholen |
NoResponseException | Es kam keine Antwort von Copilot | Versuchen Sie es erneut oder verwenden Sie ein neues Cookie |
ThrottledRequestException | Die Anfrage wird gedrosselt | Warten Sie und versuchen Sie es erneut |
CaptchaChallengeException | Captcha-Herausforderung muss gelöst werden | Neues Cookie verwenden |
ConversationLimitException | Konversationslimit von N Nachrichten erreicht | Beginnen Sie ein neues Gespräch |
CreateConversationException | Konversation konnte nicht erstellt werden | Versuchen Sie es erneut oder verwenden Sie ein neues Cookie |
GetConversationsException | Konversationen konnten nicht abgerufen werden | Wiederholen |
Ausführlichere Dokumentation und Optionen finden Sie in den Code-Dokumentzeichenfolgen.
Dieses Projekt ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie in der LIZENZ-Datei.