Python Client สำหรับ Copilot (เดิมชื่อ Bing Chat) หรือที่รู้จักในชื่อ Sydney
บันทึก
นี่เป็นลูกค้า ที่ไม่เป็นทางการ
หากต้องการติดตั้ง Sydney.py ให้รันคำสั่งต่อไปนี้:
pip install sydney-py
หรือถ้าคุณใช้บทกวี:
poetry add sydney-py
เคล็ดลับ
ตรวจสอบให้แน่ใจว่าคุณใช้ Sydney.py เวอร์ชันล่าสุดเพื่อให้แน่ใจว่าสามารถใช้งานร่วมกับ Copilot ได้ดีที่สุด
หากต้องการใช้ Sydney.py คุณต้องแยกคุกกี้ทั้งหมดออกจากหน้าเว็บ Copilot ก่อน คุกกี้เหล่านี้ใช้เพื่อตรวจสอบคำขอของคุณไปยัง Copilot API
หากต้องการรับคุกกี้ ให้ทำตามขั้นตอนเหล่านี้บน Microsoft Edge:
F12
หรือคลิกขวาที่กล่องโต้ตอบแชทแล้วเลือก Inspect
)Network
เพื่อดูคำขอทั้งหมดที่ส่งไปยัง Copilotcreate?bundleVersion=XYZ
และคลิกที่คำขอนั้นCookie:
จากนั้นตั้งค่าเป็นตัวแปรสภาพแวดล้อมในเชลล์ของคุณ:
export BING_COOKIES= < your-cookies >
หรือในรหัส Python ของคุณ:
os . environ [ "BING_COOKIES" ] = "<your-cookies>"
เคล็ดลับ
ในบางภูมิภาค ไม่จำเป็นต้องใช้คุกกี้ ในกรณีนี้สามารถข้ามคำแนะนำข้างต้นได้
เคล็ดลับ
นอกจากนี้ยังสามารถใช้ส่วนขยาย Cookie-Editor
ส่งออกคุกกี้ในรูปแบบ Header String
และตั้งค่าในลักษณะเดียวกันได้
สำคัญ
สำหรับภูมิภาคที่จำเป็นต้องใช้คุกกี้ ขอแนะนำให้เขียนข้อความด้วยตนเองไปยัง 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 และเริ่มต้นการเชื่อมต่อกับ Copilot ซึ่งเริ่มการสนทนา:
sydney = SydneyClient ()
await sydney . start_conversation ()
# Conversation
await sydney . close_conversation ()
หรือคุณสามารถใช้ async with
คำสั่งเพื่อให้โค้ดมีขนาดกะทัดรัด:
async with SydneyClient () as sydney :
# Conversation
คุณสามารถกำหนดรูปแบบการสนทนาเมื่อสร้างไคลเอนต์ซิดนีย์:
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 )
บันทึก
คำตอบของผู้ใช้ที่แนะนำจะถูกส่งกลับเฉพาะในกรณีที่พารามิเตอร์คำแนะนำเป็นจริง มิฉะนั้น วิธี 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 | ไม่มีการตอบกลับจาก Copilot | ลองอีกครั้งหรือใช้คุกกี้ใหม่ |
ThrottledRequestException | คำขอถูกควบคุมปริมาณ | รอและลองอีกครั้ง |
CaptchaChallengeException | ความท้าทายของแคปต์ชาจะต้องได้รับการแก้ไข | ใช้คุกกี้ใหม่ |
ConversationLimitException | ถึงขีดจำกัดการสนทนาของ N ข้อความแล้ว | เริ่มการสนทนาใหม่ |
CreateConversationException | ไม่สามารถสร้างการสนทนาได้ | ลองอีกครั้งหรือใช้คุกกี้ใหม่ |
GetConversationsException | ไม่สามารถรับการสนทนาได้ | ลองอีกครั้ง |
สำหรับเอกสารและตัวเลือกโดยละเอียดเพิ่มเติม โปรดดูที่เอกสารโค้ด
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT - ดูรายละเอียดในไฟล์ใบอนุญาต