Клиент Python для Copilot (ранее называвшийся Bing Chat), также известный как Sydney.
Примечание
Это неофициальный клиент.
Чтобы установить Sydney.py, выполните следующую команду:
pip install sydney-py
или, если вы используете поэзию:
poetry add sydney-py
Кончик
Убедитесь, что вы используете последнюю версию Sydney.py, чтобы обеспечить лучшую совместимость с Copilot.
Чтобы использовать Sydney.py, сначала необходимо извлечь все файлы cookie с веб-страницы Copilot. Эти файлы cookie используются для аутентификации ваших запросов к API Copilot.
Чтобы получить файлы cookie, выполните следующие действия в Microsoft Edge:
F12
или щелкнув правой кнопкой мыши диалоговое окно чата и выбрав Inspect
).Network
, чтобы просмотреть все запросы, отправленные в Copilot.create?bundleVersion=XYZ
и щелкните его.Cookie:
:.Затем установите ее как переменную среды в вашей оболочке:
export BING_COOKIES= < your-cookies >
или в вашем коде Python:
os . environ [ "BING_COOKIES" ] = "<your-cookies>"
Кончик
В некоторых регионах использование файлов cookie не требуется, и в этом случае приведенные выше инструкции можно пропустить.
Кончик
Также можно использовать расширение Cookie-Editor
, экспортировать файлы cookie в формате Header String
и устанавливать их таким же образом.
Важный
В регионах, где требуется использование файлов cookie, рекомендуется вручную писать сообщения в Copilot до тех пор, пока не появится окно с сообщением Verifying
, которое затем должно переключиться на « Success!
сообщение. Без этого шага возможно, что Sydney.py завершится с ошибкой CaptchaChallenge
.
Вы можете использовать Sydney.py, чтобы легко создать клиент CLI для 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 ())
Вы можете создать Sydney Client и инициализировать соединение с Copilot, которое начнет диалог:
sydney = SydneyClient ()
await sydney . start_conversation ()
# Conversation
await sydney . close_conversation ()
Альтернативно вы можете использовать оператор async with
, чтобы сохранить компактность кода:
async with SydneyClient () as sydney :
# Conversation
Вы можете установить стиль разговора при создании клиента Sydney:
sydney = SydneyClient ( style = "creative" )
Доступные варианты creative
, balanced
и precise
.
Вы можете сбросить разговор, чтобы клиент забыл предыдущий разговор. Вы также можете изменить стиль разговора, не создавая нового клиента:
async with SydneyClient () as sydney :
# Conversation
await sydney . reset_conversation ( style = "creative" )
Вы можете задавать вопросы Copilot и (необязательно) включать цитаты в результаты:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , citations = True )
print ( response )
Вы также можете передать токены ответа:
async with SydneyClient () as sydney :
async for response in sydney . ask_stream ( "When was Bing Chat released?" , citations = True ):
print ( response , end = "" , flush = True )
Обе версии метода ask
поддерживают одни и те же параметры.
Также можно указать URL-адрес изображения или локальный путь к файлу изображения в качестве вложения, которое будет использоваться в качестве входных данных вместе с приглашением:
async with SydneyClient () as sydney :
response = await sydney . ask ( "What does this picture show?" , attachment = "<image-url-or-path>" )
print ( response )
Вы также можете предоставить содержимое веб-страницы в качестве дополнительного контекста, который будет использоваться вместе с приглашением:
async with SydneyClient () as sydney :
response = await sydney . ask ( "Describe the webpage" , context = "<web-page-source>" )
print ( response )
Можно определить, может ли Copilot искать в Интернете информацию для использования в результатах:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , search = False )
print ( response )
Поиск в Интернете включен по умолчанию.
Примечание
Веб-поиск нельзя отключить во время потоковой передачи ответа.
Возможно использование специализированных версий Copilot, подходящих для конкретных задач или разговоров:
async with SydneyClient ( persona = "travel" ) as sydney :
response = await sydney . ask ( "Tourist attractions in Sydney" )
print ( response )
Доступные варианты параметра persona
:
copilot
travel
cooking
fitness
По умолчанию Sydney.py будет использовать образ copilot
.
Вы можете попросить Copilot составить различные типы контента, например электронные письма, статьи, идеи и многое другое:
async with SydneyClient () as sydney :
response = await sydney . compose ( "Why Python is a great language" , format = "ideas" )
print ( response )
Вы также можете передать токены ответа:
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 )
Доступные по умолчанию параметры параметра tone
:
professional
casual
enthusiastic
informational
funny
Также возможно указать любое другое значение параметра tone
.
Доступные варианты параметра format
:
paragraph
email
blogpost
ideas
Доступные варианты параметра length
:
short
medium
long
Обе версии метода compose
поддерживают одни и те же параметры.
Вы также можете получать предлагаемые ответы пользователей, сгенерированные Copilot, вместе с текстовым ответом. Оба ask
и ask_stream
поддерживают эту функцию:
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 )
А также compose
и 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 )
Примечание
Предлагаемые ответы пользователя возвращаются, только если параметр предложения имеет значение true. В противном случае все методы ask
и compose
возвращают только ответ.
Примечание
При использовании метода ask_stream
или compose_stream
с параметром предложения только те предложенные ответы пользователя, которые были возвращены последними, могут содержать значение. Для всех предыдущих итераций предлагаемые ответы пользователя будут None
.
Вы также можете улучшить или изменить результаты compose
, используя предложенные ответы или любую другую подсказку:
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 )
Вы также можете получить необработанный ответ в формате JSON от Copilot вместо текстового ответа. И ask
, и compose
поддерживают эту функцию:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , raw = True )
print ( response )
Вы также можете получить все существующие разговоры, которые были проведены с текущим клиентом:
async with SydneyClient () as sydney :
response = await sydney . get_conversations ()
print ( response )
Если что-то пойдет не так, Sydney.py может выдать одно из следующих исключений:
Исключение | Значение | Решение |
---|---|---|
NoConnectionException | Связи с Copilot не обнаружено. | Повторить попытку |
ConnectionTimeoutException | Время ожидания попытки подключения к Copilot истекло | Повторить попытку |
NoResponseException | От второго пилота не было получено ответа. | Повторите попытку или используйте новый файл cookie. |
ThrottledRequestException | Запрос ограничен | Подождите и повторите попытку |
CaptchaChallengeException | Задача с капчей должна быть решена | Использовать новый файл cookie |
ConversationLimitException | Достигнут лимит разговоров в N сообщений. | Начать новый разговор |
CreateConversationException | Не удалось создать беседу | Повторите попытку или используйте новый файл cookie. |
GetConversationsException | Не удалось получить разговоры | Повторить попытку |
Более подробную документацию и параметры см. в строках документации по коду.
Этот проект лицензируется по лицензии MIT — подробности см. в файле LICENSE.