מדריך אינטגרציית AI

מדריך אינטגרציית AI

מדריך זה מספק תיעוד מקיף למערכת המשנה של AI ב-WooAI Chatbot Pro. הוא מכסה את הארכיטקטורה מרובת הספקים, מערכת הכלים, הנדסת prompts, ותבניות הרחבה למפתחים בכירים המשלבים או מרחיבים את יכולות ה-AI.

בעיות ומגבלות ידועות

לפני שאתם צוללים פנימה, הנה על מה אנחנו עדיין עובדים:

בעיה סטטוס פתרון זמני
Gemini לפעמים מחזיר content ריק בבדיקה אנחנו מנסים 3 פעמים, בדרך כלל עובד
streaming של Claude לא מיושם מתוכנן ל-0.3.0 השתמשו במצב ללא streaming
function_call של OpenAI הוכרז כמיושן TODO: מעבר ל-tools API עדיין עובד, רק אזהרות בלוגים
ספירת tokens לא מדויקת לשפות שאינן אנגלית לא יתוקן (מגבלת tiktoken) הוסיפו ~20% לקירילית

בכנות: התחלנו עם OpenAI בלבד, ואז הוספנו את Claude ו-Gemini.
שכבת ההפשטה עובדת אבל לא מושלמת. PRs יתקבלו בברכה אם אתם רוצים לנקות את זה.


1. סקירת ארכיטקטורה

מערכת המשנה של AI עוקבת אחר תבנית תזמור מרובת ספקים עם fallback חכם, המאפשרת מעבר חלק בין ספקי AI תוך שמירה על חוזי API עקביים.

קומפוננטות ליבה

AIOrchestrator (Singleton)
    |
    +-- Providers (AIProviderInterface)
    |       +-- GeminiProvider
    |       +-- OpenAIProvider
    |       +-- ClaudeProvider
    |
    +-- ToolRegistry (Singleton)
    |       +-- SearchProductsTool
    |       +-- AddToCartTool
    |       +-- CreateCheckoutTool
    |
    +-- PromptBuilder

עקרונות עיצוב

  1. הפשטת ספקים: כל הספקים מיישמים את AIProviderInterface, המאפשר התנהגות פולימורפית
  2. תזמור Singleton: AIOrchestrator::instance() מבטיח נקודה יחידה לניהול ספקים
  3. שרשרת Fallback: עדיפות ניתנת להגדרה עם מעבר אוטומטי בשגיאות או הגבלות קצב
  4. הרחבת כלים: רישום כלים מבוסס תוספים דרך ToolRegistry

זרימת נתונים

User Message
    |
    v
MessageHandler --> PromptBuilder (Context Assembly)
    |
    v
AIOrchestrator --> Provider Selection (Priority Order)
    |
    v
Provider API Call --> Response Parsing
    |
    v
ToolRegistry --> Tool Execution (if function_call detected)
    |
    v
Response to Frontend

2. AIProviderInterface

כל ספקי ה-AI חייבים ליישם את חוזה AIProviderInterface המוגדר ב-/includes/AI/AIProviderInterface.php.

חוזה הממשק

namespace WooAIChatbotAI;

interface AIProviderInterface {
    /**
     * Generate AI response from conversation messages.
     *
     * @param array $messages Array of message objects with 'role' and 'content'.
     * @param array $context  Additional context (products, cart, tools, etc.).
     * @return array|WP_Error Response with 'content', 'tokens', 'model'.
     */
    public function generate_response( $messages, $context = array() );

    /**
     * Format messages for provider-specific API requirements.
     *
     * @param array $messages Internal message format.
     * @return array Provider-formatted messages.
     */
    public function format_messages( $messages );

    /**
     * Validate API key with minimal API call.
     *
     * @return bool|WP_Error True if valid, WP_Error otherwise.
     */
    public function validate_api_key();

    /**
     * Get available models for this provider.
     *
     * @return array Model identifiers with display names.
     */
    public function get_models();

    /**
     * Get human-readable provider name.
     *
     * @return string Provider name (e.g., 'OpenAI', 'Google Gemini').
     */
    public function get_provider_name();

    /**
     * Check if provider is configured and available.
     *
     * @return bool True if API key exists and provider is ready.
     */
    public function is_available();
}

מבנה תגובה

כל הספקים חייבים להחזיר תגובות בפורמט מנורמל זה:

