"Skype Ai" の誕生#
一、はじめに#
Microsoft の新しい Bing は、特定の理由から中国本土では利用できません。最初はヘッダーの X-Forwarder-For を変更して地域制限を回避する方法がありましたが、すぐに修正されました。そこで、この記事が生まれました。
二、開始#
Microsoft は NewBing を Skype に導入しました。ユーザーはチャットで NewBing の機能を使用することができます。New Bing が呼び出すモデルは GPT4.0 ですので、Skype で GPT4.0 を無料で利用できることを意味します。残念ながら、Skype で NewBing とのプライベートチャットをするにはまだ「魔法」が必要です。
魔法を使うと
ただし、グループチャットで NewBing を @する場合は魔法を使う必要はありません。突破口を見つけたようです。
しかし、中国本土では Skype は WeChat や QQ ほど広く使われていません。Skype で NewBing を使用するたびに Skype を開き、グループチャットを開き、毎回 NewBing に @する必要があるのは面倒です。そこで、Python スクリプトを使用して Skype の NewBing を呼び出すことにしました。最初は Python の Web スクレイピングを使用して呼び出していましたが、Skype 用の skpy ライブラリがあることを知りました。コード全体は GitHub にありますが、ここでは私が困難だと思ったいくつかの問題について説明します。本文を読みたくない方は、私のGitHubに直接アクセスしてください。
Python で Skype のグループチャットにアクセスする#
skpy を使用して Python でグループチャットにアクセスするには、chats を使用して会話にアクセスする必要があります。chats にはグループ ID がパラメータとして必要です。以下はグループ ID を取得するためのコードです。
loggedInUser = Skype("[email protected]", "password")
getinfo = SkypeChats(loggedInUser)
print(getinfo.recent())
出力される JSON の Topic パラメータは作成したグループチャットの名前です。グループ ID は通常、19:[email protected]
のような形式です。
BingChat を呼び出す#
skpy を使用して Python に接続した後、Python からグループチャットにメッセージを送信することができます。ただし、単純に Python で @NewBing をするだけでは NewBing を呼び出すことはできません。Burp Suite を使用してパケットキャプチャを行った結果、@NewBing するたびに次のようなコードが表示されることがわかりました。
<at id=\"28:cf0e6215-34fe-409b-9e4b-135d7f3aa13b\">Bing</at>
このコードを送信するテキストの前に置くことで、@NewBing をすることができました。ただし、メッセージを送信した後、メッセージをリアルタイムで受信する方法はありませんでした。BingChat は私たちがメッセージを送信した後すぐに返信することはできません。公式ドキュメントには、現在のセッションのメッセージのみを取得することができるメッセージの受信方法が記載されています。私は何度も公式ドキュメントを探し回りましたが、SkypeNewMessageEvent メソッドと SkypeEditMessageEvent メソッド(これらはドキュメントの最後の部分にあり、私は気づかなかった)を見つけるまで、結局見つけることができませんでした。SkypeNewMessageEvent メソッドは最新のメッセージを監視して取得し、SkypeEditMessageEvent メソッドはメッセージの変更を監視して変更後の内容を返します。そうです!Skype はメッセージをリアルタイムで変更することができます。最初は SkypeEditMessageEvent メソッドを使用していませんでしたが、テストの際には簡単な質問しかしていなかったので、NewBing が答えを一言で返すことができたため、問題にはなりませんでした。しかし、何度ものテストの結果、NewBing がいつも途中で話をやめてしまうことに気づきました。これにより、進捗が停滞しました。しかし、私は SkypeEditMessageEvent に気づきました。これにより、メッセージが変更されたかどうかをリアルタイムで監視し、変更後のメッセージを返すことができます。
最終結果#
いくつかの機能を追加した後、最終的には次のような結果を得ました。
コードの取得#
GitHubからコードを取得できます。使用する際は、ぜひスターをつけてください。