











OpenAI の API を使って、ChatGPT の中身(のようなもの)を小学生でも扱えるように解説する試みです。
ChatGPT の弱点としてテック系メディアもビジネス系メディアも、流行り物系メディアもこぞって挙げるのが「答えが正確でない、信用できない」ということ。お前らの書く記事はそんなに信用できるのかと。
そこで、同じくそれほど信用できるかと言われると微妙な気もしますが、少なくとも新しい情報が反映される仕組みになっている Google の検索結果を基に GPT-3.5-turbo に回答を作ってもらいます。
今回も直接 API は叩かずに LangChain を経由します。むしろこういうことをするためのライブラリですから、今回からが本領発揮だと思います。似た記事は一杯溢れていますが、こんな記事はなんぼあってもいいですからね(参照先はリンクします)。
更新版の記事
この記事で使われているLangchainのバージョンは古く、満足な品質の出力が得られないかもしれません。手っ取り早く動くコードが見たい方は更新版の記事を確認してください。
前回:
LangChainのアップデート
py -m pip install -U langchain
昨日の今日でバージョンが上がっていたので更新。結構頻繁なアップデートがされているみたいなので、こまめにチェックするといいと思います(公式ドキュメント見に行くとバージョン変わっているので分かると思います)。
Google Search API (プログラマブル検索エンジン)の利用
パッケージのインストール
py -m pip install google-api-python-client
インストールしないと動きません。outh とかはなくても Search API は大丈夫みたいです。
API キーの発行
上記ページに行き、「使って見る」をクリック。画面の指示に従って、新しい検索エンジンを作成。分かりやすい名前をつけて、「ウェブ全体の検索」を指定。古い資料だと適当なドメインを設定して後から削除となっていますが、現在は必要ないようです。
なぞのHTMLコードが出て来たら閉じて、「検索エンジン ID 」をコピーして控えておきます。
画面をスクロールして、
プログラマティックなアクセスから、Custom Search JSON API の「開始する」ボタンをクリック。
キーの取得をクリックして API キーを控えます。
動作テスト
import os, key
os.environ["GOOGLE_CSE_ID"] = key.GOOGLE_CSE_ID
os.environ["GOOGLE_API_KEY"] = key.GOOGLE_API_KEY
from langchain.utilities import GoogleSearchAPIWrapper
search = GoogleSearchAPIWrapper()
print(search.run("what is chusho kigyo shindanshi?"))
応答を返してくれたら成功です。
筆者は blog へのコピペのために、key.py ファイルを作って、そこに検索エンジン ID(GOOGLE_CSE_ID)とAPIキー(GOOGLE_API_KEY や OpenAI KEY)を格納していますが、公開予定がない方は直接記述または環境変数に設定でもいいと思います。
というかVS Codeを使って環境変数に設定が正道だと思いますが、そうすると今度はソースコード内で API キーの存在を明示できないのでこんな感じにしています。
タイムアウトしてしまったら……
本来なら、この手順だけで Search API を使えるらしいのですが、筆者の環境ではタイムアウトが連発(API キーエラーなどではなく)。ターミナルの再起動や VS Code の再起動では直りませんでした。
解決までの手順としては
とりあえず待ってみる→5分程度有効になるまで時間がかかるらしいので。解決せず。どっちにしろタイムアウトは何かおかしいような$300の体験用クレジットを申し込んでみる→やっぱり解決せず。OSごと再起動→動作開始。ただし時間が経ったことによる解決の可能性が一応残っている。
とはいえ、 単に API キーが有効になっていない状態であれば Timeout ではなく API キーエラーを返すと思うので(開通後にわざと間違えたところ、ちゃんとキーエラーが返ってきた)、再起動してみるのが妥当だと思います。
レイテンシを確認すると、1000ms 以内には応答しているものの、Timeout になっているので実装側の問題かもしれません。
再起動すると直るので、多分オマカンだと思われます。ノートPCでスリープに入るのが怪しいかな? というのが現状です。
前回の GPT-3.5-turbo への問い合わせに Google 検索を組み合わせてみる
参考:
OpenAI()となっているところを OpenAIChat() とすれば、大体ChatGPT相当になると覚えておけば大丈夫だと思います。
# Google のプログラマブル検索エンジンの結果