[
    'content'  => 'AI response text',
    'tokens'   => 150,                    // Total tokens used
    'model'    => 'gpt-4o-mini',          // Model identifier
    'provider' => 'openai',               // Added by orchestrator
    'duration' => 1250.5,                 // Milliseconds (added by orchestrator)
    // Optional for function calling:
    'function_call' => [
        'name'      => 'search_products',
        'arguments' => '{"query": "mattress"}'
    ]
]

3. ספקי AI

ספק Claude

קובץ: /includes/AI/Providers/class-claude-provider.php

Claude משתמש ב-Messages API של Anthropic עם פורמט הודעות ייחודי בו system prompts מועברים בנפרד.

תצורת API

private const API_BASE_URL = 'https://api.anthropic.com/v1';
private const API_VERSION = '2023-06-01';
private const DEFAULT_MODEL = 'claude-3-5-sonnet-20241022';

מודלים נתמכים

מזהה מודל תיאור
claude-3-5-sonnet-20241022 הכי מסוגל, ביצועים מאוזנים
claude-3-5-haiku-20241022 מהיר וחסכוני
claude-3-opus-20240229 Legacy, יכולת גבוהה ביותר
claude-3-sonnet-20240229 Legacy, מאוזן

פורמט הודעות

Claude דורש system prompts כפרמטר נפרד:

public function format_messages( $messages ) {
    $system   = '';
    $formatted = [];

    foreach ( $messages as $message ) {
        if ( 'system' === $message['role'] && empty( $system ) ) {
            $system = $message['content'];
            continue;
        }
        if ( in_array( $message['role'], ['user', 'assistant'], true ) ) {
            $formatted[] = [
                'role'    => $message['role'],
                'content' => $message['content'],
            ];
        }
    }

    return [
        'system'   => $system,
        'messages' => $formatted,
    ];
}

מטען בקשה

$payload = [
    'model'       => 'claude-3-5-sonnet-20241022',
    'max_tokens'  => 1000,
    'temperature' => 0.7,
    'system'      => $system_prompt,
    'messages'    => $formatted_messages,
];

ספק OpenAI

קובץ: /includes/AI/Providers/class-openai-provider.php

OpenAI מספק גם chat completions וגם embeddings, מה שהופך אותו לחיוני ליישומי RAG.

תצורת API

private const API_BASE_URL = 'https://api.openai.com/v1';
private const DEFAULT_MODEL = 'gpt-4o-mini';
private const DEFAULT_EMBEDDING_MODEL = 'text-embedding-3-small';

מודלים נתמכים

מזהה מודל שימוש
gpt-4o הכי מסוגל, multimodal
gpt-4o-mini איזון עלות/ביצועים
gpt-4-turbo יכולת גבוהה עם ראייה
gpt-3.5-turbo מהיר, חסכוני

יצירת Embeddings

OpenAI מקבל עדיפות לבקשות embedding בזכות מודלי embedding מעולים:

public function generate_embedding( $messages ) {
    $text = $messages[0]['content'];

    $payload = [
        'model' => 'text-embedding-3-small',
        'input' => $text,
    ];

    $response = $this->client->post( '/embeddings', ['json' => $payload] );

    return [
        'embedding' => $body['data'][0]['embedding'],
        'tokens'    => $body['usage']['total_tokens'],
        'model'     => $this->embedding_model,
    ];
}

פורמט קריאת פונקציות

OpenAI משתמש ב-tool_calls מובנים בתגובות:

// Response structure
[
    'choices' => [
        [
            'message' => [
                'tool_calls' => [
                    [
                        'id' => 'call_abc123',
                        'function' => [
                            'name' => 'search_products',
                            'arguments' => '{"query":"laptop"}'
                        ]
                    ]
                ]
            ]
        ]
    ]
]

ספק Gemini

קובץ: /includes/AI/Providers/GeminiProvider.php

Gemini של Google משתמש במבנה API שונה עם contents ו-parts.

תצורת API

private const API_BASE_URL = 'https://generativelanguage.googleapis.com/v1beta/';
private const DEFAULT_MODEL = 'gemini-2.5-flash-lite';

מודלים נתמכים

מזהה מודל תיאור
gemini-2.5-flash-lite ערך טוב ביותר, מהיר
gemini-2.0-flash ביצועים יציבים
gemini-2.5-flash יכולות פרימיום

פורמט הודעות

Gemini משתמש בתפקידי user/model עם מבנה parts:

public function format_messages( $messages ) {
    $formatted = [];

    foreach ( $messages as $message ) {
        $role = 'assistant' === $message['role'] ? 'model' : 'user';

        $formatted[] = [
            'role'  => $role,
            'parts' => [
                ['text' => $message['content']]
            ],
        ];
    }

    return $formatted;
}

