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 许可证获得许可 - 有关详细信息,请参阅许可证文件。