メインコンテンツへスキップ
見出し画像

LangChainの Wolfram Alpha 連携を試す

    「LangChain」の「Wolfram Alpha」連携を試したので、まとめました。

    前回

    1. Wolfram Alpha

    「Wolfram Alpha」は、Wolfram Researchが開発した質問応答システムです。事実についての質問に対し、構造化されたデータを使って計算し、直接答えを返すオンラインサービスになります。

    画像


    2022年時点では日本語に対応しているのは数学関連のクエリのみですが、「5個のボールの並べ方は何通りあるか」「ニュートン法を使ってxcos x=0 を解く」などの質問に対して日本語で答えることができます。

    具体的に、どのような質問ができるかは、以下を参照してください。

    2. AppIDの取得

    「Wolfram Alpha」のAPIを利用するには、AppIDが必要です。

    (1) Wolfram Alpha API のサイトでアカウントを作成してログイン。
    無料版では、1月2000件の非商用API呼び出が可能です。

    (2) 「Get an AppID」ボタンを押す。

    画像

    (3) 「Application name」と「Description」を記述し、「Get AppID」ボタンを押す。
    「AppID」が表示されます。

    画像

    3. Colabでの実行

    Google Colabでの実行手順は、次のとおりです。
    (1) パッケージのインストール。

    # パッケージのインストール
    !pip install langchain==0.0.60
    !pip install openai
    !pip install wolframalpha

    (2) 環境変数の準備。
    以下のコードの <OpenAI_APIのトークン> にはOpenAI APIのトークン、<Wolfram_AlphaのAppID> にはWalframAlphaのAppIDを指定します。

    import os
    os.environ["OPENAI_API_KEY"] = "<OpenAI_APIのトークン>"
    os.environ["WOLFRAM_ALPHA_APPID"] = "<Walfram_AlphaのAppID>"

    (3) WalframAlphaツールを持つエージェントの準備。

    from langchain.agents import load_tools, initialize_agent
    from langchain.llms import OpenAI
    from langchain.chains.conversation.memory import ConversationBufferMemory
    
    # エージェントの準備
    agent = initialize_agent(
        tools=load_tools(['wolfram-alpha']),  # WalframAlpha
        llm=OpenAI(temperature=0), 
        agent="conversational-react-description", 
        memory=ConversationBufferMemory(memory_key="chat_history"), 
        verbose=True
    )

    (4) 質問応答。
    東京都と大阪の距離を聞いてみます。

    agent.run("東京都と大阪の距離は?")
    > Entering new AgentExecutor chain...
    
    Thought: Do I need to use a tool? Yes
    Action: Wolfram Alpha
    Action Input: Distance between Tokyo and Osaka
    Observation: 251.1 miles
    Thought: Do I need to use a tool? No
    AI: 東京都と大阪の距離は251.1マイルです。
    
    > Finished chain.
    '東京都と大阪の距離は251.1マイルです。

    (5) 質問応答。
    マイルではわからないので、キロで答えてもらいます。

    agent.run("キロ単位で教えて")
    > Entering new AgentExecutor chain...
    
    Thought: Do I need to use a tool? Yes
    Action: Wolfram Alpha
    Action Input: Tokyo to Osaka distance in kilometers
    Observation: 404.1 km (kilometers)
    Thought: Do I need to use a tool? No
    AI: 東京都と大阪の距離は404.1キロです。
    
    > Finished chain.
    '東京都と大阪の距離は404.1キロです。'

    次回



     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