ایجنت هوش مصنوعی چطور کار میکند؟ تا اینجا دیدیم ایجنت مغزی از جنس مدل زبانی دارد و ابزارهایی برای اقدام. اما این دو چطور کنار هم کار میکنند؟ مدل از کجا میفهمد کی ابزار را صدا بزند و کی جواب نهایی را بدهد؟
پاسخ یک چرخهی ساده اما قدرتمند است: فکر، اقدام، مشاهده. در این قسمت از مجموعهی «از پرامپت تا دستیار هوش مصنوعی» این چرخه را با مثال یک ایجنت هواشناسی قدمبهقدم دنبال میکنیم و بعد نسخهی سادهاش را با پایتون مینویسیم.
ایجنت هوش مصنوعی چطور کار میکند؟ سه جزء اصلی چرخه
کار ایجنت یک چرخهی پیوسته است. آشپزی را تصور کنید که خورش را میچشد، تصمیم میگیرد نمک کم است، نمک میزند و دوباره میچشد. ایجنت هم همینطور کار میکند. هر دور این چرخه سه مرحله دارد که به ترتیب اجرا میشوند:
- فکر (Thought): بخش مدل زبانی ایجنت تصمیم میگیرد قدم بعدی چه باشد.
- اقدام (Action): ایجنت ابزاری را با ورودیهای مشخص فراخوانی میکند.
- مشاهده (Observation): مدل نتیجهی ابزار را میبیند و دربارهاش فکر میکند.
این سه مرحله در یک حلقهی مداوم کار میکنند. اگر بخواهیم با زبان برنامهنویسی بگوییم، ایجنت یک حلقهی while است که تا رسیدن به هدف ادامه میدهد.
البته تشبیه آشپز یک جا میلنگد. آشپز خودش میفهمد غذا آماده است، اما ایجنت این حس را ندارد. برای همین باید صریحاً به او بگوییم پاسخ نهایی را با چه نشانهای اعلام کند و حداکثر چند دور مجاز است.
چرخهی ایجنت در پیام سیستمی
در بسیاری از فریمورکهای ایجنت، قواعد این چرخه مستقیم در پیام سیستمی نوشته میشود. این کار تضمین میکند مدل در هر دور از یک منطق مشخص پیروی کند. پیام سیستمی یک ایجنت ساده سه بخش دارد.
رفتار، ابزارها و قالب چرخه
بخش اول رفتار کلی ایجنت را تعریف میکند؛ مثلاً «تو دستیاری هستی که دقیق و روشن پاسخ میدهد». بخش دوم فهرست ابزارهای در دسترس را با همان قالبی میآورد که در قسمت قبل با دکوراتور @tool ساختیم.
در نهایت، بخش سوم خود چرخه است. از مدل خواسته میشود قدمبهقدم فکر کند. ابتدا با Thought: وضعیت را بسنجد. بعد اگر لازم بود، با Action: و یک JSON ابزار را صدا بزند. وقتی به پاسخ رسید، آن را با پیشوند Final Answer: بنویسد.
پیام سیستمی کامل چنین ایجنتی را در تصویر زیر میبینید.

