Agent Frameworks

ساخت گردش‌کارهای چندعاملی قطعی با ارکستراسیون ماشین حالت

موج فعلی مهندسی هوش مصنوعی توسط «مسیریابی مبتنی بر LLM» غالب است. اگرچه این رویکرد وسوسه‌انگیز است، اما به شدت شکننده محسوب می‌شود. تکیه بر LLM برای تعیین گام بعدی در یک گردش‌کار پیچیده، عدم قطعیت، تأخیر و هزینه‌های غیرقابل پیش‌بینی را به همراه دارد. برای سیستم‌های درجه تولید، به ویژه در حوزه‌هایی مانند مالی، سلامت یا لجستیک، قطعیت یک ویژگی نیست، بلکه یک الزام است.

در این پست، بررسی می‌کنیم که چگونه می‌توان مسیریابی احتمالی را با ارکستراسیون ماشین حالت جایگزین کرد. با در نظر گرفتن عامل‌ها به عنوان گره‌های صریح در یک ماشین حالت متناهی (FSM)، ما کنترل کاملی بر مسیرهای اجرا کسب می‌کنیم، تکرارپذیری را تضمین می‌کنیم و عیب‌یابی را ساده‌تر می‌سازیم.

چرا ماشین‌های حالت بر مسیریابی LLM برتری دارند

هنگامی که از LLM برای مسیریابی وظایف استفاده می‌کنید، در واقع از مدل می‌خواهید به عنوان یک درخت تصمیم عمل کند. این رویکرد دارای چندین نقص حیاتی است:

  1. عدم قطعیت: ورودی یکسان ممکن است در اجراهای مختلف، مسیرهای اجرای متفاوتی را تولید کند.
  2. بار شناختی: مدل توکن‌ها را برای تجزیه زمینه‌ای که برای تصمیم‌گیری درباره گام بعدی نیاز ندارد، هدر می‌دهد.
  3. کابوس‌های عیب‌یابی: ردیابی دلیل انتخاب یک شاخه خاص دشوار است، زمانی که تصمیم در خروجی احتمالی پنهان شده باشد.

ارکستراسیون ماشین حالت، منطق جریان را از منطق عامل جدا می‌کند. ماشین حالت قوانین تعامل را دیکته می‌کند، در حالی که عامل‌ها (چه LLMها، چه اسکریپت‌های قطعی یا APIهای خارجی) کار اصلی را انجام می‌دهند. این معماری با بهترین شیوه‌های مهندسی نرم‌افزار سنتی همخوانی دارد و ساختار را به سیستم‌های مبتنی بر عامل می‌آورد.

پیاده‌سازی یک گردش‌کار قطعی

ما می‌توانیم یک ماشین حالت مقاوم را با استفاده از enum داخلی پایتون برای حالت‌ها و یک دیسپچر برای گذارها پیاده‌سازی کنیم. در زیر یک مثال عملی از یک سیستم تریاژ پشتیبانی مشتری آورده شده است.

import enum
from typing import Dict, Any

class SupportState(enum.Enum):
    INITIAL = "initial"
    TICKET_CREATED = "ticket_created"
    ESCALATED = "escalated"
    RESOLVED = "resolved"

class SupportOrchestrator:
    def __init__(self):
        self.state = SupportState.INITIAL
        self.context: Dict[str, Any] = {}

    def handle_request(self, request: str) -> str:
        # گام 1: تعیین نیت با استفاده از یک طبقه‌بند سبک یا تطبیق کلمه کلیدی
        # این روش قطعی است، برخلاف تماس با LLM
        if "urgent" in request.lower():
            self.state = SupportState.ESCALATED
            return self.escalate_process()
        elif "refund" in request.lower():
            self.state = SupportState.TICKET_CREATED
            return self.create_ticket_process()
        else:
            self.state = SupportState.RESOLVED
            return self.resolve_process()

    def escalate_process(self) -> str:
        # منطق برای ارجاع به یک عامل انسانی
        return "Escalating to senior support team."

    def create_ticket_process(self) -> str:
        # منطق برای ایجاد یک رکورد در پایگاه داده
        return "Refund ticket created."

    def resolve_process(self) -> str:
        return "Request resolved automatically."

یکپارچه‌سازی LLMها به عنوان گره‌های حالت

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

برای مثال، پس از حالت ticket_created، ممکن است یک LLM را برای پیش‌نویس کردن پاسخ فعال کنید. با این حال، تصمیم برای حرکت به RESOLVED یا ESCALATED باید بر اساس معیارهای صریح (مثلاً نمره تحلیل احساسات < -0.5) باشد، نه اینکه از LLM بپرسید «فکر می‌کنید بعدی چه باید بکند؟»

نتیجه‌گیری

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

Share: