Agentの元祖? LangChain で ReAct を試してみる

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

参考:https://python.langchain.com/docs/modules/agents/agent_types/react

元:https://react-lm.github.io/

色々 Agent の実装を試していましたが、元ネタと言える ReAct を使ってみていなかったな、ということで LangChain の ReAct 実装を試してみます。

ReAct って?

論文:https://arxiv.org/abs/2210.03629

10ヶ月ほど前の論文のはずなのに、一昔前に思える恐ろしさ。 LLM の推論と実行それぞれの性能は向上しているのに、方向性がバラバラだったことに対し、推論(REasoning)と実行(ACTing)を組み合わせたらどうなるのか? という発想だそうです。

計画を推論で実行し、実行は別で行うという、 Plans-and-Execution の元になった発想だと思います。

LangChain でシンプルに ReAct を使って見る

import

from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
from langchain.utilities import GoogleSearchAPIWrapper
from langchain.agents.tools import Tool
from langchain import LLMMathChain

Tool としては LLMMathChain, GoogleSearchAPIWrapper を利用します(APIキーの読み込みは省略)。

Tool の準備

search = GoogleSearchAPIWrapper()
llm = OpenAI(temperature=0)
llm_math_chain = LLMMathChain.from_llm(llm=llm, verbose=True)
tools = [
    Tool(
        name = "Search",
        func=search.run,
        description="useful for when you need to answer questions about current events"
    ),
    Tool(
        name="Calculator",
        func=llm_math_chain.run,
        description="useful for when you need to answer questions about math"
    ),
]

前回 と一緒ですね。これは動作の比較をするためであって手抜きではないです。

agent の作成

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

Plan-and-Execute などと違って、Tool のリストと、LLM 以外には必要なインスタンスは不要です。コーディングとしてはとても楽ですね。

実行

agent.run("宮崎駿の最新作の名前は? また、宮崎駿の現在の年齢を0.43乗してください。")

結果

> Entering new AgentExecutor chain...
 I need to find out the name of Miyazaki's latest work and calculate his current age to the power of 0.43.
