ReAct Prompting
Yao et al., 2022 (opens in a new tab)μμλ λκ·λͺ¨μΈμ΄λͺ¨λΈμ μ¬μ©νμ¬ μΆλ‘ μΆμ κ³Ό μμ λ³ νλμ μΈν°λ¦¬λΈ λ°©μμΌλ‘ μμ±νλ ReActλΌλ νλ μμν¬λ₯Ό μκ°νμ΅λλ€.
μΆλ‘ μΆμ μ μμ±νλ©΄ λͺ¨λΈμ΄ νλ κ³νμ μ λ, μΆμ , μ λ°μ΄νΈνκ³ μμΈλ₯Ό μ²λ¦¬ν μ μμ΅λλ€. νλ λ¨κ³(action step)μμλ μ§μ κΈ°λ°μ΄λ νκ²½κ³Ό κ°μ μΈλΆ μμ€μ μνΈ μμ©νκ³ μ 보λ₯Ό μμ§ν μ μμ΅λλ€.
ReAct νλ μμν¬λ₯Ό μ¬μ©νλ©΄ λκ·λͺ¨μΈμ΄λͺ¨λΈμ΄ μΈλΆ λꡬμ μνΈ μμ©νμ¬ λ³΄λ€ μ λ’°ν μ μκ³ μ¬μ€μ μΈ μλ΅μΌλ‘ μ΄μ΄μ§λ μΆκ° μ 보λ₯Ό κ²μν μ μμ΅λλ€.
μ°κ΅¬ κ²°κ³Όμ λ°λ₯΄λ©΄ ReActλ μΈμ΄ λ° μμ¬ κ²°μ μμ μμ μ¬λ¬ μ΅μ κΈ°μ μ κΈ°μ€μ μ λ₯κ°ν μ μλ κ²μΌλ‘ λνλ¬μ΅λλ€. λν ReActλ μΈκ°μ ν΄μ κ°λ₯μ±κ³Ό λκ·λͺ¨μΈμ΄λͺ¨λΈμ μ λ’°μ±μ ν₯μμν΅λλ€. μ λ°μ μΌλ‘ μ μλ€μ μΆλ‘ κ³Όμ μμ μ»μ λ΄λΆ μ§μκ³Ό μΈλΆ μ 보λ₯Ό λͺ¨λ μ¬μ©ν μ μλ μκ°μ μ¬κ³ (CoT)μ ν¨κ» ReActλ₯Ό μ¬μ©νλ κ²μ΄ κ°μ₯ μ’μ μ κ·Ό λ°©μμ΄λΌλ μ¬μ€μ λ°κ²¬νμ΅λλ€.
How it Works?
ReActλ μΈκ°μ΄ μλ‘μ΄ μμ μ νμ΅νκ³ μμ¬ κ²°μ μ΄λ μΆλ‘ μ ν μ μλλ‘ νλ "νλ" κ³Ό "μΆλ‘ "μ μλμ§ ν¨κ³Όμμ μκ°μ λ°μμ΅λλ€.
μκ°μ μ¬κ³ (CoT) ν둬νν μ λ€λ₯Έ μμ λ€ μ€μ μ°μ λ° μμμ μΆλ‘ κ³Ό κ΄λ ¨λ μ§λ¬Έμ λν λ΅μ μμ±νκΈ° μν΄ μΆλ‘ μΆμ μ μννλ λκ·λͺ¨μΈμ΄λͺ¨λΈμ λ₯λ ₯μ 보μ¬μ£Όμμ΅λλ€(Wei et al., 2022) (opens in a new tab). κ·Έλ¬λ μΈλΆ μΈκ³μ λν μ κ·Όμ±μ΄ λΆμ‘±νκ±°λ μ§μμ μ λ°μ΄νΈνλ λ₯λ ₯μ΄ λΆμ‘±νλ©΄ μ¬μ€ μ°©κ°(fact hallucination)μ΄λ μ€λ₯ μ ν κ°μ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
ReActλ μΆλ‘ κ³Ό νλμ λκ·λͺ¨μΈμ΄λͺ¨λΈκ³Ό κ²°ν©νλ μΌλ°μ μΈ ν¨λ¬λ€μμ λλ€. ReActλ λκ·λͺ¨μΈμ΄λͺ¨λΈμ΄ μμ μ μν΄ μΈμ΄ μΆλ‘ μΆμ κ³Ό νλμ μμ±νλλ‘ μ λν©λλ€. μ΄λ₯Ό ν΅ν΄ μμ€ν μ νλμ λν κ³νμ μμ±, μ μ§ λ° μ‘°μ νλ λμμ μΈλΆ νκ²½(μ: Wikipedia)κ³Όμ μνΈ μμ©μ ν΅ν΄ μΆλ‘ μ μΆκ° μ 보λ₯Ό ν΅ν©ν μ μμ΅λλ€. μλ κ·Έλ¦Όμ ReActμ μμ μ§λ¬Έ λ΅λ³μ μννλλ° νμν λ€λ₯Έ λ¨κ³λ€μ 보μ¬μ€λλ€.

