πŸš€ Master Prompt Engineering and building AI Agents in our NEW courses! Use PROMPTING20 for 20% off ➜ Enroll now

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의 μ˜ˆμ™€ 질문 닡변을 μˆ˜ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ λ‹€λ₯Έ 단계듀을 λ³΄μ—¬μ€λ‹ˆλ‹€.

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λ₯Ό ν”„λ‘¬ν”„νŒ…μ„ μœ„ν•œ κΈ°λ³Έ λͺ¨λΈλ‘œ μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

REACT1

이미지 좜처: 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 문제의 μ˜ˆμ‹œμž…λ‹ˆλ‹€.

REACT2

이미지 좜처: 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)μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.