פורמט הצהרת פונקציות

Gemini דורש כלים בפורמט function_declarations:

private function format_tools_for_gemini( $tools ) {
    $function_declarations = [];

    foreach ( $tools as $tool ) {
        if ( isset( $tool['function'] ) ) {
            $function_declarations[] = $tool['function'];
        }
    }

    return [
        ['function_declarations' => $function_declarations]
    ];
}

תגובת קריאת פונקציה

Gemini מחזיר קריאות פונקציה בצורה שונה:

// Response structure
[
    'candidates' => [
        [
            'content' => [
                'parts' => [
                    [
                        'functionCall' => [
                            'name' => 'search_products',
                            'args' => ['query' => 'mattress']
                        ]
                    ]
                ]
            ]
        ]
    ]
]

4. AI Orchestrator

קובץ: /includes/AI/class-ai-orchestrator.php

ה-orchestrator הוא המתאם המרכזי לכל פעולות ה-AI, מיישם תבנית singleton עם ניהול ספקים מקיף.

קבלת Instance

$orchestrator = WooAIChatbotAIAIOrchestrator::instance();

תצורת עדיפות ספקים

העדיפות מוגדרת דרך משתנה סביבה או transient של WordPress:

# .env
AI_PROVIDER_PRIORITY=gemini,openai,claude
// Programmatic priority change
$orchestrator->set_primary_provider( 'openai' );

יצירת תגובה עם Fallback

public function generate_response( $messages, $context = [] ) {
    // Prioritize OpenAI for embedding requests
    if ( $context['embedding'] ?? false ) {
        $priority_order = array_merge(
            ['openai'],
            array_diff( $this->priority, ['openai'] )
        );
    }

    foreach ( $priority_order as $provider_name ) {
        $provider = $this->get_provider( $provider_name );

        if ( ! $provider || ! $provider->is_available() ) {
            continue;
        }

        $response = $provider->generate_response( $messages, $context );

        if ( ! is_wp_error( $response ) ) {
            $this->record_usage( $provider_name, true, $duration );
            $response['provider'] = $provider_name;
            return $response;
        }

        // Handle rate limiting with retry
        if ( 'rate_limit_exceeded' === $response->get_error_code() ) {
            sleep( 5 );
            $retry = $provider->generate_response( $messages, $context );
            if ( ! is_wp_error( $retry ) ) {
                return $retry;
            }
        }
    }

    return new WP_Error( 'all_providers_failed', 'All AI providers failed.' );
}

אסטרטגיית הגבלת קצב

כל ספק מיישם exponential backoff:

// On 429 (Rate Limit) response
sleep( self::RETRY_DELAY * $attempts ); // 2s, 4s, 6s...

סטטיסטיקות שימוש

$stats = $orchestrator->get_usage_stats();
// Returns:
[
    'openai' => [
        'total'        => 150,
        'success'      => 145,
        'failure'      => 5,
        'success_rate' => 96.67,
        'avg_time'     => 1250.5
    ]
]

אסטרטגיית מטמון

Transients משמשים למטמון עם תפוגה של 24 שעות:

  • woo_ai_chatbot_usage_stats – סטטיסטיקות שימוש בספקים
  • woo_ai_chatbot_provider_priority – סדר עדיפות במטמון
  • woo_ai_chatbot_provider_switches – מעקב אחר שרשרת fallback

5. Prompt Builder

קובץ: /includes/AI/class-prompt-builder.php

PromptBuilder בונה system prompts מקיפים עם קונטקסט WooCommerce, נתוני משתמש, והוראות כלים.

בניית System Prompts

$builder = new WooAIChatbotAIPromptBuilder();

$context = [
    'products' => $search_results,
    'cart' => [
        'items' => [...],
        'total' => '$150.00'
    ],
    'user' => [
        'name' => 'John',
        'orders_count' => 5
    ],
    'current_product' => $product_data,
    'recently_viewed' => [123, 456, 789]
];

$system_prompt = $builder->build_system_prompt( $context );

שכבות הזרקת קונטקסט

  1. קונטקסט חנות: שם החנות, URL, locale
  2. קונטקסט משתמש: שם, אימייל, היסטוריית הזמנות, הוצאות
  3. קונטקסט עגלה: פריטים, כמויות, סכומים
  4. קונטקסט מוצר: מוצר העמוד הנוכחי, נצפו לאחרונה
  5. קונטקסט כלים: הגדרות פונקציות זמינות
  6. כללי שפה: זיהוי רב-לשוני ותגובה

