فاز 14 · درس 16

آشنایی با OpenAI Agents SDK: انتقال وظایف، گاردریل‌ها و ردگیری

نوع
مفهومی و ساختنی
زمان
حدود 75 دقیقه
زبان‌ها
Python (stdlib)
پیش‌نیاز
فاز 14 · 01 (حلقه‌ی ایجنت)، فاز 14 · 06 (استفاده از ابزارها)
یک چوب امدادی فلزی در حال دست‌به‌دست شدن بین دو بازوی مکانیکی روباتیک مجهز به حسگرهای نوری
فهرست مطالب
  1. اهداف یادگیری
  2. صورت مسئله
  3. مفاهیم اصلی
  4. پنج مفهوم بنیادین
  5. پیاده‌سازی تحویل کار در قالب ابزار
  6. گاردریل‌ها
  7. ردگیری محاسبات
  8. نشست‌ها
  9. خطاهای رایج در این الگو
  10. پیاده‌سازی از صفر
  11. استفاده از ابزارهای واقعی
  12. تحویل به محیط عملیاتی
  13. تمرین‌ها
  14. اصطلاحات کلیدی
  15. برای مطالعه‌ی بیشتر

وقتی پروژه‌های مبتنی بر هوش مصنوعی بزرگ‌تر می‌شوند، قرار دادن تمام دستورالعمل‌ها، ابزارها و محدودیت‌ها داخل یک پرامپت تکی خیلی زود با شکست روبه‌رو می‌شود. مدل سردرگم می‌شود، خطاهای امنیتی یا نشت اطلاعات حساس پیش می‌آید و هدایت جریان مکالمه عملاً ناممکن خواهد شد. راهکار استاندارد صنعت در چنین شرایطی، تقسیم وظایف میان ایجنت‌های تخصصی و اتصال کنترل‌شده‌ی آن‌ها به یکدیگر است.

فریم‌ورک رسمی OpenAI Agents SDK برای حل همین چالش ساخته شده و معماری چندایجنت را بر پایه‌ی پنج مفهوم کلیدی استاندارد می‌کند. با یادگیری سازوکار تحویل وظایف (Handoffs)، اعتبارسنجی ورودی و خروجی با گاردریل‌ها (Guardrails) و مشاهده‌پذیری رفتار سیستم با ردگیری محاسبات (Tracing)، ساختار برنامه‌های خود را از کدنویسی شکننده به استانداردی قابل نگهداری ارتقا می‌دهید.

از آنجا که کارت‌های بانکی ایرانی امکان پرداخت مستقیم برای اعتبار سرویس‌های خارجی مثل OpenAI را ندارند، آشنایی با نحوه‌ی جداسازی وظایف و بهینه‌سازی توکن‌ها حیاتی‌تر است. علاوه بر این، در صورت نیاز به استفاده از درگاه‌های سازگار داخلی یا اتصال به سامانه‌های محلی، پیاده‌سازی منطق استاندارد این SDK به شما کمک می‌کند کمترین تغییر ممکن را در کدهای اصلی خود اعمال کنید.

فریم‌ورک OpenAI Agents SDK یک چارچوب چندایجنت سبک است که روی Responses API ساخته شده است. این فریم‌ورک بر پایه‌ی پنج مفهوم بنیادین کار می‌کند: ایجنت (Agent)، دست‌به‌دست‌کردن (Handoff)، گاردریل (Guardrail)، نشست (Session) و ردگیری محاسبات (Tracing). عمل Handoff در قالب ابزارهایی با نام transfer_to_<agent> تعریف می‌شود. گاردریل‌ها روی ورودی یا خروجی فعال می‌شوند و ردگیری محاسبات نیز به‌طور پیش‌فرض روشن است.

اهداف یادگیری

  • نام بردن پنج مفهوم بنیادین در OpenAI Agents SDK.
  • توضیح handoff: چرا در قالب ابزار مدل‌سازی می‌شود، مدل چه ساختار نامی را می‌بیند و بافتار چگونه منتقل می‌شود.
  • تشخیص تفاوت گاردریل‌های ورودی، خروجی و ابزار؛ و توضیح تفاوت حالت run_in_parallel با حالت مسدودکننده (blocking).
  • پیاده‌سازی یک محیط اجرای ساده با کتابخانه‌ی استاندارد پایتون شامل handoff، گاردریل‌ها و ردگیری محاسبات مبتنی بر اسپن (span).

صورت مسئله

