Klien Python untuk Copilot (sebelumnya bernama Bing Chat), juga dikenal sebagai Sydney.
Catatan
Ini adalah klien tidak resmi .
Untuk menginstal Sydney.py, jalankan perintah berikut:
pip install sydney-py
atau, jika Anda menggunakan puisi:
poetry add sydney-py
Tip
Pastikan Anda menggunakan Sydney.py versi terbaru untuk memastikan kompatibilitas terbaik dengan Copilot.
Untuk menggunakan Sydney.py, Anda harus mengekstrak semua cookie dari halaman web Copilot terlebih dahulu. Cookie ini digunakan untuk mengautentikasi permintaan Anda ke Copilot API.
Untuk mendapatkan cookie, ikuti langkah-langkah berikut di Microsoft Edge:
F12
atau klik kanan pada dialog obrolan dan pilih Inspect
).Network
untuk melihat semua permintaan yang dikirim ke Copilot.create?bundleVersion=XYZ
dan klik permintaan tersebut.Cookie:
:.Kemudian, tetapkan sebagai variabel lingkungan di shell Anda:
export BING_COOKIES= < your-cookies >
atau, dalam kode Python Anda:
os . environ [ "BING_COOKIES" ] = "<your-cookies>"
Tip
Di beberapa wilayah, penggunaan cookie tidak diperlukan, sehingga petunjuk di atas dapat dilewati.
Tip
Dimungkinkan juga untuk menggunakan ekstensi Cookie-Editor
, mengekspor cookie dalam format Header String
dan mengaturnya dengan cara yang sama.
Penting
Untuk wilayah yang memerlukan cookie, disarankan untuk menulis pesan secara manual ke Copilot hingga kotak berisi pesan Verifying
muncul, yang kemudian akan beralih ke pesan Success!
pesan. Tanpa langkah ini, ada kemungkinan Sydney.py akan gagal dengan kesalahan CaptchaChallenge
.
Anda dapat menggunakan Sydney.py untuk membuat klien CLI untuk Copilot dengan mudah:
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 ())
Anda dapat membuat Klien Sydney dan menginisialisasi koneksi dengan Copilot yang memulai percakapan:
sydney = SydneyClient ()
await sydney . start_conversation ()
# Conversation
await sydney . close_conversation ()
Alternatifnya, Anda dapat menggunakan pernyataan async with
untuk menjaga kode tetap ringkas:
async with SydneyClient () as sydney :
# Conversation
Anda dapat mengatur gaya percakapan saat membuat Klien Sydney:
sydney = SydneyClient ( style = "creative" )
Pilihan yang tersedia adalah creative
, balanced
dan precise
.
Anda dapat mengatur ulang percakapan agar klien melupakan percakapan sebelumnya. Anda juga dapat mengubah gaya percakapan tanpa membuat klien baru:
async with SydneyClient () as sydney :
# Conversation
await sydney . reset_conversation ( style = "creative" )
Anda dapat mengajukan pertanyaan kepada Copilot dan (opsional) menyertakan kutipan dalam hasil:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , citations = True )
print ( response )
Anda juga dapat melakukan streaming token respons:
async with SydneyClient () as sydney :
async for response in sydney . ask_stream ( "When was Bing Chat released?" , citations = True ):
print ( response , end = "" , flush = True )
Kedua versi metode ask
mendukung parameter yang sama.
Dimungkinkan juga untuk memberikan URL ke gambar atau jalur file gambar lokal sebagai lampiran, yang akan digunakan sebagai masukan bersama dengan perintah:
async with SydneyClient () as sydney :
response = await sydney . ask ( "What does this picture show?" , attachment = "<image-url-or-path>" )
print ( response )
Anda juga dapat memberikan konten halaman web sebagai konteks tambahan untuk digunakan bersama dengan perintah:
async with SydneyClient () as sydney :
response = await sydney . ask ( "Describe the webpage" , context = "<web-page-source>" )
print ( response )
Dimungkinkan untuk menentukan apakah Copilot dapat mencari informasi di web untuk digunakan dalam hasil:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , search = False )
print ( response )
Pencarian web diaktifkan secara default.
Catatan
Pencarian web tidak dapat dinonaktifkan ketika respons dialirkan.
Dimungkinkan untuk menggunakan versi Copilot khusus, yang cocok untuk tugas atau percakapan tertentu:
async with SydneyClient ( persona = "travel" ) as sydney :
response = await sydney . ask ( "Tourist attractions in Sydney" )
print ( response )
Opsi yang tersedia untuk parameter persona
adalah:
copilot
travel
cooking
fitness
Secara default, Sydney.py akan menggunakan persona copilot
.
Anda dapat meminta Copilot untuk membuat berbagai jenis konten, seperti email, artikel, ide, dan lainnya:
async with SydneyClient () as sydney :
response = await sydney . compose ( "Why Python is a great language" , format = "ideas" )
print ( response )
Anda juga dapat melakukan streaming token respons:
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 )
Opsi default yang tersedia untuk parameter tone
adalah:
professional
casual
enthusiastic
informational
funny
Dimungkinkan juga untuk memberikan nilai lain untuk parameter tone
.
Opsi yang tersedia untuk parameter format
adalah:
paragraph
email
blogpost
ideas
Opsi yang tersedia untuk parameter length
adalah:
short
medium
long
Kedua versi metode compose
mendukung parameter yang sama.
Anda juga dapat menerima tanggapan pengguna yang disarankan seperti yang dihasilkan oleh Copilot bersama dengan jawaban teks. Keduanya ask
, ask_stream
mendukung fitur ini:
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 )
Dan juga compose
dan 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 )
Catatan
Respons pengguna yang disarankan dikembalikan hanya jika parameter saran benar. Jika tidak, semua metode ask
dan compose
hanya akan mengembalikan respons.
Catatan
Saat menggunakan metode ask_stream
atau compose_stream
dengan parameter saran, hanya tanggapan pengguna yang disarankan yang terakhir dikembalikan yang boleh berisi nilai. Untuk semua iterasi sebelumnya, tanggapan pengguna yang disarankan adalah None
.
Anda juga dapat meningkatkan atau mengubah hasil compose
dengan menggunakan respons yang disarankan atau perintah lainnya:
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 )
Anda juga dapat menerima respons JSON mentah yang berasal dari Copilot, bukan jawaban teks. Baik ask
maupun compose
mendukung fitur ini:
async with SydneyClient () as sydney :
response = await sydney . ask ( "When was Bing Chat released?" , raw = True )
print ( response )
Anda juga dapat menerima semua percakapan yang dilakukan dengan klien saat ini:
async with SydneyClient () as sydney :
response = await sydney . get_conversations ()
print ( response )
Jika terjadi kesalahan, Sydney.py mungkin memberikan salah satu pengecualian berikut:
Pengecualian | Arti | Larutan |
---|---|---|
NoConnectionException | Tidak ada koneksi ke Copilot yang ditemukan | Mencoba kembali |
ConnectionTimeoutException | Waktu upaya untuk terhubung ke Copilot telah habis | Mencoba kembali |
NoResponseException | Tidak ada tanggapan yang dikembalikan dari Copilot | Coba lagi atau gunakan cookie baru |
ThrottledRequestException | Permintaan dibatasi | Tunggu dan coba lagi |
CaptchaChallengeException | Tantangan Captcha harus diselesaikan | Gunakan cookie baru |
ConversationLimitException | Batas percakapan sebanyak N pesan telah tercapai | Mulai percakapan baru |
CreateConversationException | Gagal membuat percakapan | Coba lagi atau gunakan cookie baru |
GetConversationsException | Gagal mendapatkan percakapan | Mencoba kembali |
Untuk dokumentasi dan opsi yang lebih detail, silakan lihat dokumen kode.
Proyek ini dilisensikan di bawah Lisensi MIT - lihat file LISENSI untuk detailnya.