Bing Search APIをLangChainを使って呼び出し、最新の情報を回答させてみた(Azure Chat OpenAI)

はじめに

AzureのLangChainライブラリを使って、特定の質問に対する回答を生成するエージェントを実装してみました。

環境

  • Python 3.11.5
  • LangChain
  • Azure OpenAI
  • dotenv

実装

環境変数の設定

.envファイルを作成し、環境変数を設定します。ご自身の環境に合わせてください。

OPENAI_API_TYPE = "azure"
OPENAI_API_KEY = "[Azure OpenAIのAPIキー]"
OPENAI_API_BASE = "[Azure OpenAIのエンドポイント]"
OPENAI_API_VERSION = "2023-07-01-preview"

BING_SUBSCRIPTION_KEY = "[Bing Search APIのAPIキー]"
BING_SEARCH_URL = "https://api.bing.microsoft.com/v7.0/search"

必要なライブラリのインポート

まず、環境変数の取得、LangChainのチャットモデルの構築、およびエージェントの初期化に必要なライブラリをインポートします。

import os

from dotenv import load_dotenv
load_dotenv()

from langchain.chat_models import AzureChatOpenAI
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents.agent_types import AgentType
from langchain.agents.mrkl import prompt

このコードは、環境変数を読み込み、LangChainおよびAzure関連のクラスをインポートします。

AzureChatOpenAIの設定

次に、AzureのChat OpenAIモデルを設定します。

llm = AzureChatOpenAI(
    temperature=0,
    openai_api_base=os.environ["OPENAI_API_BASE"],
    openai_api_key=os.environ["OPENAI_API_KEY"],
    deployment_name="gpt-35-turbo-16k"
)

この部分では、Azure OpenAIのAPIキーとエンドポイントを環境変数から取得し、AzureChatOpenAI オブジェクトを初期化しています。温度パラメータを0に設定していますが、これはモデルがより確実な(あまり創造的ではない)回答を生成するようにするためです。

ツールのロード

LangChainのツールをロードします。

tools = load_tools(["bing-search"], llm=llm)

ここでは、Bing検索ツールをロードし、これを先ほど作成した言語モデルに関連付けています。

エージェントの初期化

エージェントを初期化します。

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True, agent_kwargs=dict(suffix='Answer should be in Japanese.' + prompt.SUFFIX))

このステップでは、先にロードしたツールと言語モデルを使用してエージェントを初期化しています。ここで、エージェントのタイプとしてZEROSHOTREACT_DESCRIPTIONを指定しています。これは、エージェントが与えられたプロンプトに基づいて即座に反応するようにするためです。

エージェントの実行

最後に、エージェントに質問を投げかけて、回答を生成させます。

agent.run("2023年の野球の日本シリーズで優勝したチームを教えてください。")

この行では、エージェントに2023年の野球日本シリーズで優勝したチームに関する質問をしています。

結果

> Entering new AgentExecutor chain...
2023年の野球の日本シリーズで優勝したチームは、現在の情報ではわかりません。最新の情報を調べる必要があります。
Action: bing_search
Action Input: 2023年の野球の日本シリーズ 優勝チーム

