Copilot 的 Python 用戶端(以前稱為 Bing Chat),也稱為 Sydney。
筆記
這是一個非官方客戶。
要安裝 Sydney.py,請執行以下命令:
pip install sydney-py
或者,如果你使用詩歌:
poetry add sydney-py
提示
確保您使用的是最新版本的 Sydney.py,以確保與 Copilot 的最佳相容性。
要使用 Sydney.py,您首先需要從 Copilot 網頁中提取所有 cookie。這些 cookie 用於驗證您向 Copilot API 發出的請求。
若要取得 cookie,請在 Microsoft Edge 上執行下列步驟:
F12
或右鍵點選聊天對話方塊並選擇Inspect
)。Network
標籤可查看傳送至 Copilot 的所有請求。create?bundleVersion=XYZ
請求並點擊它。Cookie:
欄位後的整個值。然後,將其設定為 shell 中的環境變數:
export BING_COOKIES= < your-cookies >
或者,在您的 Python 程式碼中:
os . environ [ "BING_COOKIES" ] = "<your-cookies>"
提示
在某些地區,不需要使用cookie,在這種情況下,可以跳過上述說明。
提示
也可以使用Cookie-Editor
擴展,以Header String
格式匯出 cookie,並以相同的方式設定它們。
重要的
對於需要 cookie 的區域,建議手動將訊息寫入 Copilot,直到出現包含Verifying
訊息的框,然後該框應切換為Success!
訊息.如果沒有此步驟,Sydney.py 可能會因CaptchaChallenge
錯誤而失敗。
您可以使用 Sydney.py 輕鬆為 Copilot 建立 CLI 用戶端:
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 Client 時設定對話風格:
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 )
預設情況下啟用網路搜尋。
筆記
當回應串流時,無法停用 Web 搜尋。
可以使用適合特定任務或對話的專門版本的 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 )
您還可以接收來自 Copilot 的原始 JSON 回應,而不是文字答案。 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 許可證獲得許可 - 有關詳細信息,請參閱許可證文件。