מדריך אינטגרציית 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
עקרונות עיצוב
- הפשטת ספקים: כל הספקים מיישמים את
AIProviderInterface, המאפשר התנהגות פולימורפית - תזמור Singleton:
AIOrchestrator::instance()מבטיח נקודה יחידה לניהול ספקים - שרשרת Fallback: עדיפות ניתנת להגדרה עם מעבר אוטומטי בשגיאות או הגבלות קצב
- הרחבת כלים: רישום כלים מבוסס תוספים דרך
ToolRegistry
זרימת נתונים
הודעת משתמש
|
v
MessageHandler --> PromptBuilder (הרכבת קונטקסט)
|
v
AIOrchestrator --> בחירת ספק (לפי סדר עדיפות)
|
v
קריאת API לספק --> פענוח תגובה
|
v
ToolRegistry --> הרצת כלי (אם זוהה function_call)
|
v
תגובה ל-Frontend
2. AIProviderInterface
כל ספקי ה-AI חייבים ליישם את חוזה AIProviderInterface המוגדר ב-/includes/AI/AIProviderInterface.php.
חוזה הממשק
namespace WooAIChatbotAI;
interface AIProviderInterface {
/**
* יצירת תגובת AI מהודעות שיחה.
*
* @param array $messages מערך אובייקטי הודעות עם 'role' ו-'content'.
* @param array $context קונטקסט נוסף (מוצרים, עגלה, כלים וכו').
* @return array|WP_Error תגובה עם 'content', 'tokens', 'model'.
*/
public function generate_response( $messages, $context = array() );
/**
* פורמט הודעות לדרישות API ספציפיות לספק.
*
* @param array $messages פורמט הודעות פנימי.
* @return array הודעות בפורמט הספק.
*/
public function format_messages( $messages );
/**
* אימות מפתח API עם קריאת API מינימלית.
*
* @return bool|WP_Error True אם תקין, WP_Error אחרת.
*/
public function validate_api_key();
/**
* קבלת מודלים זמינים עבור ספק זה.
*
* @return array מזהי מודלים עם שמות תצוגה.
*/
public function get_models();
/**
* קבלת שם ספק קריא לאדם.
*
* @return string שם הספק (למשל 'OpenAI', 'Google Gemini').
*/
public function get_provider_name();
/**
* בדיקה אם הספק מוגדר וזמין.
*
* @return bool True אם קיים מפתח API והספק מוכן.
*/
public function is_available();
}
מבנה תגובה
כל הספקים חייבים להחזיר תגובות בפורמט מנורמל זה:
[
'content' => 'טקסט תגובת AI',
'tokens' => 150, // סה"כ tokens שנוצלו
'model' => 'gpt-4o-mini', // מזהה מודל
'provider' => 'openai', // נוסף ע"י orchestrator
'duration' => 1250.5, // מילישניות (נוסף ע"י orchestrator)
// אופציונלי לקריאת פונקציות:
'function_call' => [
'name' => 'search_products',
'arguments' => '{"query": "מזרן"}'
]
]
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 מובנים בתגובות:
// מבנה תגובה
[
'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 מחזיר קריאות פונקציה בצורה שונה:
// מבנה תגובה
[
'candidates' => [
[
'content' => [
'parts' => [
[
'functionCall' => [
'name' => 'search_products',
'args' => ['query' => 'מזרן']
]
]
]
]
]
]
]
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
// שינוי עדיפות תכנותי
$orchestrator->set_primary_provider( 'openai' );
יצירת תגובה עם Fallback
public function generate_response( $messages, $context = [] ) {
// תעדוף OpenAI לבקשות embedding
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;
}
// טיפול בהגבלת קצב עם ניסיון חוזר
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:
// בתגובת 429 (Rate Limit)
sleep( self::RETRY_DELAY * $attempts ); // 2s, 4s, 6s...
סטטיסטיקות שימוש
$stats = $orchestrator->get_usage_stats();
// מחזיר:
[
'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' => 'יוחנן',
'orders_count' => 5
],
'current_product' => $product_data,
'recently_viewed' => [123, 456, 789]
];
$system_prompt = $builder->build_system_prompt( $context );
שכבות הזרקת קונטקסט
- קונטקסט חנות: שם החנות, URL, locale
- קונטקסט משתמש: שם, אימייל, היסטוריית הזמנות, הוצאות
- קונטקסט עגלה: פריטים, כמויות, סכומים
- קונטקסט מוצר: מוצר העמוד הנוכחי, נצפו לאחרונה
- קונטקסט כלים: הגדרות פונקציות זמינות
- כללי שפה: זיהוי רב-לשוני ותגובה
הרכבת קונטקסט WooCommerce
public function build_context_from_session( $session ) {
$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 ),
];
}
// קונטקסט עגלה
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();
// מחזיר סכמת function-calling של OpenAI:
[
[
'type' => 'function',
'function' => [
'name' => 'search_products',
'description' => 'חיפוש מוצרים...',
'parameters' => [
'type' => 'object',
'properties' => [...],
'required' => []
]
]
]
]
6. מערכת כלים
מערכת הכלים מאפשרת למודלי AI לבצע פעולות מובנות בתוך WooCommerce.
ToolInterface
קובץ: /includes/AI/Tools/class-tool-interface.php
namespace WooAIChatbotAITools;
interface ToolInterface {
/**
* מזהה כלי ייחודי המשמש את ה-AI.
*/
public function get_name();
/**
* סכמת פונקציה תואמת OpenAI.
*/
public function get_schema();
/**
* הרצת כלי עם פרמטרים מאומתים.
*/
public function execute( $params );
/**
* אימות פרמטרים לפני הרצה.
*/
public function validate_params( $params );
}
Tool Registry
קובץ: /includes/AI/class-tool-registry.php
$registry = WooAIChatbotAIToolRegistry::instance();
// רישום כלי מותאם
$registry->register_tool( new MyCustomTool() );
// הרצת כלי
$result = $registry->execute_tool( 'search_products', ['query' => 'laptop'] );
// קבלת כל סכמות הכלים ל-AI
$schemas = $registry->get_tool_schemas();
SearchProductsTool
קובץ: /includes/AI/Tools/class-search-products-tool.php
מחפש מוצרי WooCommerce עם חיפוש טקסט מלא, סינון קטגוריות, וטווחי מחירים.
סכמה:
[
'type' => 'function',
'function' => [
'name' => 'search_products',
'description' => 'חיפוש מוצרי WooCommerce...',
'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' => 'מזרן פרימיום',
'price' => '599.00',
'price_formatted' => '$599.00',
'in_stock' => true,
'categories' => ['מזרנים', 'חדר שינה'],
'permalink' => 'https://...',
'image_url' => 'https://...',
'variations' => [...], // למוצרים משתנים
'attributes' => [...]
]
],
'count' => 5,
'query' => ['query' => 'מזרן', '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']
]
]
]
הוספת כלים מותאמים
- צרו מחלקת כלי המיישמת את
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' => 'קבלת סטטוס הזמנות לקוח',
'parameters' => [
'type' => 'object',
'properties' => [
'order_id' => [
'type' => 'integer',
'description' => 'מזהה הזמנה ספציפי'
]
],
'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 $this->get_recent_orders();
}
}
- רשמו ב-
ToolRegistry:
add_action( 'init', function() {
$registry = WooAIChatbotAIToolRegistry::instance();
$registry->register_tool( new WooAIChatbotAIToolsGetOrderStatusTool() );
});
7. אינטגרציית RAG
התוסף תומך ב-Retrieval-Augmented Generation באמצעות embeddings ואחסון וקטורי Supabase.
זרימת חיפוש סמנטי
שאילתת משתמש
|
v
OpenAI Embeddings API --> וקטור שאילתה (1536 מימדים)
|
v
Supabase pgvector --> חיפוש דמיון קוסינוס
|
v
תוצאות מוצרים Top-K --> הזרקת קונטקסט
|
v
ספק AI --> תגובה משופרת
יצירת Embeddings
// דרך orchestrator (מעדיף אוטומטית OpenAI)
$result = $orchestrator->generate_response(
[['role' => 'user', 'content' => 'מזרן נוח']],
['embedding' => true]
);
$vector = $result['embedding']; // מערך float ב-1536 מימדים
דירוג רלוונטיות קונטקסט
מוצרים מדורגים לפי דמיון קוסינוס לוקטור השאילתה. תוצאות מובילות מוזרקות ל-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
];
// הוספת כלים אם סופקו
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 משתמש באותו פורמט כמו OpenAI
return array_map( function( $msg ) {
return [
'role' => $msg['role'],
'content' => $msg['content']
];
}, $messages );
}
public function validate_api_key() {
// בקשת אימות מינימלית
}
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 |
כל הספקים מוצו | החזר שגיאה למשתמש |
לוגיקת ניסיון חוזר
// טיפול בהגבלת קצב עם exponential backoff
if ( 429 === $status_code && $attempts < self::MAX_RETRIES ) {
sleep( self::RETRY_DELAY * $attempts );
continue;
}
התנהגות Fallback
כאשר ספק נכשל:
- השגיאה נרשמת עם קונטקסט מלא
- סטטיסטיקות שימוש מתעדכנות (
record_usage()) - הספק הבא בשרשרת העדיפות מנוסה
- אחרי כישלון כל הספקים, הודעת שגיאה מפורטת מוחזרת
לוגינג
כל הספקים משתמשים ב-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 משפרת את דיוק גילוי המוצרים
לשאלות או תרומות, עיינו ב-repository של התוסף ב-GitHub או צרו קשר עם צוות הפיתוח.

