ReAct مخفف Reasoning + Acting است. در ۲۰۲۲ مقالهای از Yao و همکاران منتشر شد که نشان داد اگر مدل زبانی بهجای فقط «فکر کردن» (مثل Chain-of-Thought)، بتواند بین فکر و اقدام جابهجا شود، در مسائل دنیای واقعی ۳۴ درصد بهتر از baseline عمل میکند. این تکنیک قلب همهی AI Agentهای امروزی است.
ReAct Prompting چیست؟
ReAct (تلفظ: ریاَکت، مخفف Reasoning + Acting) یک تکنیک پرامپتنویسی است که به مدل زبانی اجازه میدهد بین «فکر کردن» و «اقدام در دنیای بیرونی» جابهجا شود. این تکنیک اولینبار در مقالهی پژوهشی «ReAct: Synergizing Reasoning and Acting in Language Models» توسط Shunyu Yao و همکارانش از دانشگاه Princeton و Google Research در اکتبر ۲۰۲۲ معرفی شد.
تفاوت کلیدی ReAct با Chain-of-Thought این است: در CoT مدل فقط درون ذهن خودش فکر میکند، در ReAct مدل میتواند ابزار خارجی صدا کند (جستجوی Wikipedia، API هواشناسی، ماشینحساب، دیتابیس) و نتیجه را در استدلال بعدی استفاده کند.
چرا ReAct به وجود آمد؟
قبل از ReAct دو مشکل اساسی وجود داشت:
- Chain-of-Thought تنها → توهم میسازد: مدل وقتی اطلاعات ندارد، شروع میکند به «حدس زدن» با لحن قاطع. در تست HotpotQA، مدل برای سؤالات حقیقی اطلاعات اشتباه تولید میکرد.
- Action-only (فقط ابزار، بدون فکر) → برنامهریزی ضعیف: اگر مدل فقط بدون استدلال ابزار صدا کند، در مسائل چندمرحلهای گیج میشود و نمیتواند بفهمد قدم بعدی چیست.
ReAct این دو را ترکیب کرد: مدل ابتدا فکر میکند چه کاری باید بکند، سپس اقدام میکند، سپس مشاهدهی نتیجه را تحلیل میکند و دوباره فکر میکند. این حلقه تا رسیدن به جواب نهایی ادامه مییابد.
چرا ReAct امروز هم مهم است؟
با وجود ظهور مدلهای reasoning مانند OpenAI o1، DeepSeek R1 و Claude 3.7 Sonnet که خودشان CoT را درونیسازی کردهاند، ReAct همچنان الگوی غالب در framework های agent است:
- LangChain — agentهای
zero-shot-react-descriptionوconversational-react-description - LlamaIndex — agent ReActAgent
- CrewAI — multi-agent orchestration با الگوی ReAct
- AutoGen — agentهای مایکروسافت
دلیلش ساده است: مدلهای reasoning فقط بخش «فکر کردن» را خودکار کردهاند. برای ابزار خارجی همچنان به الگوی ReAct (یا Function Calling) نیاز داریم.
حلقهی Thought / Action / Observation
قلب ReAct یک حلقهی سهمرحلهای است که به آن TAO loop (یا Thought-Action-Observation loop) گفته میشود:
| مرحله | مدل چه میکند | نمونه |
|---|---|---|
| Thought (فکر) | تحلیل وضعیت، تصمیم درباره قدم بعدی | «برای پاسخ به این سؤال، اول باید جمعیت تهران را پیدا کنم» |
| Action (اقدام) | صدا زدن یک ابزار با آرگومان مشخص | Search["جمعیت تهران ۱۴۰۵"] |
| Observation (مشاهده) | دریافت نتیجه از محیط (نه از خود مدل) | «جمعیت تهران در سرشماری ۱۴۰۲: حدود ۹.۳ میلیون نفر» |
این چرخه تکرار میشود تا مدل به جواب نهایی برسد و Action: Finish[جواب] بزند.
قالب پرامپت ReAct (کد قابلکپی)
این یک system prompt مینیمال است که میتوانید همین الان روی Claude یا GPT-4 امتحان کنید:
| قالب پرامپت ReAct فارسی |
|---|
You are a helpful assistant that uses the ReAct format. For every user question, follow this loop: Thought: [your reasoning about what to do next] Action: [one of: Search[query], Calculate[expression], Finish[answer]] Observation: [result will be provided here] Repeat until you have enough information. Then output: Action: Finish[final answer] Example: Question: پایتخت ایران چه جمعیتی دارد؟ Thought: من باید جمعیت تهران را پیدا کنم. Action: Search[جمعیت تهران ۱۴۰۲] Observation: حدود ۹.۳ میلیون نفر Thought: حالا جواب را دارم. Action: Finish[تهران، پایتخت ایران، حدود ۹.۳ میلیون نفر جمعیت دارد.] |
Observation: را با نتیجهی واقعی پر کنید. اگر این کار را نکنید، مدل شروع به توهم Observation میکند یعنی جواب جستجو را از ذهن خودش میسازد، که هدف ReAct را نقض میکند.
۸ نوع Thought در یک agent خوب
بر اساس دورهی Agents هاگینگفیس، یک Thought میتواند نقشهای متفاوتی داشته باشد:
| نوع Thought | کاربرد | نمونه فارسی |
|---|---|---|
| Planning | تقسیم کار به مراحل | «باید اول قیمت دلار، بعد قیمت بیتکوین، بعد محاسبه کنم» |
| Analysis | تحلیل observation قبلی | «نتیجه ۹.۳ میلیون است که با گزارش ۱۴۰۲ همخوانی دارد» |
| Decision Making | انتخاب بین چند گزینه | «چون بودجه محدوده، ابزار رایگان را پیشنهاد میدهم» |
| Problem Solving | یافتن راهحل برای مانع | «جستجو خطا داد، با کلمهی متفاوت دوباره امتحان میکنم» |
| Memory Integration | یادآوری context قبلی | «کاربر قبلاً گفت در شیراز است، پس اطلاعات منطقهای میدهم» |
| Self-Reflection | بازنگری استراتژی | «دو بار جستجو ناموفق بود، روش متفاوتی امتحان میکنم» |
| Goal Setting | تعیین هدف میانی | «برای پاسخ کامل، باید سه منبع متفاوت چک کنم» |
| Prioritization | اولویتبندی اقدامات | «اطلاعات فنی مهمتر است، اول آن را میگیرم» |
مثال واقعی از مقالهی اصلی
مشهورترین مثال در مقالهی Yao 2022 از benchmark HotpotQA است. سؤال این بود:
What is the elevation range for the area that the eastern sector of the Colorado orogeny extends into?
«محدودهی ارتفاع منطقهای که بخش شرقی Colorado orogeny به آن گسترش مییابد، چقدر است؟»
این سؤال «multi-hop» است — برای پاسخ، اول باید بفهمی Colorado orogeny چیست، بعد بفهمی بخش شرقیاش کجاست، بعد ارتفاع آن منطقه را پیدا کنی. ببینیم سه روش متفاوت چطور برخورد میکنند:
روش ۱: پاسخ مستقیم (Standard Prompting)
| ❌ نتیجه |
|---|
| Answer: 3,000 ft تا 14,000 ft ← اشتباه (مدل از خودش حدس زد) |
روش ۲: Chain-of-Thought
| ⚠️ نتیجه |
|---|
Thought: Colorado orogeny شامل کوههای راکی است. بخش شرقی به Great Plains میرسد. Great Plains ارتفاع حدود 1,800 ft دارد. Answer: 1,800 to 14,000 ftهنوز اشتباه — مدل بخشی را حدس زد چون اطلاعات دقیق نداشت. |
روش ۳: ReAct (روش برنده)
| ✅ نتیجه: 1,800 to 7,000 ft (درست!) |
|---|
Thought 1: I need to search Colorado orogeny, find the area that the eastern sector extends into, then find the elevation range. 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: 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 elevation. Action 3: Search[High Plains] Observation 3: High Plains refers to one of two distinct land regions. The High Plains rise in elevation from around 1,800 to 7,000 ft. Thought 4: High Plains rise in elevation from 1,800 to 7,000 ft, so the answer is 1,800 to 7,000 ft. Action 4: Finish[1,800 to 7,000 ft] |
ReAct در برابر Chain-of-Thought
این دو تکنیک اغلب با هم اشتباه گرفته میشوند. تفاوتشان حیاتی است چون هر کدام برای نوع متفاوتی از مسائل مناسباند:
| ویژگی | Chain-of-Thought | ReAct |
|---|---|---|
| منبع اطلاعات | فقط دانش درونی مدل | دانش درونی + ابزار خارجی |
| تعداد تماس با مدل | یک تماس واحد | چند تماس در یک حلقه |
| ریسک توهم (Hallucination) | بالا (مدل حدس میزند) | پایین (واقعیت چک میشود) |
| سرعت پاسخ | سریع (یکبار) | کندتر (چند بار) |
| هزینه (token) | کم | بیشتر (n برابر) |
| بهترین برای | منطق، ریاضی، تحلیل متن | جستجو، API، تعامل با دنیا |
| عملکرد در Fever | پایینتر | بهتر از CoT |
| عملکرد در HotpotQA | کمی بهتر | کمی پایینتر (ولی ReAct+CoT بهترین) |
چه موقع کدام را انتخاب کنم؟
یک قانون ساده برای تصمیمگیری:
- اگر سؤال درونذهنی است (حساب کن ۱۵ ضرب در ۲۳، این کد را debug کن، این جمله را خلاصه کن) ← CoT کافی است.
- اگر سؤال نیاز به اطلاعات تازه دارد (قیمت دلار امروز، آخرین خبر، اطلاعات کاربر خاص) ← ReAct لازم است.
- اگر سؤال هم استدلال پیچیده میخواهد هم اطلاعات بیرونی ← ReAct + CoT ترکیبی بهترین جواب میدهد (بهویژه با مدلهای reasoning).
ReAct در برابر Function Calling
این مهمترین مقایسهی عملی است که هر agent builder باید بفهمد. خیلیها فکر میکنند Function Calling «جایگزین» ReAct شده است. حقیقت ظریفتر است.
| ویژگی | ReAct (الگوی پرامپتی) | Function Calling (قابلیت مدل) |
|---|---|---|
| سطح | روی پرامپت سوار میشود | درون خود مدل تعبیه شده |
| قالب خروجی | متن آزاد با کلیدواژه | JSON ساختیافته |
| قابلیت اطمینان parsing | گاهی اشتباه میشود | تضمینشده |
| سازگاری | هر مدل (حتی Llama محلی) | فقط مدلهای پشتیبانیکننده |
| هزینه implementation | پایین (فقط پرامپت) | متوسط (تعریف schema) |
| انعطافپذیری | بالا — هر چیزی | محدود به schema تعریفشده |
| توهم اقدام | ممکن (مدل ابزار ناموجود بسازد) | غیرممکن (فقط ابزار تعریفشده) |
کی کدام را انتخاب کنم؟
یک تصمیمگیری ساده:
- Function Calling انتخاب کن اگر: از GPT-4، Claude 3+، Gemini یا Llama 3+ استفاده میکنی، تعداد ابزارها مشخص و محدود است، نیاز به قابلیت اطمینان production داری.
- ReAct انتخاب کن اگر: از مدل بدون پشتیبانی function calling استفاده میکنی (مدلهای open-source قدیمی، مدل فارسی سفارشی)، میخواهی منطق agent را کاملاً کنترل کنی، یا روی مفاهیم آموزشی کار میکنی.
- ترکیب: ReAct + Function Calling: در framework های مدرن مثل LangChain، الگوی ReAct را با Function Calling زیرین ترکیب میکنند — بهترین هر دو دنیا.
اعداد واقعی benchmarkها
این بخش مهم است چون خیلی از مقالات فارسی فقط میگویند «ReAct بهتر است» بدون اینکه عدد بدهند. در مقالهی اصلی، چهار benchmark استفاده شد:
| Benchmark | نوع کار | ReAct vs بهترین baseline | نتیجه |
|---|---|---|---|
| HotpotQA | پرسشوپاسخ چندمرحلهای | کمی پایینتر از CoT تنها | ReAct+CoT بهترین |
| Fever | راستیآزمایی حقایق | بهتر از CoT | پیروزی ReAct |
| ALFWorld | بازی متنی (خانه) | +۳۴٪ نسبت به baseline | پیروزی قاطع |
| WebShop | خرید آنلاین شبیهسازیشده | +۱۰٪ با فقط ۱-۲ مثال | پیروزی روشن |
نتایج پژوهشهای جدیدتر
در ۲۰۲۶ مقالهای از arXiv منتشر شد که نشان داد:
- استدلال کوتاه (۳۲ توکن) دقت را تا +۴۵٪ نسبت به پاسخ مستقیم بهبود میدهد
- استدلال طولانی (۲۵۶+ توکن) برعکس، عملکرد را پایینتر از baseline میبرد
- یعنی Thought باید مختصر و هدفمند باشد، نه مونولوگ طولانی
این یافتهی critical برای ۱۴۰۵ است: «هرچه فکر بیشتر، بهتر» دیگر صادق نیست. Thoughtهای مختصر و عملمحور بهتر از مونولوگهای فلسفی هستند.
سه مثال فارسی کاربردی
این بخش جایی است که بیشتر مقالات فارسی کم میآورند. این سه نمونه را خودم در پروژههای فارسی تست کردهام:
مثال ۱: مشاور خرید با اطلاعات قیمت روز
سؤال کاربر: «یه گوشی زیر ۳۰ میلیون تومان پیشنهاد بده که برای عکاسی خوب باشه.»
| زنجیرهی ReAct |
|---|
Thought: کاربر بودجه ۳۰ میلیون داره و عکاسی مهمه. باید قیمت روز چند گوشی محبوب رو چک کنم. Action: Search[قیمت Samsung Galaxy A55 ترب امروز] Observation: حدود ۲۴ میلیون تومان Action: Search[قیمت iPhone 13 ترب امروز] Observation: حدود ۴۲ میلیون تومان Action: Search[قیمت Pixel 8a دیجیکالا] Observation: حدود ۲۹ میلیون تومان Thought: iPhone خارج از بودجهست. A55 و Pixel 8a در محدودهان. باید کیفیت دوربین رو مقایسه کنم. Action: Search[Galaxy A55 vs Pixel 8a camera comparison] Observation: Pixel 8a در عکاسی شب و HDR بهتر، A55 در ویدیو 4K بهتر. Action: Finish[برای عکاسی، Pixel 8a (۲۹ میلیون) را پیشنهاد میکنم...] |
چرا ReAct اینجا برنده است: هیچ مدلی قیمت لحظهای ترب را در حافظه ندارد. بدون جستجو، مدل قیمتهای منقضیشده میدهد. ReAct اطلاعات تازه را با تحلیل ترکیب میکند.
مثال ۲: دستیار سفارش پزشکی
سؤال کاربر: «داروی Metformin رو با یه قرص دیگه که برای فشار خون میخورم تداخل داره؟»
| زنجیرهی ReAct |
|---|
Thought: کاربر اسم داروی فشار خون رو نگفته. باید بپرسم. Action: AskUser[اسم دقیق داروی فشار خون شما چیست؟] Observation: کاربر گفت: Losartan 50mg Action: Search[Metformin Losartan interaction drugbank] Observation: تداخل خفیف. هر دو میتوانند با هم استفاده شوند ولی نیاز به پایش قند خون و فشار خون است. Action: Search[Metformin Losartan farsi pharmacist warning] Observation: داروسازی ایران: بدون منع، با تأیید پزشک. Thought: اطلاعات کافی دارم. اما باید توصیهی قطعی ندم، چون درمان شخصی است. Action: Finish[این دو دارو تداخل خطرناک ندارند ولی حتماً با پزشک خودتان مشورت کنید چون...] |
چرا ReAct اینجا برنده است: دو نوع Action دیدید: AskUser (پرسش از کاربر برای جزئیات) و Search (دانش پزشکی). agent خوب وقتی اطلاعات کافی ندارد، میداند که بپرسد، نه حدس بزند.
مثال ۳: تحلیلگر مالی کسبوکار
سؤال کاربر: «اگه ۱۰۰ میلیون رو ۳ ماه پیش طلا خریده بودم، الان چقدر سود کرده بودم؟»
| زنجیرهی ReAct |
|---|
Thought: ۳ ماه پیش یعنی حدود ۳ اسفند ۱۴۰۴. باید قیمت طلا اون روز و امروز رو پیدا کنم. Action: Search[قیمت طلا ۳ اسفند ۱۴۰۴] Observation: مثقال طلا حدود ۸۲ میلیون تومان Action: Search[قیمت طلا امروز ۳ خرداد ۱۴۰۵] Observation: مثقال طلا حدود ۹۸ میلیون تومان Thought: ۱۰۰ میلیون تومان در ۸۲ یعنی 1.22 مثقال. 1.22 × 98 = 119.5 میلیون. سود = 19.5 میلیون. Action: Calculate[(100/82) * 98 - 100] Observation: 19.51 Action: Finish[اگه ۱۰۰ میلیون رو ۳ ماه پیش طلا میخریدی، الان حدود ۱۱۹.۵ میلیون داشتی — یعنی ۱۹.۵ میلیون سود (تقریباً ۱۹.۵٪ بازدهی در ۳ ماه).] |
چرا ReAct اینجا برنده است: ترکیب سه نوع ابزار: جستجوی قیمت گذشته، جستجوی قیمت فعلی، و ماشینحساب. مدل خودش حساب نمیکند (که خطا میشد)، از ابزار استفاده میکند.
پیادهسازی ReAct با LangChain
LangChain سادهترین راه برای استفاده از ReAct در production است. این یک agent ReAct کامل با دو ابزار است که در ۱۵ خط پایتون اجرا میشود:
| کد LangChain برای agent ReAct (Python) |
|---|
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain_community.tools import DuckDuckGoSearchRun
from langchain.tools import Tool
from langchain import hub
# 1. مدل
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 2. ابزارها
search = DuckDuckGoSearchRun()
calc = Tool(
name="Calculator",
func=lambda x: str(eval(x)),
description="Useful for math. Input: a math expression."
)
tools = [search, calc]
# 3. پرامپت آماده ReAct از LangChain Hub
prompt = hub.pull("hwchase17/react")
# 4. ساخت agent و executor
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
max_iterations=5, # جلوگیری از حلقه بینهایت
handle_parsing_errors=True
)
# 5. اجرا
result = executor.invoke({
"input": "قیمت طلا امروز چنده؟ اگه ۱۰ گرم بخرم چقدر میشه؟"
})
print(result["output"]) |
۴ پارامتر critical در AgentExecutor
| پارامتر | مقدار پیشنهادی | چرا |
|---|---|---|
max_iterations |
۳ تا ۷ | جلوی حلقه بینهایت را میگیرد |
handle_parsing_errors |
True |
اگر خروجی مدل قالب اشتباه داشت، خطا نده — به مدل بگو دوباره امتحان کند |
early_stopping_method |
"generate" |
وقتی max_iterations رسید، یک خروجی نهایی تولید کن نه error |
verbose |
True در dev، False در production |
برای debug خیلی مفید است |
create_react_agent را با create_tool_calling_agent جایگزین کرد چون Function Calling قابلاعتمادتر است. ReAct کلاسیک هنوز برای مدلهای بدون function calling (مثل مدلهای open-source قدیمی، مدلهای فارسی محلی) ضروری است.
۶ دام رایج + راهحل
این بخش جایی است که agent builderهای تازهکار وقت میسوزانند. این ۶ مورد را خودم در پروژههای واقعی دیدهام:
۱. حلقهی بینهایت (Infinite Loop)
چه میشود: مدل یک Action تکرار میکند، Observation همان است، دوباره Action، دوباره Observation… برای ساعتها.
راهحل:
max_iterations=5در AgentExecutor- تشخیص تکرار: اگر همان Action دوبار صدا زده شد، agent را متوقف کن
- هزینه monitoring با ابزار مثل Langsmith
۲. توهم اقدام (Hallucinated Action)
چه میشود: مدل یک ابزار غیرموجود میسازد. مثلاً Action: SendEmail[user@example.com, ...] در حالی که ابزار SendEmail تعریف نشده.
راهحل:
- محدود کردن گرامر در پرامپت: «فقط از این ابزارها استفاده کن: [Search, Calculate, Finish]»
- Validation در parser: اگر action name در لیست نبود، error بده
- استفاده از Function Calling بهجای ReAct متنی
۳. توهم Observation
چه میشود: اگر در پیادهسازی فراموش کنید Observation واقعی را برگردانید، مدل خودش Observation جعلی میسازد و فکر میکند جستجو موفق بوده.
راهحل:
- همیشه قبل از فرستادن دوباره به مدل، خط
Observation:را با مقدار واقعی پر کن - اگر ابزار خطا داد،
Observation: Error: ...بفرست — نه چیزی
۴. Thoughtهای طولانی و فلسفی
چه میشود: مدل بهجای تصمیم سریع، شروع به نوشتن مقاله میکند: «در نگاه کلی، میتوان گفت که این مسئله چند بُعد دارد…»
راهحل:
- در سیستم پرامپت بگو: «Thought باید حداکثر ۲ جمله باشد»
- طبق پژوهش ۲۰۲۶ arXiv، Thoughtهای زیر ۳۲ توکن دقت را افزایش میدهد، بیش از ۲۵۶ توکن آن را کاهش میدهد
۵. وابستگی به کیفیت جستجو
چه میشود: اگر جستجو نتیجهی بد بدهد (مثلاً موتور جستجو دستکاریشده)، کل زنجیره خراب میشود.
راهحل:
- چند منبع جستجو متوالی (Google + DuckDuckGo + Bing)
- ترکیب با RAG روی دیتابیس تأییدشده
- اضافه کردن Thought نقد: «آیا این منبع قابلاعتماد است؟»
۶. هزینهی توکن انفجاری
چه میشود: هر loop ReAct = یک تماس کامل با مدل + کل history. در پنج loop، ۵ برابر CoT هزینه میکنید.
راهحل:
- مدل ارزانتر برای planning (Haiku) + مدل قوی برای جواب نهایی (Opus)
- summarize کردن Observationهای قبلی
- caching جواب جستجوهای تکراری
max_iterations و timeout اجرا کن. هیچوقت بدون این دو limit به agent اجازه نده آزاد بدود. حتی Anthropic در راهنمای رسمیاش این را تأکید میکند.
آیندهی ReAct در عصر o1 و R1
سؤال بزرگ ۱۴۰۵ این است: «حالا که مدلهای reasoning مثل OpenAI o1، Claude 3.7 Sonnet thinking، DeepSeek R1 خودشان فکر میکنند، ReAct دیگر لازم است؟»
پاسخ کوتاه: بله، اما نقشش عوض شده.
مدلهای reasoning بخش Thought را در training داخلیسازی کردهاند. آنها بدون نیاز به «Let's think step by step»، خودشان قبل از پاسخ، یک زنجیرهی استدلال طولانی داخلی تولید میکنند که در توکنهای <thinking> یا reasoning پنهان است.
اما این مدلها نمیتوانند ابزار خارجی صدا کنند مگر اینکه از الگوی ReAct (یا معادل آن) استفاده کنند. پس:
| عصر | نقش CoT | نقش ReAct |
|---|---|---|
| ۲۰۲۲-۲۰۲۴ (GPT-3.5, GPT-4) | پرامپت صریح | پرامپت صریح برای ابزار |
| ۲۰۲۵-۲۰۲۶ (o1, R1, Sonnet thinking) | درونیسازی شده | همچنان لازم برای ابزار |
| آیندهی نزدیک | درونی | احتمالاً بهصورت Function Calling خودکار |
چه چیزی پس از ReAct میآید؟
تکنیکهای جدیدتر که فراتر از ReAct ساده میروند:
- Reflexion (2023) — agent خروجی خودش را نقد میکند و دوباره امتحان میکند
- Plan-and-Execute — اول یک plan کامل بنویس، بعد گامبهگام اجرا کن
- Multi-Agent (CrewAI, AutoGen) — چند agent با نقشهای متفاوت با هم کار میکنند
- Hierarchical agents — یک agent مدیر، چند agent اجرایی
اما همهی اینها هنوز روی ستون ReAct سوار شدهاند. حلقهی Thought-Action-Observation همچنان بنیان است.
میخواهی پرامپتنویسی پیشرفته را اصولی یاد بگیری؟
دوره جامع مهندسی پرامپت — از Few-shot تا ReAct و AI Agent، با ۵۸ جلسه و گروه پشتیبانی.
مشاهده سرفصلهای دورهسوالات متداول
ReAct Prompting چیست؟
تفاوت ReAct با Chain-of-Thought چیست؟
ReAct چقدر بهتر از Chain-of-Thought عمل میکند؟
آیا با مدلهای جدید مثل o1 و DeepSeek R1 هنوز ReAct لازم است؟
مهمترین محدودیتهای ReAct چیست؟
چطور ReAct را در ChatGPT یا Claude بهصورت دستی استفاده کنم؟
ReAct با Function Calling چه فرقی دارد؟
جمعبندی
نکات کلیدی این مقاله
- ReAct = Reasoning + Acting، معرفیشده در مقالهی Yao 2022 (arXiv:2210.03629)
- قلب الگو: حلقهی Thought → Action → Observation تا رسیدن به Finish
- برای سؤالات نیازمند اطلاعات تازه ضروری است، برای منطق پاک CoT کافی
- ۳۴٪ بهبود در ALFWorld، ۱۰٪ در WebShop، پیروزی در Fever
- در عصر o1 و R1 هنوز برای ابزار خارجی غالب است
- دام اصلی: حلقه بینهایت — حتماً
max_iterationsبگذار - Thoughtهای کوتاه (<۳۲ توکن) از طولانی (>۲۵۶ توکن) بهتر عمل میکنند
- Function Calling نسخهی production-ready ReAct است، اما الگو همان است
اگر یک کار از این مقاله برداری، این باشد: یک پرامپت ساده با قالب Thought/Action/Observation بنویس و در ChatGPT امتحان کن. همان لحظه حس میکنی چرا هر agent جدی روی این الگو ساخته شده. بعد از فهمیدن منطق، سراغ LangChain یا Function Calling برو.