Observation: プロ<b>野球</b>12球団<b>の</b>試合日程・結果や予告先発、ドラフト会議をはじめ、事業・振興に関する情報を掲載。また、オールスター・ゲームや<b>日本シリーズ</b>など主催試合<b>の</b>チケット情報もご覧いただけます。 (<b>2023年</b>7月) <b>2023年の日本シリーズ</b> (<b>2023</b>ねん<b>の</b>にっぽん<b>シリーズ</b>、<b>2023</b>ねん<b>の</b>にほん<b>シリーズ</b>)は、 <b>2023年</b> (令和5<b>年</b>)10月28日から11月5日まで行われた 阪神タイガース (以下、阪神)と オリックス・バファローズ (以下、オリックス)による第74回 <b>日本</b>選手権<b>シリーズ</b> (74th Nippon Series)。 阪神が4勝3敗でオリックスを下し、1985<b>年</b>以来38<b>年</b>ぶり2度目<b>の日本</b>一に輝いた [1] [2] 。 概要 本大会<b>の</b>表題は 「SMBC<b>日本シリーズ2023</b>」 (エスエムビーシーにっぽん<b>シリーズ2023</b>)であり、 2014<b>年</b> 以来10大会連続で 三井住友銀行 がタイトルスポンサーとなった [3] 。 阪神甲子園球場 第4戦 11/1 (水) 18:00 4x - 3 阪神甲子園球場 第5戦 11/2 (木) 18:00 6 - 2 阪神甲子園球場 第6戦 11/4 (土) 18:30 5 - 1 京セラドーム大阪 第7戦 11/5 (日) 18:30 1 - 7 京セラドーム大阪 一方<b>のチーム</b>が4勝した時点で終了 <b>シリーズ</b>を振り返る PHOTO <b>2023</b>/11/07 【公式モバイルサイト】<b>日本</b>一記念! 選手直筆サイン色紙を抽選で40名様にプレゼント! <b>2023</b>/11/06 <b>日本</b>一記念セール・キャンペーン情報 <b>2023</b>/11/05 「<b>日本</b>一記念グッズ」<b>の</b>発売について <b>2023</b>/11/04 阪神甲子園球場で<b>の</b>パブリックビューイング開催<b>の</b>ご案内 <b>2023</b>/11/02 59<b>年</b>ぶりに関西<b>のチーム</b>どうし<b>の</b>対戦となったことし<b>の日本シリーズ</b>は、阪神とオリックスが対戦成績を3勝3敗として5日夜、京セラドーム大阪で行われた第7戦をむかえ、勝った方が<b>日本</b>一となる大一番となりました。 阪神 ノイジー選手<b>の</b>先制スリーラン... TOP > ニュース > 球団ニュース. 「SMBC<b>日本シリーズ2023</b>」<b>優勝</b>会見. <b>2023年</b>11月05日 更新. Tweet. 5日 (日)、「SMBC<b>日本シリーズ2023</b>」でオリックス・バファローズを下して38<b>年</b>ぶり<b>の日本</b>一を果たし、岡田彰布監督、近本光司選手、大山悠輔選手、村上頌樹選手、青柳 ... ファーム<b>日本</b>選手権 フレッシュオールスター・ゲーム イースタン・リーグ チャレンジ・マッチ 春季教育リーグ 秋季教育リーグ 成績・記録 シーズン成績 表彰選手 達成記録 年度別成績(1936-<b>2023</b>) 歴代最高記録(通算記録・シーズン記録) 球場情報 統計データ <b>野球の</b>記録について 球団・選手 球団別インデックス 選手一覧 個人年度別成績 プロ<b>野球</b>在籍者名簿 公示 ドラフト会議 キャンプガイド セントラル・リーグ パシフィック・リーグ 審判員・記録員 <b>日本</b>代表 東京ヤクルトスワローズは、元東北楽天ゴールデンイーグルス<b>の</b>西川遥輝、元福岡ソフトバンクホークス<b>の</b>嘉弥真新也、増田珠<b>の</b>獲得を発表 [463] 。. 横浜DeNAベイスターズは、元福岡ソフトバンクホークス<b>の</b>森唯斗、元オリックス・バファローズ<b>の</b> ... 殊勲賞には、WBCで<b>日本の優勝</b>に大きく貢献し、大リーグでは史上初めて2<b>年</b>連続で「2桁勝利、2桁ホームラン」を達成した大谷翔平選手。. プロ ...
Thought:2023年の野球の日本シリーズで優勝したチームは阪神タイガースです。
Final Answer: 阪神タイガース

「阪神タイガーズ」という結果が返ってきました。

おわりに

お疲れ様でした!

以下で情報発信しています!

参考文献

この記事を書いた人

azure-recipe-user