چرا قالب ثابت مهم است؟
برنامهای که دور مدل را گرفته، باید خروجی مدل را بخواند و بفهمد مدل میخواهد ابزاری را اجرا کند یا کارش تمام شده است. اگر قالب ثابت نباشد، این تشخیص غیرممکن میشود.
به همین دلیل، پیشوندهای ثابتی مثل Action: و Final Answer: کار برنامه را ساده میکنند. برنامه فقط دنبال این نشانهها میگردد و بر اساسشان تصمیم میگیرد ابزار را اجرا کند یا پاسخ را به کاربر تحویل دهد.
بیشتر بخوانید: قالب توضیح ابزار که در این پیام سیستمی میبینید، در ابزار ایجنت هوش مصنوعی چیست؟ قدمبهقدم ساخته شده است.
مثال؛ ایجنت هواشناسی قدمبهقدم
با یک مثال ساده، چرخه را از نزدیک ببینیم. ایجنتی به نام آلفرد داریم که یک ابزار دارد: get_weather که هوای یک شهر را از یک API میگیرد. کاربر میپرسد «هوای نیویورک الان چطور است؟».
فکر؛ استدلال درونی
آلفرد با دریافت پرسش، اول فکر میکند. استدلال درونیاش ممکن است این باشد: «کاربر هوای فعلی نیویورک را میخواهد. من ابزاری دارم که دادهی هوا را میگیرد. پس اول باید این ابزار را صدا بزنم.»
در واقع، این قدم نشان میدهد ایجنت مسئله را به گامهای کوچکتر میشکند. در این مثال اولین گام، جمعآوری دادهی لازم است. ایجنت بهجای حدسزدن، برنامه میریزد اطلاعات واقعی را بیاورد.
اقدام؛ فراخوانی ابزار
بر اساس این فکر، آلفرد یک فرمان JSON آماده میکند که ابزار هواشناسی را صدا میزند:
{
"action": "get_weather",
"action_input": {"location": "New York"}
}این فرمان دقیقاً مشخص میکند کدام ابزار صدا زده شود و چه ورودیای بگیرد. ابزار واقعی را برنامه اجرا میکند، نه مدل؛ همان تقسیم کاری که در قسمت function calling دیدیم.
تصویر زیر همین لحظه را نشان میدهد؛ ایجنت فرمان JSON را برای API هواشناسی میفرستد.

مشاهده؛ بازخورد محیط
پس از اجرای ابزار، آلفرد یک مشاهده دریافت میکند؛ مثلاً «هوای فعلی نیویورک: نیمهابری، ۱۵ درجه، رطوبت ۶۰ درصد». این مشاهده به پرامپت اضافه میشود و زمینهی تازهای برای فکر بعدی میسازد.
به بیان ساده، مشاهده بازخورد دنیای واقعی است. هم تأیید میکند اقدام موفق بوده و هم جزئیات لازم را میآورد. اگر ابزار خطا داده بود، همین مشاهده به ایجنت میگفت باید روش دیگری امتحان کند.
فکر دوباره و پاسخ نهایی
حالا آلفرد با دادهی تازه دوباره فکر میکند: «دادهی هوای نیویورک را دارم؛ میتوانم جواب را بنویسم.» و پاسخ نهایی را با قالب خواستهشده تولید میکند: «هوای فعلی نیویورک نیمهابری است، با دمای ۱۵ درجه و رطوبت ۶۰ درصد.»
سپس این پاسخ نهایی به کاربر برمیگردد و حلقه بسته میشود. کل این مسیر برای کاربر فقط چند ثانیه طول میکشد، اما پشت صحنه دو دور فکر، یک اقدام و یک مشاهده اتفاق افتاده است.
چرخهی ReAct و درسهای آن
این مثال ایدهی اصلی چرخهی ReAct را نشان میدهد؛ ترکیب استدلال (Reasoning) و اقدام (Acting). تعامل فکر، اقدام و مشاهده به ایجنت اجازه میدهد کارهای پیچیده را مرحلهبهمرحله حل کند. سه درس کلیدی از این چرخه میگیریم:
- تکرار تا رسیدن به هدف: فرایند چرخهای است. اگر مشاهده خطا یا دادهی ناقص نشان دهد، ایجنت دوباره وارد چرخه میشود و راهش را اصلاح میکند.
- فراتر از دانش ثابت: ابزار به ایجنت اجازه میدهد از دانش زمان آموزش فراتر برود و دادهی زنده بگیرد.
- سازگاری پویا: هر دور چرخه اطلاعات تازه را وارد استدلال میکند تا پاسخ نهایی دقیق و مستند باشد.
همین سه ویژگی ایجنت را از یک فراخوانی سادهی مدل متمایز میکند. ایجنت فقط جواب نمیدهد؛ بر اساس نتیجهی کارش مسیرش را تنظیم میکند.