ایجنت‌هایی که راه تمیزی برای واگذاری وظایف نداشته باشند، در نهایت مجبور می‌شوند همه‌چیز را داخل یک پرامپت (Prompt) بگنجانند. از طرف دیگر، ایجنت‌های بدون گاردریل ممکن است اطلاعات هویتی حساس (PII) را نشت دهند، خروجی‌های ناقض سیاست تولید کنند یا در حلقه‌های بی‌نهایت بیفتند. ابزار Agents SDK شرکت OpenAI سه مفهوم بنیادین را استاندارد کرده تا کار با سیستم‌های چندایجنت مدیریت‌پذیر شود.

مفاهیم اصلی

پنج مفهوم بنیادین

  1. ایجنت (Agent): ترکیب مدل زبانی بزرگ (LLM) + دستورالعمل‌ها + ابزارها + handoffها.
  2. دست‌به‌دست‌کردن (Handoff): واگذاری کار به ایجنتی دیگر. این عمل برای مدل در قالب ابزاری به نام transfer_to_<agent_name> نمایش داده می‌شود.
  3. گاردریل (Guardrail): اعتبارسنجی روی ورودی (فقط برای ایجنت اول)، خروجی (فقط برای ایجنت آخر) یا فراخوانی ابزار (به‌ازای هر ابزار تابعی).
  4. نشست (Session): تاریخچه‌ی خودکار گفت‌وگو در طول نوبت‌های مختلف (turns).
  5. ردگیری محاسبات (Tracing): اسپن‌های توکار برای خروجی‌های LLM، فراخوانی‌های ابزار، handoffها و گاردریل‌ها.

پیاده‌سازی تحویل کار در قالب ابزار

مدل در فهرست ابزارهای خود transfer_to_billing_agent را می‌بیند. فراخوانی این ابزار به محیط اجرا پیام می‌دهد تا:

  1. بافتار گفت‌وگو را کپی کند (یا با قابلیت آزمایشی nest_handoff_history آن را فشرده و جمع کند).
  2. ایجنت مقصد را با دستورالعمل‌های اختصاصی آن راه‌اندازی کند.
  3. اجرای فرآیند را با ایجنت مقصد ادامه دهد.

این در واقع پیاده‌سازی کاربردی و محصول‌شده‌ی الگوی ناظر (Supervisor Pattern در درس 13 و درس 28) است.

گاردریل‌ها

سه نوع گاردریل داریم:

  • گاردریل‌های ورودی (Input guardrails): روی ورودی اولین ایجنت اجرا می‌شوند. این گاردریل‌ها درخواست‌های ناامن یا خارج از دامنه (scope) را پیش از هرگونه فراخوانی LLM رد می‌کنند.
  • گاردریل‌های خروجی (Output guardrails): روی خروجی آخرین ایجنت اجرا می‌شوند تا جلوی نشت PII، نقض سیاست‌ها و پاسخ‌های بدساخت را بگیرند.
  • گاردریل‌های ابزار (Tool guardrails): به‌ازای هر ابزار تابعی اجرا می‌شوند؛ آرگومان‌ها را اعتبارسنجی می‌کنند، مجوزها را می‌سنجند و اجرای عملیات را حسابرسی می‌کنند.

حالت‌های اجرا:

  • موازی (Parallel - پیش‌فرض): مدل ارزیاب گاردریل هم‌زمان با LLM اصلی اجرا می‌شود. تاخیر (Latency) دم را کاهش می‌دهد؛ اما اگر گاردریل فعال شود، کارهای انجام‌شده توسط LLM اصلی دور ریخته می‌شود (اتلاف توکن).
  • مسدودکننده (run_in_parallel=False): ابتدا مدل ارزیاب گاردریل اجرا می‌شود. اگر فعال شود، هیچ توکنی روی فراخوانی اصلی هدر نمی‌رود.

تله‌ها (Tripwires) خطاهای InputGuardrailTripwireTriggered یا OutputGuardrailTripwireTriggered را صادر می‌کنند.

ردگیری محاسبات

به‌طور پیش‌فرض فعال است. هر بار تولید متن توسط LLM، فراخوانی ابزار، handoff و گاردریل یک اسپن صادر می‌کند. با متغیر OPENAI_AGENTS_DISABLE_TRACING=1 می‌توانید آن را خاموش کنید. همچنین با تابع add_trace_processor(processor) می‌توانید اسپن‌ها را علاوه بر سرورهای OpenAI، به بک‌اند اختصاصی خودتان نیز ارسال کنید.

نشست‌ها