הרכבת קונטקסט WooCommerce

public function build_context_from_session( $session ) {
    $context = [];

    // User context
    if ( is_user_logged_in() ) {
        $user = wp_get_current_user();
        $context['user'] = [
            'id'           => $user->ID,
            'name'         => $user->display_name,
            'orders_count' => wc_get_customer_order_count( $user->ID ),
            'total_spent'  => wc_get_customer_total_spent( $user->ID ),
        ];
    }

    // Cart context
    if ( WC()->cart ) {
        $context['cart'] = [
            'items'    => $this->format_cart_items(),
            'subtotal' => WC()->cart->get_subtotal(),
            'total'    => WC()->cart->get_total( 'edit' ),
        ];
    }

    return $context;
}

ייצוא פורמט כלים של OpenAI

$openai_tools = $builder->get_openai_tools();
// Returns OpenAI function-calling schema:
[
    [
        'type' => 'function',
        'function' => [
            'name' => 'search_products',
            'description' => 'Search for products...',
            'parameters' => [
                'type' => 'object',
                'properties' => [...],
                'required' => []
            ]
        ]
    ]
]

6. מערכת כלים

מערכת הכלים מאפשרת למודלי AI לבצע פעולות מובנות בתוך WooCommerce.

ToolInterface

קובץ: /includes/AI/Tools/class-tool-interface.php

namespace WooAIChatbotAITools;

interface ToolInterface {
    /**
     * Unique tool identifier used by AI.
     */
    public function get_name();

    /**
     * OpenAI-compatible function schema.
     */
    public function get_schema();

    /**
     * Execute tool with validated parameters.
     */
    public function execute( $params );

    /**
     * Validate parameters before execution.
     */
    public function validate_params( $params );
}

Tool Registry

קובץ: /includes/AI/class-tool-registry.php

$registry = WooAIChatbotAIToolRegistry::instance();

// Register custom tool
$registry->register_tool( new MyCustomTool() );

// Execute tool
$result = $registry->execute_tool( 'search_products', ['query' => 'laptop'] );

// Get all tool schemas for AI
$schemas = $registry->get_tool_schemas();

SearchProductsTool

קובץ: /includes/AI/Tools/class-search-products-tool.php

מחפש מוצרי WooCommerce עם חיפוש טקסט מלא, סינון קטגוריות, וטווחי מחירים.

סכמה:

[
    'type' => 'function',
    'function' => [
        'name' => 'search_products',
        'description' => 'Search for WooCommerce products...',
        'parameters' => [
            'properties' => [
                'query'     => ['type' => 'string'],
                'category'  => ['type' => 'string'],
                'min_price' => ['type' => 'number'],
                'max_price' => ['type' => 'number'],
                'in_stock'  => ['type' => 'boolean'],
                'limit'     => ['type' => 'integer', 'minimum' => 1, 'maximum' => 20],
                'sort'      => ['type' => 'string']  // 'relevance', 'price_asc', 'price_desc'
            ],
            'required' => []
        ]
    ]
]

תגובה:

[
    'products' => [
        [
            'id' => 123,
            'name' => 'Premium Mattress',
            'price' => '599.00',
            'price_formatted' => '$599.00',
            'in_stock' => true,
            'categories' => ['Mattresses', 'Bedroom'],
            'permalink' => 'https://...',
            'image_url' => 'https://...',
            'variations' => [...],  // For variable products
            'attributes' => [...]
        ]
    ],
    'count' => 5,
    'query' => ['query' => 'mattress', 'limit' => 5]
]

AddToCartTool

קובץ: /includes/AI/Tools/class-add-to-cart-tool.php

מוסיף מוצרים לעגלה עם תמיכה בכמות ווריאציות.

סכמה:

[
    'function' => [
        'name' => 'add_to_cart',
        'parameters' => [
            'properties' => [
                'product_id'   => ['type' => 'integer'],
                'quantity'     => ['type' => 'integer', 'minimum' => 1, 'maximum' => 100],
                'variation_id' => ['type' => 'integer']
            ],
            'required' => ['product_id']
        ]
    ]
]

CreateCheckoutTool

קובץ: /includes/AI/Tools/class-create-checkout-tool.php

יוצר סשנים של checkout עם מספר פריטים ותמיכה בקופונים.

סכמה:

[
    'function' => [
        'name' => 'create_checkout',
        'parameters' => [
            'properties' => [
                'items' => [
                    'type' => 'array',
                    'items' => [
                        'properties' => [
                            'product_id' => ['type' => 'integer'],
                            'quantity' => ['type' => 'integer'],
                            'variation_id' => ['type' => 'integer']
                        ]
                    ]
                ],
                'coupon_code' => ['type' => 'string'],
                'clear_cart' => ['type' => 'boolean']
            ],
            'required' => ['items']
        ]
    ]
]

הוספת כלים מותאמים

  1. צרו מחלקת כלי המיישמת את ToolInterface:
namespace WooAIChatbotAITools;

class GetOrderStatusTool implements ToolInterface {

    public function get_name() {
        return 'get_order_status';
    }

    public function get_schema() {
        return [
            'type' => 'function',
            'function' => [
                'name' => 'get_order_status',
                'description' => 'Get status of customer orders',
                'parameters' => [
                    'type' => 'object',
                    'properties' => [
                        'order_id' => [
                            'type' => 'integer',
                            'description' => 'Specific order ID'
                        ]
                    ],
                    'required' => []
                ]
            ]
        ];
    }

    public function validate_params( $params ) {
        if ( isset( $params['order_id'] ) && ! is_numeric( $params['order_id'] ) ) {
            return new WP_Error( 'invalid_order_id', 'Order ID must be numeric' );
        }
        return true;
    }

    public function execute( $params ) {
        $order_id = $params['order_id'] ?? null;

        if ( $order_id ) {
            $order = wc_get_order( $order_id );
            if ( ! $order ) {
                return new WP_Error( 'order_not_found', 'Order not found' );
            }
            return [
                'order_id' => $order_id,
                'status'   => $order->get_status(),
                'total'    => $order->get_total(),
                'date'     => $order->get_date_created()->format( 'Y-m-d' )
            ];
        }

        // Return recent orders for current user
        return $this->get_recent_orders();
    }
}
  1. רשמו ב-ToolRegistry:
add_action( 'init', function() {
    $registry = WooAIChatbotAIToolRegistry::instance();
    $registry->register_tool( new WooAIChatbotAIToolsGetOrderStatusTool() );
});

7. אינטגרציית RAG

התוסף תומך ב-Retrieval-Augmented Generation באמצעות embeddings ואחסון וקטורי Supabase.

זרימת חיפוש סמנטי

User Query
    |
    v
OpenAI Embeddings API --> Query Vector (1536 dimensions)
    |
    v
Supabase pgvector --> Cosine Similarity Search
    |
    v
Top-K Product Results --> Context Injection
    |
    v
AI Provider --> Enhanced Response

יצירת Embeddings

// Via orchestrator (automatically prioritizes OpenAI)
$result = $orchestrator->generate_response(
    [['role' => 'user', 'content' => 'comfortable mattress']],
    ['embedding' => true]
);

$vector = $result['embedding'];  // 1536-dimensional float array

דירוג רלוונטיות קונטקסט

מוצרים מדורגים לפי דמיון קוסינוס לוקטור השאילתה. תוצאות מובילות מוזרקות ל-system prompt דרך PromptBuilder::add_product_context().

אינטגרציית Supabase

חיפוש דמיון וקטורי משתמש בהרחבת pgvector:

SELECT *, 1 - (embedding <=> query_embedding) AS similarity
FROM products_embeddings
WHERE 1 - (embedding <=> query_embedding) > 0.7
ORDER BY similarity DESC
LIMIT 5;

8. הוספת ספק חדש

שלב 1: יצירת מחלקת ספק

namespace WooAIChatbotAIProviders;

use WooAIChatbotAIAIProviderInterface;
use GuzzleHttpClient;
use WP_Error;

class MistralProvider implements AIProviderInterface {

    private const API_BASE_URL = 'https://api.mistral.ai/v1';
    private const DEFAULT_MODEL = 'mistral-large-latest';

    private $client;
    private $api_key;
    private $model;

    public function __construct() {
        $settings = get_option( 'woo_ai_chatbot_settings', [] );
        $this->api_key = $settings['mistral_api_key'] ?? '';
        $this->model = self::DEFAULT_MODEL;

        $this->client = new Client([
            'base_uri' => self::API_BASE_URL,
            'timeout' => 30,
            'headers' => [
                'Authorization' => 'Bearer ' . $this->api_key,
                'Content-Type' => 'application/json'
            ]
        ]);
    }

