OpenAIのFunction calling機能を活かした、LangChain 「OpenAI Functions Agent」を試す
LangChainから、従来のMRKL Agentのツール選択にOpenAI の 関数呼び出し機能を活用した新たなAgentが公開されていました。
早速試してみます
公式サンプルを少しアレンジしながら google colab で試してみます。
インストールほか
# ライブラリーのインストール
!pip install langchain==0.0.200
!pip install openai
!pip install google-search-results
!pip install wolframalpha
# 環境変数の準備
import os
os.environ["OPENAI_API_KEY"] = "YOUR API KEY"
os.environ["SERPAPI_API_KEY"] = "YOUR API KEY"
os.environ["WOLFRAM_ALPHA_APPID"] = "YOUR API KEY"
# サンプルDB
!wget https://www.sqlitetutorial.net/wp-content/uploads/2018/03/chinook.zip
!unzip chinook.zip
# 必要ライブラリインポート
from langchain import SerpAPIWrapper, SQLDatabase, SQLDatabaseChain
from langchain.utilities.wolfram_alpha import WolframAlphaAPIWrapper
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
from langchain.chat_models import ChatOpenAI
Agentの定義
従来のLangChainのAgent定義から基本的に変更ありません。
インスタンス初期化時(一番下の行)に、AgentType.OPENAI_FUNCTIONSを指定します。
# Function colling対応のモデルを指定
llm = ChatOpenAI(temperature=0.0, model="gpt-3.5-turbo-0613")
# SQLデータベースのサンプル
db = SQLDatabase.from_uri("sqlite:////content/chinook.db")
# toolのインスタンス
search = SerpAPIWrapper()
wolfram = WolframAlphaAPIWrapper()
db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)
# ツールの準備
tools = [
Tool(
name = "Search",
func=search.run,
description="useful for when you need to answer questions about current events. You should ask targeted questions"
),
Tool(
name="WolframAlpha",
func=wolfram.run,
description="useful for when you need to answer questions about math and science"
),
Tool(
name="MusicSales-DB",
func=db_chain.run,
description="useful for when you need to answer questions about MusicSales. Input should be in the form of a question containing full context"
)
]
# AgentType.OPENAI_FUNCTIONSを指定
mrkl = initialize_agent(tools, llm, agent=AgentType.OPENAI_FUNCTIONS, verbose=True)
実行サンプル(その1)
mrkl.run("一番売れてるアーティスト名を調べて")
実行サンプル(その2)
mrkl.run("現在の日本の総理大臣の年齢の10を底とした対数をとって")
まとめ・感想
OpenAI APIの機能追加を受けて LangChain 側の実装がどうなるのか興味がありましたが、今までのLangChainの開発方針を踏襲して、とても自然な形で機能が実装されています。
今回のAgentを使うことで、従来のAgentに比べて、明らかに動作がキビキビした動作です。今までAgentの動作は少しもっさりしている印象でしたし、動作が不安定な時もありました。これなら安心して実戦?で使える!すばらしい。😀
LangChainの作者さん、貢献者の方々のパワー、鬼速い開発スピードにはただただ驚くばかりです。
現場からは以上です。
この記事が気に入ったらサポートをしてみませんか?