μ΄λ―Έμ§ μΆμ²: Yao et al., 2022 (opens in a new tab)
μμ μμμ, μ°λ¦¬λ HotpotQA (opens in a new tab)μμ μλ μ§λ¬Έκ³Ό κ°μ ν둬ννΈλ₯Ό μ λ¬ν©λλ€.
Apple Remote μΈμ Apple Remoteκ° μλ μνΈ μμ©νλλ‘ μ€κ³λ νλ‘κ·Έλ¨μ μ μ΄ν μ μλ λ€λ₯Έ μ₯μΉλ μ΄λ€ κ²μ΄ μλ?
λ¬Έλ§₯ λ΄(in-context) μμλ ν둬ννΈμ μΆκ°λμ§λ§, μ¬κΈ°μμλ λ¨μνλ₯Ό μν΄ μ μΈλ¨μ μ μνμΈμ. μ°λ¦¬λ λͺ¨λΈμ΄ μμ ν΄κ²° κΆ€μ (μκ°, νλ)μ μμ±νλ κ²μ λ³Ό μ μμ΅λλ€. Obsλ μνΈμμ© μ€μΈ νκ²½(μ: κ²μ μμ§)μμμ κ΄μ°°μ ν΄λΉν©λλ€. λ³Έμ§μ μΌλ‘, ReActλ μΆλ‘ μ μ§μνκΈ° μν΄ μ 보λ₯Ό κ²μν μ μμΌλ©΄, μΆλ‘ μ λ€μμ κ²μν λμμ νκ²ν νλλ° λμμ΄ λ©λλ€.
ReAct Prompting
ReAct ν둬νν μ΄ μ΄λ»κ² μλνλμ§ μ€λͺ νκΈ° μν΄, λ Όλ¬Έμμ μμλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
첫 λ²μ§Έ λ¨κ³λ νΈλ μ΄λ μΈνΈ(μ:HotPotQA)μμ μ¬λ‘λ₯Ό μ ννκ³ ReAct νμμ κΆ€μ μ ꡬμ±νλ κ²μ λλ€. μ΄κ²λ€μ ν둬ννΈμμ ν¨μ·(few-shot) 견본μΌλ‘ μ¬μ©λ©λλ€. κΆ€μ μ μ κ·Έλ¦Όκ³Ό κ°μ΄ μ¬λ¬ μκ°-νλ-κ΄μ°° λ¨κ³λ‘ ꡬμ±λ©λλ€. μμ νν μ¬κ³ λ μ§λ¬Έ λΆν΄, μ 보 μΆμΆ, μμ/μ°μ μ μΆλ‘ μν, κ²μ 곡μν μλ΄, κ·Έλ¦¬κ³ μ΅μ’ λ΅λ³ ν©μ±κ³Ό κ°μ λ€λ₯Έ μμ λ€μ μννλλ° μ¬μ©λ©λλ€.
λ€μμ ReAct ν둬ννΈ λͺ¨λ² μμμ λλ€(λ Όλ¬Έμμ κ°μ§κ³ μ¨ κ²μΌλ‘, κ°κ²°νκ² νκΈ° μν΄ νλμ μλ‘ μ€μμ΅λλ€).
μ§λ¬Έ μ½λ‘λΌλ μ‘°μ° μ΄λμ λμͺ½ ꡬμμ΄ νμ₯λλ μ§μμ νκ³ λ²μλ μΌλ§μ΄λ?
μκ° 1 μ½λ‘λΌλ μ‘°μ° μ΄λμ κ²μνμ¬, μ½λ‘λΌλ μ‘°μ° μ΄λμ λμͺ½ ꡬμμ΄ νμ₯λλ μ§μμ μ°Ύμ λ€μ, κ·Έ μ§μμ νκ³ λ²μλ₯Ό μ°ΎμμΌ ν΄.
νλ 1 κ²μνκΈ°[μ½λ‘λΌλ μ‘°μ° μ΄λ]
κ΄μ°° 1 μ½λ‘λΌλ μ‘°μ° μ΄λμ μ½λ‘λΌλμ κ·Έ μ£Όλ³ μ§μμμ μ°μ΄ νμ±λλ κ³Όμ (μ‘°μ° μ΄λ)μ λ§ν΄.
μκ° 2 λλΆμ λν μΈκΈμ΄ μμ΄. κ·Έλμ λλΆ μΉν°λ₯Ό μ°Ύμλ΄μΌκ² μ΄.
νλ 2 μ°Ύμ보기[λλΆ μΉν°]
κ΄μ°° 2 (κ²°κ³Ό 1 / 1) λμͺ½ μΉν°λ κ³ μ μ§λκΉμ§ λ»μ΄ μκ³ μ€μ νμ μ‘°μ° μ΄λμ΄λΌκ³ λΆλ €.
μκ° 3 μ½λ‘λΌλ μ‘°μ° μ΄λμ λμͺ½ μΉν°λ κ³ μ μ§λκΉμ§ λ»μ΄ μμ΄. λ°λΌμ κ³ μ μ§λλ₯Ό κ²μνμ¬ ν΄λ° λ²μλ₯Ό μ°ΎμμΌ ν΄.
νλ 3 κ²μ[κ³ μ μ§λ]
κ΄μ°° 3 κ³ μ μ§λλ λ κ°μ λ€λ₯Έ μ§λ μ€ νλλ₯Ό κ°λ₯΄μΌ.
μκ° 4 λμ κ³ μ μ§λ(λ―Έκ΅)λ₯Ό κ²μν΄μΌν΄.
νλ 4 κ²μ[κ³ μ μ§λ (λ―Έκ΅)]
κ΄μ°° 4 κ³ μ μ§λλ λνμ\(the Great Plains\)μ μΌλΆ μ§μμ΄μΌ. λμͺ½μμ μμͺ½μΌλ‘, κ³ μ μ§λλ μ½ 1,800νΌνΈμμ 7,000νΌνΈ(550~2,130m)κΉμ§ κ³ λκ° λμμ Έ.[3]
μκ° 5 κ³ μ μ§λμ ν΄λ° κ³ λλ μ½ 1,800~7,000νΌνΈμ΄λ―λ‘, μ λ΅μ 1,800~7,000νΌνΈμΌ.
νλ 5 μλ£[1,800~7,000νΌνΈ]
...
λ€λ₯Έ ννμ μμ μ μν΄μλ λ€λ₯Έ ν둬ννΈκ° μ¬μ©λλ κ²μ μ μνμΈμ. μΆλ‘ μ΄ κ°μ₯ μ€μν μμ (μ: HotpotQA)μ κ²½μ°, μμ ν΄κ²° κΆ€μ μ μ¬λ¬ μκ°-νλ-κ΄μ°° λ¨κ³κ° μ¬μ©λ©λλ€. λ§μ νλ λ¨κ³κ° ν¬ν¨λλ μμ¬ κ²°μ μ κ²½μ°, μκ°μ λλ¬Όκ² μ¬μ©λ©λλ€.
Results on Knowledge-Intensive Tasks
μ΄ λ Όλ¬Έμμλ λ¨Όμ μ§λ¬Έ λ΅λ³(HotPotQA) κ·Έλ¦¬κ³ μ¬μ€ νμΈ(Fever (opens in a new tab))κ³Ό κ°μ μ§μ μ§μ½μ μΆλ‘ μμ μ λν΄ ReActλ₯Ό νκ°ν©λλ€. PaLM-540Bλ₯Ό ν둬νν μ μν κΈ°λ³Έ λͺ¨λΈλ‘ μ¬μ©νμμ΅λλ€.