    public function generate_response( $messages, $context = [] ) {
        if ( ! $this->is_available() ) {
            return new WP_Error( 'mistral_unavailable', 'Mistral not configured' );
        }

        $formatted = $this->format_messages( $messages );

        $payload = [
            'model' => $this->model,
            'messages' => $formatted,
            'temperature' => 0.7,
            'max_tokens' => 1000
        ];

        // Add tools if provided
        if ( ! empty( $context['tools'] ) ) {
            $payload['tools'] = $context['tools'];
        }

        try {
            $response = $this->client->post( '/chat/completions', ['json' => $payload] );
            $body = json_decode( $response->getBody(), true );

            return [
                'content' => $body['choices'][0]['message']['content'],
                'tokens' => $body['usage']['total_tokens'],
                'model' => $this->model
            ];
        } catch ( Exception $e ) {
            return new WP_Error( 'mistral_error', $e->getMessage() );
        }
    }

    public function format_messages( $messages ) {
        // Mistral uses same format as OpenAI
        return array_map( function( $msg ) {
            return [
                'role' => $msg['role'],
                'content' => $msg['content']
            ];
        }, $messages );
    }

    public function validate_api_key() {
        // Minimal validation request
    }

    public function get_models() {
        return [
            'mistral-large-latest' => 'Mistral Large',
            'mistral-small-latest' => 'Mistral Small'
        ];
    }

    public function get_provider_name() {
        return 'Mistral AI';
    }

    public function is_available() {
        return ! empty( $this->api_key );
    }
}

שלב 2: רישום ב-Orchestrator

שנו את AIOrchestrator::initialize_providers():

$mistral_key = $settings['mistral_api_key'] ?? '';
if ( ! empty( $mistral_key ) ) {
    require_once __DIR__ . '/Providers/class-mistral-provider.php';
    $this->providers['mistral'] = new WooAIChatbotAIProvidersMistralProvider();
}

שלב 3: עדכון עדיפות

AI_PROVIDER_PRIORITY=gemini,mistral,openai,claude

9. טיפול בשגיאות

קודי שגיאה של ספקים

קוד תיאור פעולה
rate_limit_exceeded תגובת 429 ניסיון חוזר אחרי השהייה, אז fallback
invalid_api_key תגובת 401 דלג על ספק, רשום שגיאה
provider_unavailable אין מפתח API מוגדר עבור לספק הבא
all_providers_failed כל הספקים מוצו החזר שגיאה למשתמש

לוגיקת ניסיון חוזר

// Rate limit handling with exponential backoff
if ( 429 === $status_code && $attempts < self::MAX_RETRIES ) {
    sleep( self::RETRY_DELAY * $attempts );
    continue;
}

התנהגות Fallback

כאשר ספק נכשל:

  1. השגיאה נרשמת עם קונטקסט מלא
  2. סטטיסטיקות שימוש מתעדכנות (record_usage())
  3. הספק הבא בשרשרת העדיפות מנוסה
  4. אחרי כישלון כל הספקים, הודעת שגיאה מפורטת מוחזרת

לוגינג

כל הספקים משתמשים ב-Monolog עם handler קבצים מתגלגל:

$this->logger->error( 'API request failed', [
    'provider' => 'gemini',
    'status_code' => 429,
    'attempt' => 2,
    'error' => $e->getMessage()
]);

מיקום לוג: /logs/chatbot.log עם שמירה של 7 ימים.

תגובת שגיאה מובנית

return new WP_Error(
    'all_providers_failed',
    'All AI providers failed to generate a response.',
    [
        'attempts' => [
            ['provider' => 'gemini', 'error' => 'Rate limit', 'code' => 429],
            ['provider' => 'openai', 'error' => 'Invalid key', 'code' => 401]
        ],
        'duration' => 5200,
        'tried' => ['gemini', 'openai', 'claude']
    ]
);

סיכום

מערכת המשנה של AI ב-WooAI Chatbot Pro מספקת ארכיטקטורה חזקה וניתנת להרחבה לאינטגרציית AI מרובת ספקים:

  • הפשטת ספקים דרך AIProviderInterface מאפשרת מעבר חלק בין ספקים
  • תבנית Orchestrator עם fallback אוטומטי מבטיחה זמינות גבוהה
  • מערכת כלים מאפשרת להרחיב יכולות AI עם פעולות WooCommerce
  • הנדסת prompts דרך PromptBuilder מספקת תגובות עקביות וקונטקסטואליות
  • תמיכת RAG דרך embeddings משפרת את דיוק גילוי המוצרים

לשאלות או תמיכה, צרו קשר עם צוות הפיתוח.