【Python】EdgeGPTを用いてAPI(Bing AI Chat)からデータを取得する

スポンサーリンク

【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)をすべて閉じて終了させてから実行すると解消されるようだ。

コメント

タイトルとURLをコピーしました