اپلیکیشنهای هوش مصنوعی مدرن اغلب در زمینه قابلیت اطمینان با مشکل مواجه هستند. در حالی که مدلهای زبانی بزرگ (LLMs) در خلاقیت و استدلال عالی عمل میکنند، ذاتاً احتمالی و بدون حالت هستند. وقتی چندین فراخوانی LLM، درخواستهای API خارجی و تأییدیههای انسانی را به هم زنجیر میکنید، پیچیدگی به شدت افزایش مییابد. یک وقفه شبکه یا خطای گذرای API میتواند سیستم شما را در یک وضعیت ناسازگار قرار دهد و عاملهای «زombie» ایجاد کند که هزینه محاسبات را پرداخته اما ارزشی تولید نکردهاند.
اینجاست که ارکستراسیون قطعی (Deterministic Orchestration) حیاتی میشود. با ترکیب قدرت احتمالی هوش مصنوعی با تضمینهای قطعی موتورهای workflow مانند Temporal، میتوانید سیستمهای عاملی بسازید که دوامپذیر، قابل مشاهده و صحیح باشند. این پست بررسی میکند که چگونه میتوان عاملهای هوشمند قوی را با استفاده از Temporal Workflows مهندسی کرد.
مشکل زنجیرههای عاملی سادهانگارانه
در یک پیادهسازی سادهانگارانه، یک عامل ممکن است توالی مراحل زیر را اجرا کند:
- دریافت قصد کاربر.
- فراخوانی LLM برای تحلیل.
- پرسوجو از پایگاه داده.
- فراخوانی یک API شخص ثالث.
- ارسال پاسخ.
اگر مرحله ۴ به دلیل یک اختلال شبکه شکست بخورد، یک میکروسرویس سنتی ممکن است به طور نامحدود تلاش مجدد کند یا کاملاً شکست بخورد که منجر به ناسازگاری دادهها میشود. مهمتر از آن، چون اجرا موقتی است، زمینهای که برای ادامه کار عامل در جایی که متوقف شده بود لازم است، از دست میرود. شما نمیتوانید جریان درخواست HTTP استاندارد را به راحتی «متوقف و ادامه» دهید. Temporal این مشکل را با ذخیرهسازی وضعیت هر اجرای فعالیت در ذخیرهسازی بادوام خود حل میکند که به workflow اجازه میدهد دقیقاً همانطور که قبل از شکست بود، بازسازی شود.
مفاهیم کلیدی: فعالیتها و Workflows
در Temporal، منطق عامل شما به دو جزء متمایز تقسیم میشود:
- Workflows: صفحه کنترل. اینها واحدهای کد قطعی و طولانیمدتی هستند که جریان منطق را تعریف میکنند (حلقهها، شرایط، تلاش مجدد). آنها باید کاملاً قطعی باشند، به این معنی که استفاده از اعداد تصادفی، تاریخها یا تماسهای شبکه به صورت مستقیم در داخل آنها مجاز نیست.
- Activities: صفحه اجرا. اینها کارگرهای واقعی هستند که وظایف غیرقطعی مانند فراخوانی یک LLM، پرسوجو از پایگاه داده یا ارسال ایمیل را انجام میدهند. فعالیتها کوتاهمدت هستند و ممکن است شکست بخورند.
پیادهسازی عملی
بیایید نگاهی بیندازیم که چگونه میتوان یک عامل تحقیقاتی ساده را با استفاده از Python ساخت. ما یک workflow را تعریف میکنیم که دادهها را دریافت میکند، آنها را از طریق یک LLM پردازش میکند و تلاش مجدد را به صورت مدیریت شده انجام میدهد.
from temporalio.worker import Worker
from temporalio.activity import activity
from temporalio.workflow import workflow, define, current_datetime
from pydantic import BaseModel
import httpx
# تعریف فعالیت غیرقطعی
@activity.defn
async def fetch_context_data(url: str) -> dict:
async with httpx.AsyncClient() as client:
response = await client.get(url)
response.raise_for_status()
return response.json()
# تعریف فعالیت پردازش LLM
@activity.defn
async def llm_generate_summary(context: dict) -> str:
# منطق برای فراخوانی OpenAI یا LLM محلی
return "خلاصه تولید شده بر اساس زمینه..."
# تعریف workflow قطعی
@workflow.defn
class ResearchAgentWorkflow:
@workflow.run
async def run(self, query_url: str) -> str:
# مرحله ۱: دریافت داده با تلاش مجدد خودکار در صورت شکست
data = await workflow.execute_activity(
fetch_context_data,
query_url,
retry=workflow.Retry(max_attempts=3)
)
# مرحله ۲: پردازش با LLM
summary = await workflow.execute_activity(
llm_generate_summary,
data,
schedule_to_close_timeout=timedelta(minutes=5)
)
return summary
در این مثال، اگر fetch_context_data شکست بخورد، Temporal به طور خودکار آن را تا ۳ بار تلاش مجدد میکند. اگر شکست ادامه یابد، workflow میتواند پیکربندی شود تا به یک فعالیت شامل انسان در حلقه (human-in-the-loop) برود یا یک مدیر را مطلع کند. مزیت کلیدی این است که وقتی worker دوباره آنلاین میشود، Temporal رویدادهای تاریخچه را برای بازسازی وضعیت workflow پخش میکند، که تضمین میکند llm_generate_summary تنها زمانی فراخوانی میشود که دادهها با موفقیت دریافت شده باشند.
مزایای قطعی بودن
با اعمال قطعی بودن در workflows، شما چندین مزیت کسب میکنید:
- دوام (Durability): عامل شما در برابر راهاندازی مجدد سرورها، استقرارها و قطعیهای شبکه مقاوم است.
- قابلیت اشکالزدایی: Temporal یک رابط کاربری ارائه میدهد که میتوانید وضعیت دقیق هر مرحله در چرخه عمر عامل را در آن مشاهده کنید که اشکالزدایی دلیل گیر کردن عامل را آسان میسازد.
- مدیریت پیچیدگی: میتوانید ماشینهای حالت پیچیده را پیادهسازی کنید، از جمله شاخههای موازی، زیر-workflowها و child workflowها، بدون مدیریت دستی قفلهای توزیع شده یا وضعیت پایگاه داده.
نتیجهگیری
ساخت عاملهای هوشمند تنها مهندسی پرامپت نیست؛ بلکه مهندسی نرمافزار است. همانطور که عاملهای شما برای عملیات کسبوکار حیاتیتر میشوند، نیاز به قابلیت اطمینان بسیار مهم میگردد. Temporal زیرساخت ارکستراسیون قطعی را فراهم میکند و به توسعهدهندگان اجازه میدهد بر منطق هوش مصنوعی تمرکز کنند در حالی که موتور پیچیدگیهای دوام، منطق تلاش مجدد و مدیریت حالت را مدیریت میکند. با پذیرش این الگو، شما اسکریپتهای شکننده و موقتی را به سیستمهای خودمختار مقاوم و آماده تولید تبدیل میکنید.