Cliente Python para Copilot (anteriormente llamado Bing Chat), también conocido como Sydney.
Nota
Este es un cliente no oficial .
Para instalar Sydney.py, ejecute el siguiente comando:
pip install sydney-py
o, si usas poesía:
poetry add sydney-py
Consejo
Asegúrese de utilizar la última versión de Sydney.py para garantizar la mejor compatibilidad con Copilot.
Para utilizar Sydney.py, primero debe extraer todas las cookies de la página web de Copilot. Estas cookies se utilizan para autenticar sus solicitudes en la API de Copilot.
Para obtener las cookies, siga estos pasos en Microsoft Edge:
F12
o haciendo clic derecho en el cuadro de diálogo de chat y seleccionando Inspect
).Network
para ver todas las solicitudes enviadas a Copilot.create?bundleVersion=XYZ
y haga clic en ella.Cookie:
:.Luego, configúrelo como una variable de entorno en su shell:
export BING_COOKIES= < your-cookies >
o, en su código Python:
os . environ [ "BING_COOKIES" ] = "<your-cookies>"
Consejo
En algunas regiones, no es obligatorio el uso de cookies, en cuyo caso se pueden omitir las instrucciones anteriores.
Consejo
También es posible utilizar la extensión Cookie-Editor
, exportar las cookies en formato Header String
y configurarlas de la misma manera.
Importante
Para las regiones donde se requiere una cookie, se recomienda escribir mensajes manualmente en Copilot hasta que aparezca un cuadro que contenga un mensaje Verifying
, que luego debería cambiar a Success!
mensaje. Sin este paso, es posible que Sydney.py falle con un error CaptchaChallenge
.
Puede utilizar Sydney.py para crear fácilmente un cliente CLI para 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 ())
Puede crear un Cliente Sydney e inicializar una conexión con Copilot que inicia una conversación:
sydney = SydneyClient ()
await sydney . start_conversation ()
# Conversation
await sydney . close_conversation ()
Alternativamente, puede usar la instrucción async with
para mantener el código compacto:
async with SydneyClient () as sydney :
# Conversation
Puede configurar el estilo de conversación al crear un Cliente de Sydney:
sydney = SydneyClient ( style = "creative" )
Las opciones disponibles son creative
, balanced
y precise
.
Puede restablecer la conversación para que el cliente olvide la conversación anterior. También puedes cambiar el estilo de conversación sin crear un nuevo cliente:
async with SydneyClient () as sydney :
# Conversation
await sydney . reset_conversation ( style = "creative" )
Puede hacerle preguntas a Copilot y (opcionalmente) incluir citas en los resultados:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , citations = True )
print ( response )
También puedes transmitir los tokens de respuesta:
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 versiones del método ask
admiten los mismos parámetros.
También es posible proporcionar una URL a una imagen o una ruta de archivo de imagen local como archivo adjunto, que se utilizará como entrada junto con el mensaje:
async with SydneyClient () as sydney :
response = await sydney . ask ( "What does this picture show?" , attachment = "<image-url-or-path>" )
print ( response )
También puede proporcionar el contenido de una página web como contexto adicional para usar junto con el mensaje:
async with SydneyClient () as sydney :
response = await sydney . ask ( "Describe the webpage" , context = "<web-page-source>" )
print ( response )
Es posible determinar si Copilot puede buscar en la web información para usar en los resultados:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , search = False )
print ( response )
La búsqueda en la web está habilitada de forma predeterminada.
Nota
La búsqueda web no se puede desactivar cuando se transmite la respuesta.
Es posible utilizar versiones especializadas de Copilot, adecuadas para tareas o conversaciones específicas:
async with SydneyClient ( persona = "travel" ) as sydney :
response = await sydney . ask ( "Tourist attractions in Sydney" )
print ( response )
Las opciones disponibles para el parámetro persona
son:
copilot
travel
cooking
fitness
De forma predeterminada, Sydney.py utilizará la persona copilot
.
Puede pedirle a Copilot que redacte diferentes tipos de contenido, como correos electrónicos, artículos, ideas y más:
async with SydneyClient () as sydney :
response = await sydney . compose ( "Why Python is a great language" , format = "ideas" )
print ( response )
También puedes transmitir los tokens de respuesta:
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 )
Las opciones predeterminadas disponibles para el parámetro tone
son:
professional
casual
enthusiastic
informational
funny
También es posible proporcionar cualquier otro valor para el parámetro tone
.
Las opciones disponibles para el parámetro format
son:
paragraph
email
blogpost
ideas
Las opciones disponibles para el parámetro length
son:
short
medium
long
Ambas versiones del método compose
admiten los mismos parámetros.
También puede recibir las respuestas de usuario sugeridas generadas por Copilot junto con la respuesta de texto. Tanto ask
como ask_stream
admiten esta función:
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 )
Y también compose
y 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 )
Nota
Las respuestas de usuario sugeridas se devuelven solo si el parámetro de sugerencias es verdadero. De lo contrario, todos los métodos ask
y compose
devuelven solo la respuesta.
Nota
Cuando se utiliza el método ask_stream
o compose_stream
con el parámetro sugerencias, solo las últimas respuestas de usuario sugeridas devueltas pueden contener un valor. Para todas las iteraciones anteriores, las respuestas sugeridas para los usuarios serán None
.
También puede mejorar o alterar los resultados de compose
utilizando las respuestas sugeridas o cualquier otro mensaje:
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 )
También puede recibir la respuesta JSON sin formato que proviene de Copilot en lugar de una respuesta de texto. Tanto ask
como compose
admiten esta función:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , raw = True )
print ( response )
También puede recibir todas las conversaciones existentes que se realizaron con el cliente actual:
async with SydneyClient () as sydney :
response = await sydney . get_conversations ()
print ( response )
Cuando algo sale mal, Sydney.py puede generar una de las siguientes excepciones:
Excepción | Significado | Solución |
---|---|---|
NoConnectionException | No se encontró conexión con Copilot | Rever |
ConnectionTimeoutException | Se agotó el tiempo de espera del intento de conexión con Copilot | Rever |
NoResponseException | No se obtuvo respuesta de Copilot | Reintentar o utilizar una nueva cookie |
ThrottledRequestException | La solicitud está limitada | Espera y vuelve a intentarlo |
CaptchaChallengeException | El desafío Captcha debe resolverse | Usar nueva cookie |
ConversationLimitException | Se alcanzó el límite de conversación de N mensajes | Iniciar nueva conversación |
CreateConversationException | No se pudo crear la conversación | Reintentar o utilizar una nueva cookie |
GetConversationsException | No se pudieron obtener conversaciones | Rever |
Para obtener documentación y opciones más detalladas, consulte las cadenas de documentación del código.
Este proyecto tiene la licencia MIT; consulte el archivo de LICENCIA para obtener más detalles.