はじめに
AzureのLangChainライブラリを使って、特定の質問に対する回答を生成するエージェントを実装してみました。
環境
- Python 3.11.5
- LangChain
- Azure OpenAI
- dotenv
実装
環境変数の設定
.envファイルを作成し、環境変数を設定します。ご自身の環境に合わせてください。
1 2 3 4 5 6 7 8 |
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のチャットモデルの構築、およびエージェントの初期化に必要なライブラリをインポートします。
1 2 3 4 5 6 7 8 9 10 |
<span class="kn">import</span> <span class="n">os</span> <span class="kn">from</span> <span class="n">dotenv</span> <span class="kn">import</span> <span class="n">load_dotenv</span> <span class="nf">load_dotenv</span><span class="p">()</span> <span class="kn">from</span> <span class="n">langchain.chat_models</span> <span class="kn">import</span> <span class="n">AzureChatOpenAI</span> <span class="kn">from</span> <span class="n">langchain.agents</span> <span class="kn">import</span> <span class="n">load_tools</span> <span class="kn">from</span> <span class="n">langchain.agents</span> <span class="kn">import</span> <span class="n">initialize_agent</span> <span class="kn">from</span> <span class="n">langchain.agents.agent_types</span> <span class="kn">import</span> <span class="n">AgentType</span> <span class="kn">from</span> <span class="n">langchain.agents.mrkl</span> <span class="kn">import</span> <span class="n">prompt</span> |
このコードは、環境変数を読み込み、LangChainおよびAzure関連のクラスをインポートします。
AzureChatOpenAIの設定
次に、AzureのChat OpenAIモデルを設定します。
1 2 3 4 5 6 7 |
<span class="n">llm</span> <span class="o">=</span> <span class="nc">AzureChatOpenAI</span><span class="p">(</span> <span class="n">temperature</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">openai_api_base</span><span class="o">=</span><span class="n">os</span><span class="p">.</span><span class="n">environ</span><span class="p">[</span><span class="sh">"</span><span class="s">OPENAI_API_BASE</span><span class="sh">"</span><span class="p">],</span> <span class="n">openai_api_key</span><span class="o">=</span><span class="n">os</span><span class="p">.</span><span class="n">environ</span><span class="p">[</span><span class="sh">"</span><span class="s">OPENAI_API_KEY</span><span class="sh">"</span><span class="p">],</span> <span class="n">deployment_name</span><span class="o">=</span><span class="sh">"</span><span class="s">gpt-35-turbo-16k</span><span class="sh">"</span> <span class="p">)</span> |
この部分では、Azure OpenAIのAPIキーとエンドポイントを環境変数から取得し、AzureChatOpenAI
オブジェクトを初期化しています。温度パラメータを0
に設定していますが、これはモデルがより確実な(あまり創造的ではない)回答を生成するようにするためです。
ツールのロード
LangChainのツールをロードします。
1 2 |
<span class="n">tools</span> <span class="o">=</span> <span class="nf">load_tools</span><span class="p">([</span><span class="sh">"</span><span class="s">bing-search</span><span class="sh">"</span><span class="p">],</span> <span class="n">llm</span><span class="o">=</span><span class="n">llm</span><span class="p">)</span> |
ここでは、Bing検索ツールをロードし、これを先ほど作成した言語モデルに関連付けています。
エージェントの初期化
エージェントを初期化します。
1 2 |
<span class="n">agent</span> <span class="o">=</span> <span class="nf">initialize_agent</span><span class="p">(</span><span class="n">tools</span><span class="p">,</span> <span class="n">llm</span><span class="p">,</span> <span class="n">agent</span><span class="o">=</span><span class="n">AgentType</span><span class="p">.</span><span class="n">ZERO_SHOT_REACT_DESCRIPTION</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">agent_kwargs</span><span class="o">=</span><span class="nf">dict</span><span class="p">(</span><span class="n">suffix</span><span class="o">=</span><span class="sh">'</span><span class="s">Answer should be in Japanese.</span><span class="sh">'</span> <span class="o">+</span> <span class="n">prompt</span><span class="p">.</span><span class="n">SUFFIX</span><span class="p">))</span> |
このステップでは、先にロードしたツールと言語モデルを使用してエージェントを初期化しています。ここで、エージェントのタイプとしてZERO_SHOT_REACT_DESCRIPTION
を指定しています。これは、エージェントが与えられたプロンプトに基づいて即座に反応するようにするためです。
エージェントの実行
最後に、エージェントに質問を投げかけて、回答を生成させます。
1 2 |
<span class="n">agent</span><span class="p">.</span><span class="nf">run</span><span class="p">(</span><span class="sh">"</span><span class="s">2023年の野球の日本シリーズで優勝したチームを教えてください。</span><span class="sh">"</span><span class="p">)</span> |
この行では、エージェントに2023年の野球日本シリーズで優勝したチームに関する質問をしています。
結果
1 2 3 4 5 6 7 8 |
<span class="gp">></span><span class="w"> </span>Entering new AgentExecutor chain... <span class="go">2023年の野球の日本シリーズで優勝したチームは、現在の情報ではわかりません。最新の情報を調べる必要があります。 Action: bing_search Action Input: 2023年の野球の日本シリーズ 優勝チーム </span><span class="gp">Observation: プロ<b></span>野球</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>一に輝いた <span class="o">[</span>1] <span class="o">[</span>2] 。 概要 本大会<b>の</b>表題は 「SMBC<b>日本シリーズ2023</b>」 (エスエムビーシーにっぽん<b>シリーズ2023</b>)であり、 2014<b>年</b> 以来10大会連続で 三井住友銀行 がタイトルスポンサーとなった <span class="o">[</span>3] 。 阪神甲子園球場 第4戦 11/1 <span class="o">(</span>水<span class="o">)</span> 18:00 4x - 3 阪神甲子園球場 第5戦 11/2 <span class="o">(</span>木<span class="o">)</span> 18:00 6 - 2 阪神甲子園球場 第6戦 11/4 <span class="o">(</span>土<span class="o">)</span> 18:30 5 - 1 京セラドーム大阪 第7戦 11/5 <span class="o">(</span>日<span class="o">)</span> 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 &gt<span class="p">;</span> ニュース &gt<span class="p">;</span> 球団ニュース. 「SMBC<b>日本シリーズ2023</b>」<b>優勝</b>会見. <b>2023年</b>11月05日 更新. Tweet. 5日 <span class="o">(</span>日<span class="o">)</span>、「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>獲得を発表 <span class="o">[</span>463] 。. 横浜DeNAベイスターズは、元福岡ソフトバンクホークス<b>の</b>森唯斗、元オリックス・バファローズ<b>の</b> ... 殊勲賞には、WBCで<b>日本の優勝</b>に大きく貢献し、大リーグでは史上初めて2<b>年</b>連続で「2桁勝利、2桁ホームラン」を達成した大谷翔平選手。. プロ ... <span class="go">Thought:2023年の野球の日本シリーズで優勝したチームは阪神タイガースです。 Final Answer: 阪神タイガース </span> |
「阪神タイガーズ」という結果が返ってきました。
おわりに
お疲れ様でした!
以下で情報発信しています!
https://twitter.com/t___tatsuki