کلاس Session تاریخچه‌ی گفت‌وگو را در یک بک‌اند (مثل SQLite، Redis یا سفارشی) ذخیره می‌کند. متد Runner.run(agent, input, session=session) این تاریخچه را به‌طور خودکار بارگذاری کرده و پیام‌های جدید را به آن اضافه می‌کند.

خطاهای رایج در این الگو

  • سرگردانی در handoff (یا Handoff drift): ایجنت A کار را به B واگذار می‌کند و B دوباره آن را به A پس می‌دهد. برای حل این مشکل یک شمارنده‌ی گام لغزش (hop counter) بگذارید.
  • دور زدن گاردریل: گاردریل‌های ابزار فقط روی ابزارهای تابعی فعال می‌شوند؛ ابزارهای توکار (مانند فایل‌خوان یا وب‌فچ) به سیاست‌های جداگانه‌ای نیاز دارند.
  • ردگیری بیش‌ازحد (Over-tracing): ثبت داده‌های حساس در اسپن‌ها. این موضوع را با قواعد ضبط محتوای OpenTelemetry GenAI (درس 23) هماهنگ کنید — داده‌ها را بیرون ذخیره کرده و در اسپن صرفاً به شناسه‌ی آن‌ها ارجاع دهید.
تحویل بین ایجنت‌هاواگذاری در قالب فراخوانی ابزار
AGENT HANDOFFIn the OpenAI Agents SDK a handoff is just a tool named transfer_to_<agent>. When the triage agent calls it, control and the running conversation context pass to the target agent, which continues the session. Modeling delegation as an ordinary tool keeps the loop uniform: the model decides to hand off the same way it decides to call any function.تریاژایجنتاستردادایجنتtransfer_to_refundتحویل ابزاری است که مدل می‌تواند فراخوانی کندزمینه گفتگو همراه با کنترل جریان منتقل می‌شود
در OpenAI Agents SDK، تحویل صرفاً ابزاری به نام transfer_to_<agent> است. هنگامی که ایجنت تریاژ آن را فراخوانی می‌کند، کنترل و زمینهٔ گفتگوی جاری به ایجنت مقصد منتقل می‌شود تا نشست را ادامه دهد. مدل‌سازی واگذاری به شکل یک ابزار معمولی، چرخه را یکپارچه نگه می‌دارد: مدل همان‌طور که دربارهٔ فراخوانی هر تابعی تصمیم می‌گیرد، برای تحویل کار نیز تصمیم‌گیری می‌کند.

پیاده‌سازی از صفر

فایل code/main.py ساختار SDK را با استفاده از کتابخانه‌ی استاندارد پایتون پیاده‌سازی می‌کند:

  • کلاس‌های Agent، FunctionTool و Handoff (به‌عنوان یک ابزار تابعی با معناشناسی انتقال).
  • کلاس Runner همراه با گاردریل‌های ورودی/خروجی/ابزار، ارسال handoff و شمارنده‌ی گام لغزش.
  • یک صادرکننده‌ی ساده‌ی اسپن برای نمایش ساختار ردگیری محاسبات.
  • یک ایجنت تریاژ که بر اساس درخواست کاربر کار را به بخش مالی یا پشتیبانی می‌سپارد؛ گاردریل هم روی یک ورودی فعال می‌شود.

اجرای برنامه:

python3 code/main.py

خروجی ردگیری دو تحویل موفق، یک بار فعال شدن گاردریل ورودی و ساختار درختی اسپن‌ها را نشان می‌دهد که دقیقاً بازتاب‌دهنده‌ی خروجی SDK واقعی است.

استفاده از ابزارهای واقعی

  • OpenAI Agents SDK: برای محصولاتی که بر پایه‌ی مدل‌های OpenAI توسعه می‌یابند.
  • Claude Agent SDK (درس 17): برای محصولاتی که اولویتشان مدل‌های Claude است.
  • LangGraph (درس 13): برای زمان‌هایی که به وضعیت صریح (explicit state) و ادامه‌ی پایدار اجرا (durable resume) نیاز دارید.
  • پیاده‌سازی اختصاصی (Custom): وقتی به کنترل دقیق نیاز دارید (صوت، چند ارائه‌دهنده‌ای، یا استقرارهای توزیع‌شده).

تحویل به محیط عملیاتی

فایل outputs/skill-agents-sdk-scaffold.md زیرساخت اولیه‌ی یک برنامه‌ی مبتنی بر Agents SDK را همراه با ایجنت تریاژ، handoffها، گاردریل‌های ورودی/خروجی/ابزار، مخزن ذخیره‌سازی نشست و یک پردازنده‌ی ردگیری محاسبات پیاده‌سازی می‌کند.

