⛓️

【新機能】LangChainでWolfram Alphaを扱えるエージェントを動かす!

2023/01/12に公開

LangChainでWolfram Alphaが使えるように!

1/12にLangChainのv0.0.60がリリースされました!
今回のアップデートでWolfram AlphaをToolとして持つエージェントの作成が可能になったので、早速お試し!

ちなみに…

Wolfram Alphaとは、Wolframが提供する質疑応答システムです。
高度な数学の計算が可能という特徴を持っています。
https://ja.wikipedia.org/wiki/Wolfram_Alpha

おそらく学生は皆さんWolframの恩恵を受けたことがあると思いますが(積分計算など)、
LangChainのToolとしてそれが扱えるようです。

つまり、エージェントにWolframを使わせることが出来るという訳ですね。

実装

今回は公式のドキュメントとnoetbookを参考にしました。
docs:https://langchain.readthedocs.io/en/latest/modules/utils/examples/wolfram_alpha.html
notebook:https://colab.research.google.com/drive/1AAyEdTz-Z6ShKvewbt1ZHUICqak0MiwR

まずはライブラリをインストールします。LangChainはv0.0.60!

!pip install openai wolframalpha langchain==0.0.60

続いて、インポートとAPIキーの設定。
Wolfram Alphaを使うには開発者アカウントの登録が必要です。ある程度までは無料で使えます。
https://products.wolframalpha.com/api/

今回はエージェントの機能をOpenAIのtext-davinci-003で扱います。

from langchain.agents import load_tools, initialize_agent
from langchain.llms import OpenAI
from langchain.chains.conversation.memory import ConversationBufferMemory
import os
os.environ["OPENAI_API_KEY"] = "your API key"
os.environ["WOLFRAM_ALPHA_APPID"] = "your API key"

エージェントを使うために必要なコンポーネントを定義します。

llm = OpenAI(temperature=0)
tools = load_tools(['wolfram-alpha'])
memory = ConversationBufferMemory(memory_key="chat_history")
agent = initialize_agent(tools, llm, agent="conversational-react-description", memory=memory, verbose=True)

以下のコードを実行すればエージェントが動き出します!

agent.run("x^8の不定積分の結果を教えて")
Thought: Do I need to use a tool? Yes
Action: Wolfram Alpha
Action Input: Integral of x^8
Observation: integral x^8 dx = x^9/9 + constant
Thought: Do I need to use a tool? No
AI: はい、x^8の不定積分の結果はx^9/9 + constantです。

上手く動いていますね。ちゃんと積分の計算をしてくれています。

Wolfram Alphaだと何が出来る?

どういった質問なら回答できるのか気になったので、少し調べてみました。
以下のような質問になら対応できるようですね、凄い。
https://www.wolframalpha.com/examples

agent.run("今日の東京の天気を教えて")
Thought: Do I need to use a tool? Yes
Action: Wolfram Alpha
Action Input: Tokyo weather
Observation: temperature | 48 °F (wind chill: 45 °F)
relative humidity | 43% (dew point: 27 °F)
wind speed | 8.1 mph
(38 minutes ago)
Thought: Do I need to use a tool? No
AI: 今日の東京の天気は、気温48°F(風圧45°F)、湿度43%(露点27°F)、風速8.1mphです。

なぜか華氏ですが、ちゃんと教えてくれました!
GPTのみでは最新の情報は得られないので役に立ちますね!
1か月あたり2000件までリクエスト出来るそうなので、Wolfram Alphaで得られる情報はこっちから得た方がSerpAPIと比較して経済合理的ですね。

計算能力(LLMMathChainとの比較)について

LangChainには既にLLMMathChainと呼ばれる、数学計算用のToolが用意されています。
(実際はGPT-3に計算させてるだけ)
それによる数学計算と、Wolframによる数学計算を比較してみました。

LLMMathChainは以下で定義

from langchain.chains import LLMMathChain
from langchain.agents import Tool

llm_math_chain = LLMMathChain(llm=llm)
tools = [
    Tool(
        name="Calculator",
        func=llm_math_chain.run,
        description="useful for when you need to answer questions about math",
        return_direct=True
    )
]

memory2 = ConversationBufferMemory(memory_key="chat_history")
agent2 = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True, memory=memory2)

今回はx^2 + 4x + 6 = 0を解かせました。
答えは-2±i*√2です。虚数が出てくる点がミソですね。

LLMMathChain(GPT3)の場合

I need to solve for x
Action: Calculator
Action Input: x^2 + 4x + 6 = 0
Observation: Answer: x = -2 or x = 3

嘘つくなー!

Wolfram Alphaを使った場合

Thought: Do I need to use a tool? Yes
Action: Wolfram Alpha
Action Input: solve x^2 + 4x + 6 = 0
Observation: x = -2 - i sqrt(2)
Thought: Do I need to use a tool? No
AI: x = -2 - i sqrt(2)ですね。

賢い(確信)

おわりに

今回はLangChainに新機能として実装されたWolfram Alphaとの連携を試してみました。
最新ニュースから数学計算まで、結構幅広く回答してくれます。
色々活用して皆さんの使い方を教えて下さい!

author:@k_another_wa(https://twitter.com/k_another_wa) 
    LLMやLangChain関係を勉強中です。

Discussion