Action: Search
Action Input: "Miyazaki latest work"
Observation: The Boy and the Heron is a 2023 Japanese animated fantasy film written and directed by Hayao Miyazaki and produced by Studio Ghibli. Nov 23, 2021 ... When his last film, “The Wind Rises,” came out in 2013, it did well at the box office but fell short of his previous four features, perhaps ... Some of his most widely known works are his animated films created during his time with Studio Ghibli, including My Neighbor Totoro (1988), Princess Mononoke ( ... Jan 20, 2023 ... Hayao Miyazaki's New Film “How Do You Live?” · Hayao Miyazaki “retired” multiple times after his “final film.” Each time, he proceeded to release ... Jun 5, 2023 ... Miyazaki won the best animated film Oscar in 2003 for Spirited Away, and was nominated two further times, for Howl's Moving Castle in 2006 and ... Unlike Studio Ghibli's latest film, Earwig and the Witch (2020) made by Gorō Miyazaki entirely in 3D animation, How Do You Live? will use 2D animation—and ... Dec 13, 2022 ... Studio Ghibli has announced its latest project from legendary filmmaker Miyazaki Hayao, titled “How Do You Live.” The feature-length film is ... Jul 14, 2023 ... Japanese fans queuing for tickets to see Hayao Miyazaki's latest film. There are inside the. There was excitement among Japanese film fans ... Jul 14, 2023 ... Latest Studio Ghibli mystery film release ends months of guesswork for Japanese fans. Details of plot for veteran director Hayao Miyazaki's ... Jun 5, 2023 ... Miyazaki Hayao's Final Film 'How Do You Live': Maximum Secrecy to Be Maintained Until Release. Producer hints that widely assumed plot details ...
Thought: The name of Miyazaki's latest work is "How Do You Live?".
Action: Calculator
Action Input: Miyazaki's current age

> Entering new LLMMathChain chain...
Miyazaki's current age
This question cannot be answered using the numexpr library.

numexpr では処理できないと怒られてしまいました。verbose により出力されたログを見て行きましょう(前回との比較)。

まずは、AgentExecutor chain から続く1行目ですが、Plan-and-Execute のAgentでは、stepsというリスト内に、Stepオブジェクトを有するPython コードの形式でした。一方で、ReAct の方では自然言語による推論の自然文そのものになっています。この辺りにTool使用の精度の違いが出ていそうです。

Miyazaki latest work という検索で意図通り宮崎駿監督の最新作が出てくるのは、LLM の性能というよりはGoogle 検索が賢いだけのような気がします……。

問題なのは、

Action: Calculator
Action Input: Miyazaki's current age

で、ここは「Search」Action で年齢そのものを検索してint または float の値が必要だったはずです。この辺りが、自然言語の推論だけでplanを立てる限界でしょうか。

英語でやってみる

agent.run("What is the name of Hayao Miyazaki's latest film? Also, Hayao Miyazaki's current age rased to the 0.43 power?")

agentの実行を以上のように変更すると、

> Entering new AgentExecutor chain...
 I need to find the name of the film and then calculate the age raised to the 0.43 power.
Action: Search
Action Input: Hayao Miyazaki's latest film
Observation: The Boy and the Heron is a 2023 Japanese animated fantasy film written and directed by Hayao Miyazaki and produced by Studio Ghibli. Jun 5, 2023 ... How Do You Live? is due to be released in Japan on 14 July, but prospective filmgoers are not entirely devoid of information. Studio Ghibli, the ... Dec 13, 2022 ... Studio Ghibli has announced its latest project from legendary filmmaker Miyazaki Hayao, titled “How Do You Live.” The feature-length film is ... Jun 4, 2023 ... Studio Ghibli to Release Hayao Miyazaki's Final Film 'The Boy and the Heron' With No Trailer, No Promotional Marketing. Jan 20, 2023 ... Hayao Miyazaki's New Film “How Do You Live?” · Hayao Miyazaki “retired” multiple times after his “final film.” Each time, he proceeded to release ... Nov 23, 2021 ... When his last film, “The Wind Rises,” came out in 2013, it did well at the box office but fell short of his previous four features, perhaps ... 'Totoro' we made in eight months. [For] the current film that Hayao Miyazaki is working on, we have sixty animators, but we are only able to come up with one ... 6 days ago ... Everything we know about Hayao Miyazaki's final Studio Ghibli movie, The Boy and the Heron (titled previously How Do You Live?). Jun 6, 2023 ... The details on Japanese animator's final film, How Do You Live, is being kept in tight secrecy. Anime Legend Hayao Miyazaki Is Coming Out of ... All enjoyed critical & box office success, in particular Princess Mononoke (1997). It received the Japanese equivalent of the Academy Award for Best Film & was ...
Thought: I now have the name of the film, so I can move on to calculating the age raised to the 0.43 power.
Action: Calculator
Action Input: Hayao Miyazaki's current age raised to the 0.43 power

> Entering new LLMMathChain chain...
Hayao Miyazaki's current age raised to the 0.43 power```text
81**0.43
```
...numexpr.evaluate("81**0.43")...

Answer: 6.616808384242508
> Finished chain.

Observation: Answer: 6.616808384242508
Thought: I now know the final answer.
Final Answer: The Boy and the Heron is Hayao Miyazaki's latest film and his current age raised to the 0.43 power is 6.616808384242508.

LLMMathへのInputが、「Hayao Miyazaki’s current age raised to the 0.43 power」となっており、agent から Tool への指示が的確に変化していることが分かります。

そのため、エラーなくnumexpr で年齢の計算が出来ているのですが、問題は現在の年齢は82歳なんですよね……。参照した記事が作品発表のときのもので、そのときの年齢が81歳だったものと思われます。行動の精度は上がっていますが、「最新作の検索」と「現在の年齢の検索」を分けた前回との違いがここで見られます。

最新作は「君たちはどう生きるか?」の直訳ではなく、「The Boy and the Heron(少年とアオサギ)」と翻訳版のタイトルとなっています。こちらは入力を英語にした影響か、精度が上がっていますね。

……いや、本当は日本語で応答してほしいところなのですが。

LLM を揃えて実験してみる

Plan-and-Execute では、Chat Model(GPT-3.5-turbo)を利用しているので、このままではフェアではないと言えます。ただし、論文初稿の時点では、ChatModel が一般公開はされていなかったので、promptがChat modelに最適化されているかというとそうではないと思います。

とはいえ、やってみないことには分からないので agent だけ Chat Modelを使うように変更してみます。

変更されたコード

from langchain.chat_models import ChatOpenAI

chat = ChatOpenAI(temperature=0)
agent = initialize_agent(tools, chat, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

agent.run("宮崎駿の最新作の名前は? また、宮崎駿の現在の年齢を0.43乗してください。")

結果

I need to find out the name of Hayao Miyazaki's latest work and calculate his current age raised to the power of 0.43.
Action: Search
Action Input: "Hayao Miyazaki latest work"
Observation: Dec 13, 2022 ... Studio Ghibli Sets New Miyazaki Hayao Film, 'How Do You Live,' for Summer 2023. By K.J. Yossman. Nov 23, 2021 ... When his last film, “The Wind Rises,” came out in 2013, it did well at the box office but fell short of his previous four features, perhaps ... The Boy and the Heron is a 2023 Japanese animated fantasy film written and directed by Hayao Miyazaki and produced by Studio Ghibli. Unlike Studio Ghibli's latest film, Earwig and the Witch (2020) made by Gorō Miyazaki entirely in 3D animation, How Do You Live? will use 2D animation—and ... Some of his most widely known works are his animated films created during his time with Studio Ghibli, including My Neighbor Totoro (1988), Princess Mononoke ( ... Jun 5, 2023 ... How Do You Live? is due to be released in Japan on 14 July, but prospective filmgoers are not entirely devoid of information. Studio Ghibli, the ... The success of the film led to the establishment of a new animation studio, Studio Ghibli. Since then, he has since directed, written & produced many other ... Jan 20, 2023 ... Hayao Miyazaki's New Film “How Do You Live?” · Hayao Miyazaki “retired” multiple times after his “final film.” Each time, he proceeded to release ... Jul 14, 2023 ... Japanese fans queuing for tickets to see Hayao Miyazaki's latest film. There are inside the. There was excitement among Japanese film fans ... Dec 13, 2022 ... Oscar-winning and internationally renowned director Hayao Miyazaki will release his new animation film “Kimitachi wa Do Ikiru ka,” (“How do ...
Thought:The latest work by Hayao Miyazaki is called "How Do You Live?" and it is set to be released in summer 2023. 
Action: Calculator
Action Input: 80^0.43

> Entering new LLMMathChain chain...
80^0.43```text
80**0.43
```
...numexpr.evaluate("80**0.43")...

Answer: 6.5815577201821425
> Finished chain.

Observation: Answer: 6.5815577201821425
Thought:Hayao Miyazaki's current age raised to the power of 0.43 is approximately 6.58.
Final Answer: The name of Hayao Miyazaki's latest work is "How Do You Live?" and his current age raised to the power of 0.43 is approximately 6.58.

日本語でも、numexpr エラーが出ない程度に性能が向上しました。また、宮崎駿監督の下の名前が省略されるような現象はなくなっています。

numexpr でエラーを回避できたのは、Input が数式そのものに変化している影響です。検索結果のテキストから、適切に映画の名前と年齢を示す文字を LLM が抜き出せた影響だと思います。これは agent の性能ではなく、LLMの性能が直接でているものと推測できます(context 長含め)。

ただ、年齢については何故か80歳となっており(80代を誤認した? ログには直接80という数値はなく不明)、結果としては不正確なままです。

この辺りはやはり、Plan を構造化した状態で作成する Plan-and-Execute のような実装が優れている部分と言えそうです。

終わりに

agent の元祖、ReAct をいじくって見ました。研究が進んだ後続の仕組みの方が優れているのはある種必然ではあるのですが、顕著な違いとしてはやはり Step-by-Step で実行する方法を自然言語処理から一種逆行するような形で実装したときの挙動の変化でしょう。

これはLangChain を使う使わないだけではなく、 ChatGPT をWebUI / アプリから使う場合のプロンプトの入力、その他の LLM ツールの利用にも応用が利く知見だと言えると思います。

LLM 以外、情報工学以外の分野にまで考えを広げてみると、5 whys(なぜなぜ5回)分析、So-What, So-Why, MECE などタスクや課題を論理的に分割、分析する手法は多くあります。これは人間が使う自然言語そのものが、複雑なタスクを記述するのに向いていないために必要とされた発明と言えるのかもしれません。

そう考えると、自分たちが日頃使っている仕事術を応用してLLMに使って見るというのもいい方法なのかもしれません。

 

カバー:UnsplashRamzan Ashrafが撮影した写真

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

最新の記事