تمرین‌ها

  1. یک شمارنده‌ی گام لغزش برای handoff اضافه کنید: بعد از N بار جابه‌جایی درخواست را متوقف کنید. این رفتار را ردگیری کنید.
  2. قابلیت nest_handoff_history را به‌عنوان یک گزینه پیاده‌سازی کنید — پیام‌های پیشین قبل از انتقال در قالب یک خلاصه فشرده شوند.
  3. یک گاردریل خروجی مسدودکننده (blocking) بنویسید. تاخیر را روی پرامپت‌هایی که آن را فعال می‌کنند با پرامپت‌هایی که تایید می‌شوند مقایسه کنید.
  4. متد add_trace_processor را به یک لاگر JSON متصل کنید. ساختار خروجی آن به‌ازای هر اسپن چیست؟
  5. مستندات SDK را بخوانید. کدهای ساده‌ی پایتونی خود را به openai-agents-python پورت کنید. چه بخش‌هایی را در مدل‌سازی اشتباه متوجه شده بودید؟

اصطلاحات کلیدی

اصطلاح در گفتار عامیانه معنای دقیق فنی
Agent «LLM + دستورالعمل‌ها» نوع داده‌ی Agent در SDK؛ مالک ابزارها و handoffها
Handoff «انتقال» ابزاری که مدل برای واگذاری کار به ایجنتی دیگر فراخوانی می‌کند
Guardrail «بررسی تطابق با قوانین» اعتبارسنجی روی ورودی / خروجی / فراخوانی ابزار
Tripwire «فعال شدن گاردریل» خطایی که هنگام رد شدن داده توسط گاردریل صادر می‌شود
Session «محل ذخیره‌ی تاریخچه» حافظه‌ی ماندگار گفت‌وگو بین اجراهای مختلف
Tracing «اسپن‌ها» مشاهده‌پذیری توکار روی LLM + ابزار + handoff + گاردریل
Blocking guardrail «بررسی ترتیبی» گاردریل ابتدا اجرا می‌شود؛ در صورت فعال شدن، توکنی تلف نمی‌شود
Parallel guardrail «بررسی هم‌زمان» گاردریل هم‌زمان اجرا می‌شود؛ تاخیر کمتر است ولی در صورت رد، توکن هدر می‌رود

برای مطالعه‌ی بیشتر

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسپنج مؤلفهٔ بنیادین (primitives) در OpenAI Agents SDK کدامند؟
  2. پیش از درسمدل فرایند تحویل (handoff) را چگونه می‌بیند؟
  3. حین درساین SDK از چه سه نوع گاردریلی (ریل ایمنی) پشتیبانی می‌کند؟
  4. حین درستفاوت گاردریل‌های موازی (parallel) و مسدودکننده (blocking) چیست؟
  5. حین درسردگیری محاسبات (tracing) در SDK چگونه فعال می‌شود؟
  6. پس از درسرانش تحویل (handoff drift) چیست و درس چه راهکاری برای کاهش آن پیشنهاد می‌کند؟
  7. پس از درسچرا ابزارهای توکار (built-in) یک شکاف در گاردریل‌ها محسوب می‌شوند؟

سؤالات متداول

عملیات Handoff در OpenAI Agents SDK چگونه کار می‌کند؟

انتقال وظیفه در قالب یک ابزار با نام transfer_to_<agent_name> به مدل نشان داده می‌شود؛ با فراخوانی آن، بافتار گفت‌وگو منتقل شده و اجرای فرآیند به ایجنت هدف سپرده می‌شود.

تفاوت گاردریل موازی (Parallel) با مسدودکننده (Blocking) چیست؟

در حالت مسدودکننده گاردریل پیش از مدل اصلی اجرا شده و مانع اتلاف توکن می‌شود؛ در حالت موازی هر دو هم‌زمان اجرا می‌شوند که تاخیر کلی را کاهش می‌دهد اما در صورت رد شدن، توکن مدل اصلی هدر می‌رود.

ردگیری محاسبات (Tracing) در OpenAI Agents SDK چه مواردی را ثبت می‌کند؟

سیستم توکار Tracing برای هر بار تولید متن توسط LLM، فراخوانی ابزار، دست‌به‌دست‌کردن وظیفه و ارزیابی گاردریل یک اسپن (Span) استاندارد ثبت می‌کند.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.