【Python】EdgeGPTを用いてAPI(Bing AI Chat)からデータを取得する
今回はEdgeGPTを用います。このライブラリ・モジュールはPythonの標準ライブラリではありませんので、事前にインストールが必要となります。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows11)
■認証情報の取得と準備
Bing AI Chatからデータを取得しますがPC環境にMicrosoft Edgeの最新バージョンをインストールしておく必要があります。
インストール後、GoogleChrome(https://chrome.google.com/webstore/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm)またはFirefox(https://addons.mozilla.org/en-US/firefox/addon/cookie-editor/)のCookie エディター拡張機能をインストールします。
今回はGoogleChromeを用いますので、Chromeウェブストアから「Chromeに追加」ボタンをクリックし、拡張機能をインストールします。
今回の場合ではクリックすると「「Cookie-Editor」を追加しますか?」というウインドウが表示されます。ウインドウ内の「拡張機能を追加」ボタンをクリックします。
クリックすると「「Cookie-Editor」がChromeに追加されました」というウインドウが表示されます。これでCookie エディター拡張機能のインストールは完了です。
完了後、GoogleChrome(Webブラウザ)で「Bing(https://www.bing.com/)」にアクセスします。アクセス後、お持ちのMicrosoftアカウントでBingにログインを行った状態にしておきます。
Bingを表示させた状態でインストールした「Cookie-Editor」をクリックします。
クリックするとウインドウが表示されますので、ウインドウ内の下に「Export」ボタンがありますので、こちらをクリックします。クリックすると「Export as JSON」ボタンをクリックします。
クリックすると「Cookies exported to clipboard as JSON(CookieをJSONとしてクリップボードに書き出すことができます。)」と表示されます。
表示後、コードエディタ等を起動し、新しいテキストを表示させて、JSON形式のデータを貼り付けます。貼り付けた後に保存します。保存名は「cookies.json」とします。
なお、保存後、「C:\Users\user_(フォルダパス)」という場所にファイルを移動します。今回はこの場所が、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)となります。
これでBing AI Chatからデータを取得する準備は完了となります。
■EdgeGPTを用いてAPI(Bing AI Chat)からデータを取得する
では、次にEdgeGPTを用いてAPI(Bing AI Chat)からデータを取得するためにスクリプトを書いていきます。
■コード
import asyncio from EdgeGPT import Chatbot, ConversationStyle async def main(): bot = await Chatbot.create() print(await bot.ask(prompt="大阪府の人口について教えてください。", conversation_style=ConversationStyle.creative)) await bot.close() if __name__ == "__main__": asyncio.run(main())
■処理手順
import asyncio: asyncioモジュールをインポートします。asyncioは非同期プログラミングをサポートするPythonの標準ライブラリです。
from EdgeGPT import Chatbot, ConversationStyle: EdgeGPTというモジュールからChatbotとConversationStyleクラスをインポートします。
async def main():: mainという非同期関数を定義します。非同期関数はasync defで定義され、非同期的な操作を含む処理を実行することができます。
bot = await Chatbot.create(): Chatbotクラスのcreateメソッドを非同期的に呼び出し、チャットボットのインスタンスを作成します。awaitキーワードを使用して非同期関数の実行を一時停止し、チャットボットの作成が完了するまで待機します。
print(await bot.ask(prompt=”大阪府の人口について教えてください。”, conversation_style=ConversationStyle.creative)): bot.askメソッドを非同期的に呼び出し、チャットボットに対話の問いかけを行います。awaitキーワードを使用して非同期関数の実行を一時停止し、チャットボットの応答が得られるまで待機します。そして、その応答をprint文を使って出力します。
await bot.close(): チャットボットの処理を終了するため、bot.close()メソッドを非同期的に呼び出します。awaitキーワードを使用して非同期関数の実行を一時停止し、チャットボットの終了が完了するまで待機します。
if __name__ == “__main__”: asyncio.run(main()): スクリプトが直接実行された場合にのみ、main関数を非同期的に実行します。asyncio.run関数を使って、非同期関数の実行を開始します。
■実行・検証
このスクリプトを「b_ai_prompt.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、EdgeGPTを用いてAPI(Bing AI Chat)からデータを取得し、データを出力させることができました。
Traceback (most recent call last): File "C:\Program Files\Python38\lib\asyncio\proactor_events.py", line 116, in __del__ self.close() File "C:\Program Files\Python38\lib\asyncio\proactor_events.py", line 108, in close self._loop.call_soon(self._call_connection_lost, None) File "C:\Program Files\Python38\lib\asyncio\base_events.py", line 719, in call_soon self._check_closed() File "C:\Program Files\Python38\lib\asyncio\base_events.py", line 508, in _check_closed raise RuntimeError('Event loop is closed') RuntimeError: Event loop is closed
なお、今回は上記のエラーが出力され、この問題を解消するために、スクリプトを実行する際にWebブラウザ(今回はGoogleChrome)をすべて閉じて終了させてから実行すると解消されるようだ。
コメント