پیادهسازی حلقهی ایجنت با پایتون
حالا ببینیم این چرخه در کد چه شکلی دارد. نسخهی زیر ساده شده است، اما منطق اصلی همهی فریمورکهای ایجنت همین است.
حلقهی while با سقف قدم
تابع call_model متن گفتوگو را به مدل میفرستد و خروجی را برمیگرداند. tools هم دیکشنری ابزارهای در دسترس است:
import json, re
def run_agent(question, system_prompt, tools, call_model, max_steps=6):
transcript = f"{system_prompt}\n\nQuestion: {question}\n"
for _ in range(max_steps):
output = call_model(transcript, stop=["Observation:"])
transcript += output
if "Final Answer:" in output:
return output.split("Final Answer:")[-1].strip()
match = re.search(r"Action:\s*(\{.*\})", output, re.S)
try:
action = json.loads(match.group(1)) if match else None
result = tools[action["action"]](**action["action_input"])
except Exception as error: # JSON خراب، ابزار ناموجود یا خطای خود ابزار
result = f"خطا: {error}. قالب Action یا نام ابزار را اصلاح کن."
transcript += f"\nObservation: {result}\n"
return "به سقف قدمها رسیدم و پاسخ قطعی پیدا نکردم."در هر دور، مدل فکر و اقدامش را مینویسد. اگر پاسخ نهایی داد، حلقه تمام میشود. وگرنه برنامه ابزار را اجرا میکند و نتیجه را با برچسب Observation: به متن اضافه میکند تا دور بعد شروع شود. اگر مدل قالب را خراب کند یا ابزاری ناموجود بخواهد، خود خطا مشاهدهی این دور میشود تا مدل در دور بعد اصلاحش کند.
برای اجرای واقعی، کافی است یک call_model و یک ابزار نمونه کنار تابع بگذارید. این نمونه با کتابخانهی openai کار میکند و ابزار هواشناسیاش فعلاً پاسخ ثابت میدهد:
from openai import OpenAI
client = OpenAI() # کلید از متغیر محیطی OPENAI_API_KEY خوانده میشود
def call_model(prompt, stop):
reply = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
stop=stop,
)
return reply.choices[0].message.content
def get_weather(location):
return f"هوای {location}: نیمهابری، ۱۵ درجه" # نمونه فرضی؛ بعداً API واقعی
print(run_agent("هوای تهران چطور است؟", SYSTEM_PROMPT, {"get_weather": get_weather}, call_model))SYSTEM_PROMPT همان پیام سیستمی تصویر بالاست که ابزار get_weather در آن معرفی شده باشد.
دو نکتهی حیاتی در کد
نکتهی اول پارامتر stop است. بدون آن، مدل ممکن است بعد از نوشتن Action: خودش ادامه دهد و یک مشاهدهی ساختگی هم بنویسد. یعنی نتیجهی ابزار را حدس بزند، بیآنکه ابزار اجرا شده باشد. توقف تولید پیش از Observation: این خطر را از بین میبرد.
از طرف دیگر، نکتهی دوم max_steps است. اگر ابزاری مدام خطا بدهد یا مدل در یک دور تکراری گیر کند، حلقه بیپایان میشود و هزینه بالا میرود. سقف قدمها یک ترمز ایمنی ساده اما ضروری است. به همین دلیل کد بالا خطاهای JSON نامعتبر و ابزار ناموجود را هم بهجای توقف، به مشاهده تبدیل میکند.
تمرین عملی؛ یک دور کامل روی کاغذ
پیش از نوشتن کد، چرخه را برای دستیار پروژهی مشترک روی کاغذ اجرا کنید. کاربر میپرسد: «یک دورهی پایتون مبتدی میخواهم که هنوز ظرفیت داشته باشد.» با سه ابزاری که در قسمت قبل تعریف کردیم:
- فکر اول ایجنت را بنویسید؛ قدم اول چیست؟
- اقدام را به شکل JSON بنویسید و یک مشاهدهی فرضی برایش در نظر بگیرید.
- دورهای بعدی را تا رسیدن به
Final Answerادامه دهید.
بشمارید چند دور لازم شد. اگر بیش از چهار دور بود، فکر کنید آیا یک ابزار ترکیبی، مثلاً جستجو همراه فیلتر ظرفیت، مسیر را کوتاهتر میکند یا نه.
سخن پایانی
حالا میدانیم ایجنت هوش مصنوعی چطور کار میکند: یک حلقهی ساده از فکر، اقدام و مشاهده که تا رسیدن به هدف تکرار میشود. پیام سیستمی قواعد و قالب این حلقه را تعیین میکند، ابزارها اقدام را ممکن میکنند و مشاهدهها ایجنت را به واقعیت متصل نگه میدارند. توقف پیش از مشاهده و سقف تعداد قدمها هم دو ترمز ایمنیاند که هیچ ایجنتی نباید بدون آنها اجرا شود.
در قسمت یازدهم همین حلقه را از صفر و بدون فریمورک با یک مدل واقعی میسازیم.
این آموزش بر پایهی بخش Understanding AI Agents through the Thought-Action-Observation Cycle از دورهی آزاد Agents Course در Hugging Face (مجوز Apache-2.0) به فارسی بازنویسی و تکمیل شده است.
برای مطالعه بیشتر
برای دنبال کردن عمیقتر این بحث، منابع زیر را به ترتیب از ساده به تخصصی بخوانید.
- ابزار ایجنت هوش مصنوعی چیست؟: قسمت قبلی همین مجموعه؛ ابزارهایی که این چرخه صدایشان میزند؛ سطح مبتدی.
- Thought-Action-Observation Cycle در Agents Course (انگلیسی): منبع اصلی این قسمت با تصویرهای کامل؛ سطح مبتدی تا متوسط.
- Thought: Internal Reasoning and the ReAct Approach (انگلیسی): انواع فکر در ایجنت و روش ReAct؛ سطح متوسط.
- مقالهی اصلی ReAct در arXiv (انگلیسی): پژوهش Yao و همکاران که این الگو را معرفی کرد؛ سطح حرفهای.
پرسشهای پرتکرار
چرخه فکر، اقدام و مشاهده چیست؟
روش کار پایهی ایجنتها است. مدل در مرحلهی فکر تصمیم میگیرد قدم بعدی چیست، در مرحلهی اقدام ابزاری را با ورودی مشخص فراخوانی میکند و در مرحلهی مشاهده نتیجهی ابزار را میبیند. این چرخه تا رسیدن به پاسخ نهایی تکرار میشود.
ReAct یعنی چه؟
ReAct ترکیب دو کلمهی Reasoning و Acting است؛ یعنی استدلال و اقدام بهصورت یکدرمیان. مدل ابتدا فکرش را مینویسد، بعد اقدام میکند و با دیدن نتیجه دوباره فکر میکند.
ایجنت از کجا میفهمد کارش تمام شده است؟
در پیام سیستمی از مدل خواسته میشود وقتی به پاسخ رسید، آن را با پیشوند مشخصی مثل Final Answer بنویسد. برنامه با دیدن این پیشوند حلقه را متوقف میکند. یک سقف برای تعداد قدمها هم لازم است تا حلقه بیپایان نشود.
چرا مشاهده باید از ابزار بیاید و نه از مدل؟
اگر مدل خودش نتیجهی ابزار را حدس بزند، پاسخ ساختگی میسازد. برای همین برنامه باید تولید متن را پیش از بخش Observation متوقف کند، ابزار را واقعاً اجرا کند و نتیجهی واقعی را به گفتوگو اضافه کند.







دیدگاهها
هنوز دیدگاهی ثبت نشده است. شروعکننده باشید — پرسش و اصلاح را با آغوش باز میپذیریم.