Yao et al., 2022 เปิดตัวเฟรมเวิร์กชื่อ ReAct โดยที่ LLM ถูกใช้เพื่อสร้างทั้ง การติดตามการให้เหตุผล และ การดำเนินการเฉพาะงาน ในลักษณะที่มีการแทรกสลับ
การสร้างการติดตามการให้เหตุผลช่วยให้แบบจำลองสามารถกระตุ้น ติดตาม และปรับปรุงแผนปฏิบัติการ และแม้กระทั่งจัดการข้อยกเว้น ขั้นตอนการดำเนินการช่วยให้สามารถเชื่อมต่อกับและรวบรวมข้อมูลจากแหล่งภายนอก เช่น ฐานความรู้หรือสภาพแวดล้อม
กรอบงาน ReAct ช่วยให้ LLM สามารถโต้ตอบกับเครื่องมือภายนอกเพื่อดึงข้อมูลเพิ่มเติมที่นำไปสู่การตอบกลับที่เชื่อถือได้และเป็นข้อเท็จจริงมากขึ้น
ผลลัพธ์แสดงให้เห็นว่า ReAct สามารถทำงานได้ดีกว่าพื้นฐานอันล้ำสมัยหลายประการในด้านภาษาและงานการตัดสินใจ ReAct ยังนำไปสู่การปรับปรุงความสามารถในการตีความของมนุษย์และความน่าเชื่อถือของ LLM โดยรวมแล้ว ผู้เขียนพบว่าแนวทางที่ดีที่สุดใช้ ReAct ร่วมกับห่วงโซ่แห่งความคิด (CoT) ซึ่งช่วยให้สามารถใช้ทั้งความรู้ภายในและข้อมูลภายนอกที่ได้รับในระหว่างการให้เหตุผล
ReAct ได้รับแรงบันดาลใจจากการทำงานร่วมกันระหว่าง "การแสดง" และ "การใช้เหตุผล" ซึ่งช่วยให้มนุษย์เรียนรู้งานใหม่ๆ และทำการตัดสินใจหรือใช้เหตุผลได้
การกระตุ้นแบบลูกโซ่แห่งความคิด (CoT) แสดงให้เห็นถึงความสามารถของ LLM ในการดำเนินการติดตามการให้เหตุผลเพื่อสร้างคำตอบสำหรับคำถามที่เกี่ยวข้องกับการคำนวณทางคณิตศาสตร์และการใช้เหตุผลทั่วไป ท่ามกลางงานอื่น ๆ (Wei et al., 2022) แต่การขาดการเข้าถึงโลกภายนอกหรือการไม่สามารถอัปเดตความรู้ได้อาจนำไปสู่ปัญหาต่างๆ เช่น ภาพหลอนข้อเท็จจริงและการแพร่กระจายข้อผิดพลาด
ReAct เป็นกระบวนทัศน์ทั่วไปที่ผสมผสานการให้เหตุผลและการดำเนินการเข้ากับ LLM ReAct แจ้งให้ LLM สร้างการติดตามการให้เหตุผลทางวาจาและการดำเนินการสำหรับงาน ซึ่งช่วยให้ระบบสามารถดำเนินการให้เหตุผลแบบไดนามิกเพื่อสร้าง รักษา และปรับแผนสำหรับการดำเนินการ ในขณะเดียวกันก็เปิดใช้งานการโต้ตอบกับสภาพแวดล้อมภายนอก (เช่น วิกิพีเดีย) เพื่อรวมข้อมูลเพิ่มเติมเข้ากับการให้เหตุผล รูปด้านล่างแสดงตัวอย่างของ ReAct และขั้นตอนต่างๆ ที่เกี่ยวข้องในการตอบคำถาม
ที่มาของภาพ: Yao et al., 2022
ในตัวอย่างข้างต้น เราส่งข้อความพร้อมต์เหมือนคำถามต่อไปนี้จาก HotpotQA:
Aside from the Apple Remote, what other devices can control the program Apple Remote was originally designed to interact with?
โปรดทราบว่าตัวอย่างในบริบทจะถูกเพิ่มลงในพรอมต์ด้วย แต่เรายกเว้นไว้ที่นี่เพื่อความง่าย เราจะเห็นได้ว่าแบบจำลองนี้สร้างวิถีการแก้ปัญหาของงาน (ความคิด การกระทำ) Obs สอดคล้องกับการสังเกตจากสภาพแวดล้อมที่มีการโต้ตอบด้วย (เช่น เครื่องมือค้นหา) โดยพื้นฐานแล้ว ReAct สามารถดึงข้อมูลเพื่อสนับสนุนการใช้เหตุผล ในขณะที่การใช้เหตุผลจะช่วยกำหนดเป้าหมายว่าจะต้องดึงข้อมูลใดต่อไป
เพื่อสาธิตวิธีการทำงานของ ReAct prompting เรามาทำตามตัวอย่างจากรายงานนี้
ขั้นตอนแรกคือการเลือกกรณีจากชุดการฝึกอบรม (เช่น HotPotQA) และเขียนวิถีรูปแบบ ReAct สิ่งเหล่านี้ใช้เป็นตัวอย่างไม่กี่ช็อตในข้อความแจ้ง วิถีประกอบด้วยขั้นตอนการคิด-การกระทำ-การสังเกตหลายขั้นตอนดังแสดงในรูปด้านบน ความคิดรูปแบบอิสระถูกนำมาใช้เพื่อให้บรรลุภารกิจต่างๆ เช่น การแยกย่อยคำถาม การดึงข้อมูล การใช้เหตุผลสามัญสำนึก/เลขคณิต การสร้างแนวทางการค้นหา และการสังเคราะห์คำตอบสุดท้าย
นี่คือตัวอย่างของลักษณะของพรอมต์ ReAct (ได้มาจากรายงานและย่อให้เหลือเพียงตัวอย่างเดียวเพื่อความเรียบง่าย):
Question What is the elevation range for the area that the eastern sector of the
Colorado orogeny extends into?
Thought 1 I need to search Colorado orogeny, find the area that the eastern sector
of the Colorado orogeny extends into, then find the elevation range of the
area.
Action 1 Search[Colorado orogeny]
Observation 1 The Colorado orogeny was an episode of mountain building (an orogeny) in
Colorado and surrounding areas.
Thought 2 It does not mention the eastern sector. So I need to look up eastern
sector.
Action 2 Lookup[eastern sector]
Observation 2 (Result 1 / 1) The eastern sector extends into the High Plains and is called
the Central Plains orogeny.
Thought 3 The eastern sector of Colorado orogeny extends into the High Plains. So I
need to search High Plains and find its elevation range.
Action 3 Search[High Plains]
Observation 3 High Plains refers to one of two distinct land regions
Thought 4 I need to instead search High Plains (United States).
Action 4 Search[High Plains (United States)]
Observation 4 The High Plains are a subregion of the Great Plains. From east to west, the
High Plains rise in elevation from around 1,800 to 7,000 ft (550 to 2,130
m).[3]
Thought 5 High Plains rise in elevation from around 1,800 to 7,000 ft, so the answer
is 1,800 to 7,000 ft.
Action 5 Finish[1,800 to 7,000 ft]
...
โปรดทราบว่าการตั้งค่าพร้อมท์ที่แตกต่างกันจะใช้สำหรับงานประเภทต่างๆ สำหรับงานที่การให้เหตุผลมีความสำคัญอันดับแรก (เช่น HotpotQA) จะใช้ขั้นตอนการคิด-การกระทำ-การสังเกตหลายขั้นตอนสำหรับวิถีการแก้ปัญหางาน สำหรับงานการตัดสินใจที่เกี่ยวข้องกับขั้นตอนการกระทำจำนวนมาก ความคิดจะถูกใช้อย่างกระจัดกระจาย
บทความนี้จะประเมิน ReAct ในงานการให้เหตุผลแบบเน้นความรู้ เช่น การตอบคำถาม (HotPotQA) และการตรวจสอบข้อเท็จจริง (Fever)
- PaLM-540B ใช้เป็นโมเดลพื้นฐานสำหรับการแจ้ง
ที่มาของภาพ: Yao et al., 2022
ผลการแจ้งของ HotPotQA และ Fever โดยใช้วิธีการแจ้งที่แตกต่างกันแสดงให้เห็นว่า โดยทั่วไปแล้ว ReAct ทำงานได้ดีกว่า Act (เกี่ยวข้องกับการดำเนินการเท่านั้น) ในทั้งสองงาน
นอกจากนี้เรายังสามารถสังเกตได้ว่า ReAct มีประสิทธิภาพเหนือกว่า CoT บน Fever และล้าหลัง CoT บน HotpotQA การวิเคราะห์ข้อผิดพลาดโดยละเอียดมีอยู่ในเอกสารนี้ สรุป:
CoT ทนทุกข์ทรมานจากภาพหลอนข้อเท็จจริง
ข้อจำกัดทางโครงสร้างของ ReAct ลดความยืดหยุ่นในการกำหนดขั้นตอนการให้เหตุผล
ReAct ขึ้นอยู่กับข้อมูลที่ดึงมาเป็นอย่างมาก ผลการค้นหาที่ไม่ให้ข้อมูลจะทำลายการใช้เหตุผลของแบบจำลองและนำไปสู่ความยากลำบากในการฟื้นตัวและการจัดรูปแบบความคิดใหม่
วิธีการแจ้งที่รวมและรองรับการสลับระหว่าง ReAct และ CoT+Self-Consistency โดยทั่วไปมีประสิทธิภาพเหนือกว่าวิธีการแจ้งอื่นๆ ทั้งหมด
เอกสารนี้ยังรายงานผลลัพธ์ที่แสดงให้เห็นถึงประสิทธิภาพของ ReAct ในงานการตัดสินใจอีกด้วย ReAct ได้รับการประเมินโดยใช้เกณฑ์มาตรฐานสองรายการที่เรียกว่า ALFWorld (เกมแบบข้อความ) และ WebShop (สภาพแวดล้อมเว็บไซต์ช้อปปิ้งออนไลน์) ทั้งสองเกี่ยวข้องกับสภาพแวดล้อมที่ซับซ้อนซึ่งต้องใช้เหตุผลในการดำเนินการและสำรวจอย่างมีประสิทธิภาพ
โปรดทราบว่าพรอมต์ ReAct ได้รับการออกแบบที่แตกต่างกันสำหรับงานเหล่านี้ ในขณะที่ยังคงรักษาแนวคิดหลักเดียวกันในการรวมการใช้เหตุผลและการดำเนินการ ด้านล่างนี้เป็นตัวอย่างสำหรับปัญหา ALFWorld ที่เกี่ยวข้องกับการพร้อมท์ ReAct
ที่มาของภาพ: Yao et al., 2022
ReAct มีประสิทธิภาพเหนือกว่า Act ทั้งใน ALFWorld และ Webshop ลงมือทำโดยไม่คิดอะไร ไม่สามารถแยกย่อยเป้าหมายออกเป็นเป้าหมายย่อยได้อย่างถูกต้อง การใช้เหตุผลดูเหมือนจะได้เปรียบใน ReAct สำหรับงานประเภทนี้ แต่วิธีการตามการกระตุ้นเตือนในปัจจุบันยังห่างไกลจากประสิทธิภาพของมนุษย์ที่เชี่ยวชาญในงานเหล่านี้
ตรวจสอบกระดาษเพื่อดูผลลัพธ์โดยละเอียดเพิ่มเติม
ด้านล่างนี้เป็นตัวอย่างระดับสูงเกี่ยวกับวิธีการทำงานของแนวทางปฏิบัติของ ReAct prompting เราจะใช้ OpenAI สำหรับ LLM และ LangChain เนื่องจากมีฟังก์ชันการทำงานในตัวที่ใช้ประโยชน์จากเฟรมเวิร์ก ReAct เพื่อสร้างตัวแทนที่ดำเนินงานโดยการรวมพลังของ LLM และเครื่องมือต่างๆ
ขั้นแรก มาติดตั้งและนำเข้าไลบรารีที่จำเป็นกันก่อน:
%%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")
ตอนนี้เราสามารถกำหนดค่า LLM เครื่องมือที่เราจะใช้ และเอเจนต์ที่ช่วยให้เราสามารถใช้ประโยชน์จากเฟรมเวิร์ก ReAct ร่วมกับ LLM และเครื่องมือได้ โปรดทราบว่าเรากำลังใช้ API การค้นหาเพื่อค้นหาข้อมูลภายนอกและ LLM เป็นเครื่องมือทางคณิตศาสตร์
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("Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?")
การดำเนินการลูกโซ่มีลักษณะดังนี้:
> Entering new AgentExecutor chain...
I need to find out who Olivia Wilde's boyfriend is and then calculate his age raised to the 0.23 power.
Action: Search
Action Input: "Olivia Wilde boyfriend"
Observation: Olivia Wilde started dating Harry Styles after ending her years-long engagement to Jason Sudeikis — see their relationship timeline.
Thought: I need to find out Harry Styles' age.
Action: Search
Action Input: "Harry Styles age"
Observation: 29 years
Thought: I need to calculate 29 raised to the 0.23 power.
Action: Calculator
Action Input: 29^0.23
Observation: Answer: 2.169459462491557
Thought: I now know the final answer.
Final Answer: Harry Styles, Olivia Wilde's boyfriend, is 29 years old and his age raised to the 0.23 power is 2.169459462491557.
> Finished chain.
ผลลัพธ์ที่เราได้รับจะเป็นดังนี้:
"Harry Styles, Olivia Wilde's boyfriend, is 29 years old and his age raised to the 0.23 power is 2.169459462491557."
เราดัดแปลงตัวอย่างจากเอกสารของ LangChain เครดิตจึงตกเป็นของพวกเขา เราสนับสนุนให้ผู้เรียนสำรวจการผสมผสานระหว่างเครื่องมือและงานต่างๆ
คุณสามารถค้นหาสมุดบันทึกสำหรับรหัสนี้ได้ที่นี่: https://github.com/dair-ai/Prompt-Engineering-Guide/blob/main/notebooks/react.ipynb