TechY

ReAct paper 읽어보며 이것저것 생각해보기 본문

[간단 정리]

ReAct paper 읽어보며 이것저것 생각해보기

hskimim 2025. 3. 5. 00:50

요새 deep research 기능이 다양한 챗봇들에서 보이는데, 이걸 돌리고 trajectory 를 가만히 읽어보면 아래와 같은 구조를 갖고 있는 것 같다는 생각이 들었다.

  • 생각 -> 서치 -> 관측 -> 생각 -> 서치 -> 관측 -> ...

이건 아래와 같이 추상화가 될 수 있겠다는 생각이 들었다.

  • 생각(관측_t) -> 서치, 관측_0 = user question, 서치 = action

생각이라는 고정된 함수가 주어진 관측값을 갖고 어떤 액션을 취하는 것이다.

강화 학습 scheme 으로 치환하면 생각은 policy, 관측은 state, 서치는 action이다. π(a|s)=Pr(At=a|St=s)

 

이러한 공상을 하다가, 이러한 구조로 llm agent 를 만들었던 논문이 있길래 찾아서 읽어본다. ReAct 라는 논문이다.

ReAct 논문 주소 : https://arxiv.org/abs/2210.03629

ReAct 한글 설명 블로그 : https://www.promptingguide.ai/kr/techniques/react

ReAct LangGraph 구현 : https://langchain-ai.github.io/langgraph/reference/prebuilt/#langgraph.prebuilt.chat_agent_executor.create_react_agent


논문 정리

https://arxiv.org/abs/2210.03629

 

  • 해결하고자 문제 : 
    • CoT는 LLM의 internal knowledge 만을 사용하기에 hallucination 문제가 있음
    • tool 을 사용하는 Act only 는 LLM의 reasoning, planning power 를 충분히 사용하지 못함. reasoning trace 가 안좋음
  • 제안한 방법 : 
    • CoT와 Act 를 합친다. 이 둘을 합치면, 시너지가 발생한다

방법을 조금만 더 자세히

  • 서치 자체를 a_t (action at t), 서치의 결과를 o_t (observation at t) 라고 하자. 
  • trajectory 를 ct=(o1,a1,...,ot,at) 라고 쓸 수 있다. (c 는 context 를 나타냄)
  • policy π(at|ct) 를 최적화하는 것은 주어진 관측 결과에 더 나은 tool 사용을 의미한다. 근데 이 policy model 을 학습하는 것은 computationally expensive 할 것이고, implicit 하기 때문에 (reward 정의) 학습 자체가 되게 어렵다.
  • 하지만 우리에겐 이전에 만들어놓은 LLM이라는 훌륭한 policy model 이 있다. observation 을 받고, LLM이 그것을 해석하고 생각하게 해서 그 다음 액션을 추론하게 한다.
  • 이에 따라 전체적인 framework 이 thought -> act -> obs 가 된다.
  • 풀고자 하는 도메인 데이터셋에 대해서, 10개 under 의 few shot prompt 를 작업하고 나면, 잘 working 한다!
더보기
https://langchain-ai.github.io/langgraph/reference/prebuilt/#langgraph.prebuilt.chat_agent_executor.create_react_agent

 

여기까지가 논문의 내용 요약이다. 이제 다시 공상을 시작해보자..

 


저 논문이 나왔을 때와 지금은 무엇이 다른가? 무엇을 더 할 수 있는가?

  1. 일단 모델이 더 똑똑하다. ReAct 논문은 gpt-3 를 사용했는데, 지금은 4.5가 나왔다.
    1. 이게 가장 크다고 본다
    2. 논문에서는 CoT랑 ReAct 를 나누고, ReAct 가 CoT 대비 갖는 reasoning trace 의 약점이 있다고 얘기한다. 하지만, 지금은 이걸 구분할 필요가 없어짐
    3. 논문에서는 thought process 에 대해서 별다른 instruction이 없다. 그냥 prompt 기법으로 모든 것을 만든다. 이에 따라 general framework 을 띄지만, 개별 도메인에 대해서 만드려면 그때마다 prompt 를 set-up 해야 하는데, 이제는 그럴 필요가 없이 instruction 을 주면 그에 걸맞는 thought 를 만들 수 있을 것Reasoning Model 이 나왔다. Model 을 선택하면 모델이 주어진 상황에 최적화된 reasoning trace 를 만들어낸다.

 