μ΄λ―Έμ§ μΆμ²: Yao et al., 2022 (opens in a new tab)
μλ‘ λ€λ₯Έ ν둬νν λ°©λ²μ μ¬μ©νλ HotPotQAμ Feverμ λν ν둬νν κ²°κ³Όλ₯Ό 보면 μΌλ°μ μΌλ‘ λ μμ λͺ¨λμμ ReActκ° Act(νλλ§ ν¬ν¨)λ³΄λ€ λ λμ μ±λ₯μ 보μ λλ€.
λν ReActκ° Feverμμλ CoTλ³΄λ€ μ±λ₯μ΄ λ°μ΄λκ³ HotPotQAμμλ CoTλ³΄λ€ λ€μ²μ§λ κ²μ κ΄μ°°ν μ μμ΅λλ€. μμΈν μ€λ₯ λΆμμ λ Όλ¬Έμμ νμΈν μ μμ΅λλ€. μμ½νμλ©΄ λ€μκ³Ό κ°μ΅λλ€.
- CoT λ μ¬μ€ μ°©κ°μ μλ¬λ¦½λλ€.
- ReActμ ꡬ쑰μ μ μ½μ μΆλ‘ λ¨κ³λ₯Ό 곡μνν λ μ μ°μ±μ΄ λ¨μ΄μ§λλ€.
- ReActλ κ²μνλ μ 보μ ν¬κ² μμ‘΄ν©λλ€; μ λ³΄κ° μλ κ²μ κ²°κ³Όλ λͺ¨λΈ μΆλ‘ μ λ°©ν΄νκ³ μκ°μ 볡ꡬνκ³ μ¬κ΅¬μ±νλλ° μ΄λ €μμ μ΄λν©λλ€.
ReActμ CoT+Self-Consistency κ°μ μ νμ κ²°ν©νκ³ μ§μνλ ν둬νν λ°©λ²μ μΌλ°μ μΌλ‘ λͺ¨λ λ€λ₯Έ ν둬νν λ°©λ²λ€λ³΄λ€ μ±λ₯μ΄ λ°μ΄λ©λλ€.
Results on Decision Making Tasks
μ΄ λ Όλ¬Έμμλ μμ¬ κ²°μ μμ μμ ReActμ μ±λ₯μ μ μ¦νλ κ²°κ³Όλ λ³΄κ³ ν©λλ€. ReActλ ALFWorld (opens in a new tab)(ν μ€νΈ κΈ°λ° κ²μ)μ WebShop (opens in a new tab)(μ¨λΌμΈ μΌν μΉμ¬μ΄νΈ νκ²½)μ΄λΌλ λ κ°μ§ λ²€μΉλ§ν¬μμ νκ°λμμ΅λλ€. λ λ²€μΉλ§ν¬ λͺ¨λ ν¨κ³Όμ μΌλ‘ νλνκ³ νμνκΈ° μν΄ μΆλ‘ μ΄ νμν 볡μ‘ν νκ²½μ ν¬ν¨ν©λλ€.
ReAct ν둬ννΈλ μΆλ‘ κ³Ό νλμ κ²°ν©μ΄λΌλ λμΌν ν΅μ¬ μμ΄λμ΄λ₯Ό μ μ§νλ©΄μ μ΄λ¬ν μμ λ€μ λν΄ λ€λ₯΄κ² μ€κ³λμμ΅λλ€. μλλ ReAct ν둬νν μ΄ ν¬ν¨λ ALFWorld λ¬Έμ μ μμμ λλ€.

μ΄λ―Έμ§ μΆμ²: Yao et al., 2022 (opens in a new tab)
ReActλ ALFWorldμ Webshop λͺ¨λμμ Act λ³΄λ€ μ±λ₯μ΄ λ°μ΄λ©λλ€. μ΄λ ν μκ°μ΄ μλ Actλ λͺ©νλ₯Ό νμ λͺ©νλ‘ μ ννκ² λΆν΄νλλ° μ€ν¨νμμ΅λλ€. μΆλ‘ μ μ΄λ¬ν μ νμ μμ μ λν΄ ReActμμ μ΄μ μ΄ μλ κ²μΌλ‘ 보μ΄μ§λ§, νμ¬ ν둬νν κΈ°λ° λ°©λ²μ μ¬μ ν μ΄λ¬ν μμ λ€μ λν μ λ¬Έ μΈλ ₯μ μ±λ₯μλ λ―ΈμΉμ§ λͺ» ν©λλ€.
LangChain ReAct Usage
μλλ ReAct ν둬νν μ κ·Ό λ°©μμ΄ μ€μ λ‘ μ΄λ»κ² μ΄λ£¨μ΄μ§λμ§μ λν κ°λ΅μ μΈ μμ λλ€. μ°λ¦¬λ λκ·λͺ¨μΈμ΄λͺ¨λΈκ³Ό λ€λ₯Έ λꡬμ νμ κ²°ν©νμ¬ μμ μ μννλ μμ΄μ νΈλ₯Ό ꡬμΆνκΈ° μν΄ ReAct νλ μμν¬λ₯Ό νμ©νλ κΈ°λ₯μ΄ μ΄λ―Έ λ΄μ₯λμ΄ μκΈ° λλ¬Έμ λκ·λͺ¨μΈμ΄λͺ¨λΈκ³Ό LangChain (opens in a new tab)μ λν΄ OpenAIλ₯Ό μ¬μ©ν©λλ€.
λ¨Όμ νμν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉνκ³ κ°μ§κ³ μ΅λλ€.
%%capture
# update or install the necessary libraries
!pip install --upgrade openai
!pip install --upgrade langchain
!pip install --upgrade python-dotenv
!pip install google-search-results
# import libraries
import openai
import os
from langchain.llms import OpenAI
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from dotenv import load_dotenv
load_dotenv()
# load API keys; you will need to obtain these if you haven't yet
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
os.environ["SERPER_API_KEY"] = os.getenv("SERPER_API_KEY")
μ΄μ μ°λ¦¬λ λκ·λͺ¨μΈμ΄λͺ¨λΈ, μ°λ¦¬κ° μ¬μ©ν λꡬλ€, κ·Έλ¦¬κ³ ReAct νλ μμν¬λ₯Ό λκ·λͺ¨μΈμ΄λͺ¨λΈκ³Ό λꡬλ₯Ό ν¨κ» νμ©ν μ μλ μμ΄μ νΈλ₯Ό ꡬμ±ν μ μμ΅λλ€. μΈλΆ μ 보 κ²μνκΈ° μν κ²μ APIμ μν λꡬλ‘λ λκ·λͺ¨μΈμ΄λͺ¨λΈμ μ¬μ©νλ κ²μ μ μνμΈμ.
llm = OpenAI(model_name="text-davinci-003" ,temperature=0)
tools = load_tools(["google-serper", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
ꡬμ±μ΄ μλ£λλ©΄, μ°λ¦¬λ μ΄μ μνλ 쿼리/ν둬ννΈλ‘ μμ΄μ νΈλ₯Ό μ€νν μ μμ΅λλ€. μ¬κΈ°μλ λ°±μμμ μ€λͺ νλ κ²μ²λΌ ν¨μ· 견본μ μ 곡νμ§ μλλ€λ μ μ μ μνμΈμ.
agent.run("Olivia Wildeμ λ¨μ μΉκ΅¬λ λꡬμ΄λ? 0.23 κ±°λμ κ³±μ νλ©΄ νμ¬ κ·Έμ λμ΄λ μΌλ§μ΄λ?")
μ²΄μΈ μ€ν(chain execution)μ λ€μκ³Ό κ°μ΅λλ€.
> Entering new AgentExecutor chain...
λλ Olivia Wildeμ λ¨μ μΉκ΅¬κ° λꡬμΈμ§ μμλ΄κ³ 0.23 κ±°λμ κ³±μ ν κ·Έμ λμ΄λ₯Ό κ³μ°ν΄μΌν΄.
νλ : κ²μ
νλ μ
λ ₯ : "Olivia Wilde λ¨μ μΉκ΅¬"
κ΄μ°° : Olivia Wildeλ Jason Sudeikisμ μλ
κ°μ μ½νΌμ λλΈ ν Harry Stylesμ μ¬κ·κΈ° μμνμ΄. (λ μ¬λκ°μ κ΄κ³ νμλΌμΈ μ°Έμ‘°)
μκ° : Harry Stylesμ λμ΄λ₯Ό μμμΌν΄.
νλ : κ²μ
νλ μ
λ ₯ : "Harry Styles λμ΄"
κ΄μ°° : 29 μΈ
μκ° : λλ 29 μ 0.23 κ±°λμ κ³±μ κ³μ°ν΄μΌ ν΄.
νλ : κ³μ°κΈ°
νλ μ
λ ₯ : 29^0.23
κ΄μ°° : λ΅λ³ : 2.169459462491557
μκ° : λλ μ΄μ λ§μ§λ§ λ΅λ³μ μκ³ μμ΄.
μ΅μ’
λ΅λ³ : Olivia Wildeμ λ¨μ μΉκ΅¬μΈ Harry Stylesλ 29 μΈμ΄κ³ , κ·Έμ λμ΄μ 0.23 κ±°λμ κ³±ν κ°μ 2.169459462491557 μ΄μΌ.
> Finished chain.
μΆλ ₯μ λ€μκ³Ό κ°μ΅λλ€.
"Olivia Wildeμ λ¨μ μΉκ΅¬μΈ Harry Stylesλ 29 μΈμ΄κ³ , κ·Έμ λμ΄μ 0.23 κ±°λμ κ³±ν κ°μ 2.169459462491557 μ΄μΌ."
μ΄ μμ λ LangChain λ¬Έμ (opens in a new tab)μμ κ°μ Έμ¨ κ²μ΄λ―λ‘ ν΄λΉ λ¬Έμμ 곡λ‘κ° μμ΅λλ€. μ°λ¦¬λ νμ΅μκ° λ€μν λꡬμ μμ μ μ‘°ν©μ νμν΄ λ³Ό κ²μ κΆμ₯ν©λλ€.
μ΄ μ½λμ λν λ ΈνΈλΆμ μ΄κ³³ (opens in a new tab)μμ νμΈν μ μμ΅λλ€.