ReAct 의 thought -> action -> observation framework 을 그대로 계승하되, 기존의 prompt 기법을 사용하지 않고, 각 process를 agent 화 시킨 다음에, thought process에 reasoning model 을 사용해서, reasoning 단계 이후 function calling 에 대한 structured output 을 반환하게 하면, general domain 문제에 대해서 더 잘 해결할 수 있을 것으로 보인다. (아마 이런 식으로 많이들 사용하고 있겠지만..ㅎㅎ 망상의 유도 과정이라고 생각해주면 좋을 듯 하다)


DeepResearch 가 O-series 이후에 나온 이유가 있지 않을까?

  • thought -> action -> observation 에서, 일단 search인 action 부분은 사실상 deterministic 하다. external tool을 사용하기 때문에, 모델에 대한 dependency 가 없다. 이에 따라서 O-series 의 출현에 큰 영향을 받지는 않았을 것
  • 사실 중요한 것은 thought 가 아니었을까? 
    • (thought, action, observation) 의 반복이 계속 진행되는데, "문제를 풀어간다는 것" 을 이해하기 위해서는 planning 능력이 필수적으로 필요하다. 그러기 위해서 ct=[(thought,action,observation)1,...,(thought,action,observation)t1] 다음의 thought 를 만들어내기 위해서는 강력한 reasoning ability 가 요구될 것이다.

CoT 에 대해 최적화한 것이 O-series 인데, 이것을 최적화하면 Deep-Research 가 될 수 있지 않을까?

각 phase에 대응되는 reward model 을 만들면 가능하지 않을까. 최근에 읽은 논문인 "Can 1B LLM Surpass 405B LLM? Rethinking Compute-Optimal Test-Time Scaling" 을 보면 각 reasoning phase 에 따라 reward 를 할당하는 PRM (process reward model) 을 사용한다. 점수가 높을 수록 각 단계에 대해서 좋다고 판단하는 것이고, 해당 단계를 더 많이 선택하는 것이다.

 

알파고 같은 경우도 최종적으로 승/패를 보고 승인 경우, 바둑을 두었던 그 trajectory에 더 높은 value를 부여하는 것처럼, 결과가 좋으면 그 결과에 대한 reasoning phase 에 더 높은 value 를 부여하면서 PRM 을 학습시키는 것이다. (MDP 문제)

 

ReAct framework 도 그럴 수 있지 않을까. 물론 더 좋은 정답이라는 결과 데이터셋을 구축하는 것이 굉장히 비싸겠지만, 그것을 구축할 수 있다면 할 수 있을 것 같다. 다만 조금 다른 것은, 이 경우 각 phase 가 동일한 reasoning phase 를 의미하지만, ReAct framework 은 (thought, action, observation) 이라는 3개의 다른 phase 의 연속이다.

 

흠... 근데 이건 모듈화해서 하나로 쳐도 괜찮지 않을까 싶다.

  • thought 의 결과가 어떤 tool 을 사용해서 해당 tool 에 어떤 인자를 넣을 것인지에 대한 것이니 ex) wikipedia("lion") tool은 tool list 가 정해져 있다는 하에, reward 에 영향을 주지 않을 것이다. 
  • observation 은 tool 의 결과를 llm 이 해석하는 것인데, tool 의 결과가 deterministic 하다는 전제 하에, llm 의 temperature를 0을 줘서, deterministic output 을 반환하게 하면, 이 또한 고정이 된다.
  • 그럼 thought 만 학습시킬 수 있고, 서로 다른 llm agent가 하나의 phase 가 되어서 발생하는 학습의 불안정성을 잡아줄 수 있을 것으로 보인다.