> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق دوال الذكاء الاصطناعي

# دوال الذكاء الاصطناعي

دوال الذكاء الاصطناعي هي دوال مضمّنة في ClickHouse يمكنك استخدامها لاستدعاء الذكاء الاصطناعي أو إنشاء تضمين للعمل مع بياناتك، واستخراج المعلومات، وتصنيف البيانات، وغير ذلك...

<Note>
  دوال الذكاء الاصطناعي تجريبية. اضبط [`allow_experimental_ai_functions`](/ar/reference/settings/session-settings/allow-experimental#allow_experimental_ai_functions) لتمكينها.

  قد تُرجع دوال الذكاء الاصطناعي مخرجات غير متوقعة. وتعتمد النتيجة بدرجة كبيرة على جودة الموجّه والنموذج المستخدم.
</Note>

<Warning>
  **حقن الموجّه**

  يُرسل النص المُدخل إلى النموذج ويمكنه توجيه مخرجاته (حقن الموجّه). قد يحتوي النص الوارد من مصادر خارجية أو غير متحقق منها أو غير مُنقّاة على تعليمات تجعل النموذج يُرجع محتوى يتحكم فيه المهاجم، أو يتجاهل التنسيق المطلوب، أو يُصدر حمولات ضارة. تعامل مع مخرجات دالة الذكاء الاصطناعي بوصفها غير موثوقة: تحقّق منها أو نقّها قبل استخدامها في خطوات لاحقة، مثل إنشاء SQL أو أوامر الصدفة أو استعلامات إضافية أو قرارات التحكم في الوصول.
</Warning>

تشترك جميع الدوال في بنية تحتية موحّدة توفّر ما يلي:

* **فرض الحصص**: حدود لكل استعلام على الرموز ([`ai_function_max_input_tokens_per_query`](/ar/reference/settings/session-settings/ai-function#ai_function_max_input_tokens_per_query), [`ai_function_max_output_tokens_per_query`](/ar/reference/settings/session-settings/ai-function#ai_function_max_output_tokens_per_query)) واستدعاءات واجهة برمجة التطبيقات ([`ai_function_max_api_calls_per_query`](/ar/reference/settings/session-settings/ai-function#ai_function_max_api_calls_per_query)).
* **إعادة المحاولة مع زيادة تدريجية في التأخير**: تتم إعادة محاولة الإخفاقات العابرة ([`ai_function_max_retries`](/ar/reference/settings/session-settings/ai-function#ai_function_max_retries)) باستخدام تأخير أُسّي متزايد ([`ai_function_retry_initial_delay_ms`](/ar/reference/settings/session-settings/ai-function#ai_function_retry_initial_delay_ms)).

<div id="configuration">
  ## الإعداد
</div>

تشير دوال الذكاء الاصطناعي إلى **مجموعة مُسمّاة** تخزّن بيانات اعتماد الموفّر وإعداداته. ويمكن إنشاء مجموعات مُسمّاة مختلفة واستخدامها مع دوال مختلفة أو مع استدعاءات مختلفة للدوال. على سبيل المثال، قد ترغب في تعريف مجموعة مُسمّاة مختلفة لاستخدامها مع دوال النص (`aiGenerate`, `aiClassify`, `aiFilter`, `aiExtract`, `aiTranslate`, `aiRedact`) مقابل دوال التضمين (`aiEmbed`, `aiSimilarity`)، إذ تتطلب نقاط نهاية مختلفة وتستخدم عادةً نماذج مختلفة.

مثال على تعليمة لإنشاء مجموعة مُسمّاة تحتوي على بيانات اعتماد الموفّر، إحداهما مع نقطة نهاية للدردشة والأخرى مع نقطة نهاية للتضمين:

```sql theme={null}
CREATE NAMED COLLECTION ai_text_credentials AS
    provider = 'openai',
    endpoint = 'https://api.openai.com/v1/chat/completions',
    model = 'gpt-4o-mini',
    api_key = 'sk-...';

-- The embedding functions (`aiEmbed`, `aiSimilarity`) do not read `model` from the named collection,
-- pass it as a positional argument instead. Defining `model` in an embedding collection is an error,
-- not silently ignored.
CREATE NAMED COLLECTION ai_embedding_credentials AS
    provider = 'openai',
    endpoint = 'https://api.openai.com/v1/embeddings',
    api_key = 'sk-...';
```

<div id="named-collection-parameters">
  ### معلمات المجموعة المسماة
</div>

| المعلمة       | النوع  | الافتراضي | الوصف                                                                                                                                                                                      |
| ------------- | ------ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `provider`    | String | —         | موفّر النموذج. القيم المدعومة: `'openai'` و`'anthropic'`. انظر الملاحظة أدناه.                                                                                                             |
| `endpoint`    | String | —         | عنوان URL لنقطة نهاية واجهة برمجة التطبيقات.                                                                                                                                               |
| `model`       | String | —         | اسم النموذج (مثل `'gpt-4o-mini'`). تستخدمه الدوال النصية؛ وتتطلب دوال التضمين (`aiEmbed` و`aiSimilarity`) إدخال `model` كوسيط موضعي، وتُرجع خطأً إذا تم تحديد `model` في المجموعة المسماة. |
| `api_key`     | String | —         | مفتاح المصادقة الخاص بالموفّر. اختياري: عند عدم تحديده، لا يُرسَل رأس المصادقة، مما يتيح الاستهداف لخوادم متوافقة مع OpenAI لا تتطلب مصادقة.                                               |
| `max_tokens`  | UInt64 | `1024`    | الحد الأقصى لعدد رموز الإخراج لكل استدعاء لواجهة برمجة التطبيقات.                                                                                                                          |
| `api_version` | String | —         | سلسلة إصدار واجهة برمجة التطبيقات. تستخدمها Anthropic (`'2023-06-01'`).                                                                                                                    |

<Note>
  يمكن استخدام أي واجهة برمجة تطبيقات متوافقة مع OpenAI (مثل vLLM وOllama وLiteLLM) عبر ضبط `provider = 'openai'` وتوجيه `endpoint` إلى خدمتك.
</Note>

<div id="selecting-credentials">
  ### اختيار بيانات الاعتماد
</div>

تحدِّد الدالة المجموعة المُسمّاة المطلوب استخدامها وفق الترتيب التالي:

1. مفتاح `credentials` في خريطة المَعلمات الخاصة بها، إن وُجد؛
2. وإلا، إعداد بيانات الاعتماد الافتراضي المنطبق:
   * [`ai_function_text_default_credentials`](/ar/reference/settings/session-settings/ai-function#ai_function_text_default_credentials) لدوال النص (`aiGenerate` و`aiClassify` و`aiFilter` و`aiExtract` و`aiTranslate` و`aiRedact`);
   * [`ai_function_embedding_default_credentials`](/ar/reference/settings/session-settings/ai-function#ai_function_embedding_default_credentials) لدوال التضمين (`aiEmbed` و`aiSimilarity`).

إذا لم يُضبط أيٌّ منهما، يفشل الاستدعاء. تستخدم دوال النص ودوال التضمين إعدادات افتراضية منفصلة لأن نقطة النهاية الخاصة بإكمالات الدردشة تختلف عن نظيرتها الخاصة بالتضمينات.

```sql theme={null}
SET ai_function_text_default_credentials = 'ai_text_credentials';

-- Uses ai_text_credentials from the setting:
SELECT aiGenerate('What is 2 + 2? Reply with just the number.');

-- Overrides the default for this call:
SELECT aiGenerate('Bonjour', map('credentials', 'other_credentials'));
```

رشِّح الصفوف باستخدام شرط بلغة طبيعية عبر `aiFilter`، إذ تُرجع `UInt8` ويمكن استخدامها مباشرةً في `WHERE`:

```sql theme={null}
SELECT * FROM reviews
WHERE aiFilter(body, 'the customer is angry about shipping');
```

<div id="parameter-map">
  ### خريطة المعلمات
</div>

تقبل كل دالة، اختياريًا، ‎`Map(String, String)`‎ من المعلمات في النهاية. جميع القيم سلاسل نصية (ضع الأرقام بين علامتَي اقتباس، مثل ‎`'0.2'`‎). تُرفض المفاتيح غير المعروفة. وإذا كان المفتاح موجودًا، فإنه يتجاوز القيمة المناظرة في المجموعة المُسمّاة؛ أما إذا لم يكن موجودًا، فيُستخدَم ما في المجموعة المُسمّاة (بالنسبة إلى ‎`model`‎/‎`max_tokens`‎) أو القيمة الافتراضية المضمّنة. والاستثناء هو دوال التضمين (‎`aiEmbed`‎ و‎`aiSimilarity`‎)، إذ تأخذ ‎`model`‎ بوصفها وسيطة موضعية مطلوبة (مثل ‎`aiEmbed(text, model[, params])`‎ و‎`aiSimilarity(text1, text2, model[, params])`‎) وتُرجع خطأ إذا جرى تعيينها بدلًا من ذلك في خريطة المعلمات أو المجموعة المُسمّاة. وذلك لضمان تضمينات قابلة لإعادة الإنتاج.

المعلمات التالية مشتركة بين جميع دوال الذكاء الاصطناعي:

| Key           | Description                                                                                                                                                              |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `credentials` | المجموعة المُسمّاة المطلوب استخدامها (انظر أعلاه).                                                                                                                       |
| `model`       | يتجاوز قيمة `model` الخاصة بالمجموعة (لدوال النص فقط؛ تأخذ دوال التضمين (`aiEmbed` و`aiSimilarity`) القيمة `model` بوصفها وسيطة موضعية مطلوبة، وليس مفتاحًا في الخريطة). |

وتقبل كل دالة أيضًا معلمات إضافية خاصة بها (مثل ‎`max_tokens`‎ و‎`temperature`‎ و‎`system_prompt`‎ و‎`instructions`‎ و‎`dimensions`‎). راجع المرجع الخاص بكل دالة أدناه لمعرفة المعلمات التي تقبلها وقيمها الافتراضية.

```sql theme={null}
SELECT aiGenerate(body, map('temperature', '0.2', 'system_prompt', 'You are terse.')) FROM articles;
```

<div id="query-level-settings">
  ### إعدادات على مستوى الاستعلام
</div>

تَرِد جميع الإعدادات المتعلقة بالذكاء الاصطناعي في [الإعدادات](/ar/reference/settings/session-settings) تحت البادئة `ai_function_`.

<div id="restricting-endpoint-hosts">
  ### تقييد مضيفات نقطة النهاية
</div>

يمثل عنوان URL الخاص بـ `endpoint` في مجموعة مسماة للذكاء الاصطناعي وجهةً خارجية يتصل بها الخادم باستخدام هويته الخاصة، وقد يتضمن — إذا جرى تحديده — `api_key` الخاص بالمجموعة المسماة في رؤوس الطلب. افتراضيًا، يسمح ClickHouse بأي مضيف. لحصر الدوال في مجموعة محددة من الموفّرين، اضبط [`remote_url_allow_hosts`](/ar/reference/settings/server-settings/settings/remote#remote_url_allow_hosts) في إعدادات الخادم، على سبيل المثال:

```xml theme={null}
<remote_url_allow_hosts>
    <host>api.openai.com</host>
    <host>api.anthropic.com</host>
</remote_url_allow_hosts>
```

لاحظ أن هذا الإعداد عام على مستوى الخادم ويسري على جميع الميزات التي تستخدم HTTP.

<div id="transport-security">
  ### أمان النقل (HTTP مقابل HTTPS)
</div>

يُحدَّد النقل حصريًا من خلال scheme لعنوان URL الخاص بـ `endpoint`. لا يوجد تشفير على مستوى التطبيق لحمولة الطلب؛ إذ تعتمد حماية البيانات أثناء النقل بالكامل على هذا الـ scheme:

* `https://` — يستخدم الاتصال TLS. يُشفَّر جسم الطلب (النص المُدخل، والتوجيهات) و`api_key` في رأس الطلب أثناء النقل، كما يجري التحقق من certificate الخاصة بالموفّر. استخدم هذا مع أي موفّر بعيد.
* `http://` — الاتصال **غير مشفَّر**. يُرسَل جسم الطلب و`api_key` بصيغة مكشوفة. استخدم هذا فقط مع موفّر موثوق على private network (مثل instance محلي من `vLLM` أو `Ollama`).

افتراضيًا، ترفض دوال الذكاء الاصطناعي `endpoint` يؤدي إلى إرسال البيانات بصيغة مكشوفة إلى مضيف بعيد: إذ تؤدي أي نقطة نهاية غير HTTPS لا يكون مضيفها loopback إلى ظهور استثناء. تُستثنى مضيفات loopback (`localhost`، `127.0.0.0/8`، `::1`)، لذا يعمل خادم model محلي على `http://localhost` مباشرةً. للسماح بنقطة نهاية `http://` ذات نص مكشوف على مضيف بعيد، اضبط [`ai_function_allow_insecure_endpoint`](/ar/reference/settings/session-settings/ai-function#ai_function_allow_insecure_endpoint) على `1`. هذا check مستقل عن [`remote_url_allow_hosts`](/ar/reference/settings/server-settings/settings/remote#remote_url_allow_hosts): فهذا الإعداد هو allowlist للمضيفين ولا يفحص scheme الخاص بعنوان URL، لذا فإن `endpoint` من نوع `http://` والموجَّه إلى مضيف مسموح به يمر منه أيضًا.

لاحظ أنه في كلتا الحالتين يتلقى الموفّر بيانات الإدخال بصيغة مكشوفة بعد إنهاء TLS؛ إذ لا يحمي TLS البيانات إلا على مسار الشبكة بين الخادم والموفّر.

<div id="supported-providers">
  ## الموفّرون المدعومون
</div>

| الموفّر   | قيمة `provider` | وظائف الدردشة | ملاحظات                             |
| --------- | --------------- | ------------- | ----------------------------------- |
| OpenAI    | `'openai'`      | نعم           | الموفّر الافتراضي.                  |
| Anthropic | `'anthropic'`   | نعم           | يستخدم نقطة النهاية `/v1/messages`. |

<div id="observability">
  ## Observability
</div>

يُتتبَّع نشاط AI function عبر [ProfileEvents](/ar/reference/system-tables/query_log) في ClickHouse:

| ProfileEvent      | Description                                                                                  |
| ----------------- | -------------------------------------------------------------------------------------------- |
| `AIAPICalls`      | عدد طلبات HTTP المُرسلة إلى موفّر الذكاء الاصطناعي.                                          |
| `AIInputTokens`   | إجمالي رموز الإدخال المستهلَكة.                                                              |
| `AIOutputTokens`  | إجمالي رموز الإخراج المستهلَكة.                                                              |
| `AIRowsProcessed` | عدد الصفوف التي تلقّت نتيجة.                                                                 |
| `AIRowsSkipped`   | عدد الصفوف التي جرى تخطيها (تم تجاوز الحصة، أو حدث خطأ مع `ai_function_throw_on_error = 0`). |

استعلم عن هذه الأحداث:

```sql theme={null}
SELECT
    ProfileEvents['AIAPICalls'] AS api_calls,
    ProfileEvents['AIInputTokens'] AS input_tokens,
    ProfileEvents['AIOutputTokens'] AS output_tokens
FROM system.query_log
WHERE query_id = 'query_id'
AND type = 'QueryFinish'
ORDER BY event_time DESC;
```

<div id="aiClassify">
  ## aiClassify
</div>

أُضيف في: v26.4.0

يُصنّف النص المُعطى ضمن إحدى الفئات المتاحة باستخدام موفّر LLM.

تُؤخذ بيانات الاعتماد (وهي مجموعة مسماة تحدد الموفّر والنموذج ونقطة النهاية، واختياريًا مفتاح واجهة برمجة تطبيقات)
من المفتاح `credentials` في خريطة المعلمات الاختيارية، أو من الإعداد
`ai_function_text_default_credentials` إذا لم تتضمنه الخريطة.

**البنية**

```sql theme={null}
aiClassify(text, categories[, params])
```

**الأسماء البديلة**: `AIClassify`

**الوسيطة**

* `text` — النص المطلوب تصنيفه. [`String`](/ar/reference/data-types/string)
* `categories` — قائمة ثابتة بتسميات الفئات المرشحة. [`Array(String)`](/ar/reference/data-types/array)
* `params` — `Map(String, String)` ثابت اختياري للمعلمات. المفاتيح الخاصة بالدالة: `temperature` (درجة حرارة أخذ العينات التي تتحكم في مستوى العشوائية؛ القيمة الافتراضية `0.0`) و`max_tokens` (الحد الأقصى لعدد الرموز المُخرجة في كل استدعاء؛ القيمة الافتراضية `1024`). كما تنطبق أيضًا المعلمات العامة `credentials` و`model` (راجع [دالة الذكاء الاصطناعي](/ar/reference/functions/regular-functions/ai-functions)). [`Map(String, String)`](/ar/reference/data-types/map)

**القيمة المُعادة**

إحدى تسميات الفئات المقدَّمة، أو القيمة الافتراضية لنوع العمود (سلسلة فارغة) إذا فشل الطلب وكان `ai_function_throw_on_error` معطّلًا. [`String`](/ar/reference/data-types/string)

**أمثلة**

**تصنيف المشاعر**

```sql title=Query theme={null}
SELECT aiClassify('I love this product!', ['positive', 'negative', 'neutral'])
```

```response title=Response theme={null}
positive
```

**تصنيف عمود باستخدام بيانات اعتماد صريحة**

```sql title=Query theme={null}
SELECT body, aiClassify(body, ['bug', 'question', 'feature'], map('credentials', 'ai_text_credentials')) AS kind FROM issues LIMIT 5
```

<div id="aiEmbed">
  ## aiEmbed
</div>

أُضيف في: v26.6.0

ينشئ متجه تضمين للنص المُعطى باستخدام موفّر الذكاء الاصطناعي المُعَدّ.

ترسل الدالة النص إلى نقطة نهاية التضمين المُعَدّة وتُرجع المتجه الناتج بصيغة `Array(Float32)`.
ضمن كتلة واحدة من الصفوف، تُجمَّع المدخلات في دفعات يصل حجمها إلى
[`ai_function_embedding_max_batch_size`](/ar/reference/settings/session-settings/ai-function#ai_function_embedding_max_batch_size)
إدخالًا لكل طلب HTTP لتقليل الأعباء الإضافية لكل استدعاء.

تُؤخذ بيانات الاعتماد (مجموعة مسماة تحدد الموفّر ونقطة النهاية، وبشكل اختياري مفتاح واجهة برمجة تطبيقات)
من المفتاح `credentials` في خريطة المعلمات، أو من الإعداد
`ai_function_embedding_default_credentials` عندما لا تتضمنه الخريطة. لاحظ أن `aiEmbed` يستخدم
إعدادًا منفصلًا لبيانات الاعتماد الافتراضية عن دوال النص، لأن نقطة نهاية تضمين تختلف
عن نقطة نهاية الدردشة.

تكون `model` وسيطة موضعية مطلوبة (قيمة ثابتة من نوع `String`). وعلى خلاف دوال النص،
لا يقرأ `aiEmbed` قيمة `model` من المجموعة المسماة أو من خريطة المعلمات. وأي مجموعة مسماة
تعرّف `model` تُرفَض.

تطلب المعلمة الاختيارية `dimensions`، عند دعمها من قِبل النموذج (مثل `text-embedding-3-*` من OpenAI's)،
متجهًا بالحجم المحدد؛ وإلا فسيُعاد الحجم الأصلي للنموذج.

**البنية**

```sql theme={null}
aiEmbed(text, model[, params])
```

**اسم بديل**: `AIEmbed`

**الوسيطات**

* `text` — النص المراد تحويله إلى تضمين. [`String`](/ar/reference/data-types/string)
* `model` — اسم نموذج التضمين. [`const String`](/ar/reference/data-types/string)
* `params` — `Map(String, String)` ثابت اختياري للمعلمات. مفتاح خاص بهذه الدالة: `dimensions` (عدد أبعاد متجه الإخراج المطلوب؛ تعني القيمة `0` أو عدم تحديده استخدام الحجم الأصلي للنموذج). وينطبق أيضًا المعلمة العامة `credentials` (راجع [دوال الذكاء الاصطناعي](/ar/reference/functions/regular-functions/ai-functions)). [`Map(String, String)`](/ar/reference/data-types/map)

**القيمة المُعادة**

متجه التضمين، أو مصفوفة فارغة إذا كان الإدخال NULL أو فارغًا، أو إذا فشل الطلب وكان `ai_function_throw_on_error` معطّلًا، أو إذا تم تجاوز الحصة وكان `ai_function_throw_on_quota_exceeded` معطّلًا. [`Array(Float32)`](/ar/reference/data-types/array)

**أمثلة**

**تضمين سلسلة نصية واحدة (يمكن حذف `credentials` إذا كان الإعداد `ai_function_embedding_default_credentials` مضبوطًا)**

```sql title=Query theme={null}
SELECT aiEmbed('Hello world', 'text-embedding-3-small', map('credentials', 'ai_embedding_credentials'))
```

**مع تحديد الأبعاد صراحةً**

```sql title=Query theme={null}
SELECT aiEmbed('Hello world', 'text-embedding-3-small', map('credentials', 'ai_embedding_credentials', 'dimensions', '256'))
```

**إنشاء تضمينات لعمود من النصوص**

```sql title=Query theme={null}
SELECT aiEmbed(title, 'text-embedding-3-small', map('credentials', 'ai_embedding_credentials', 'dimensions', '256')) FROM articles LIMIT 10
```

<div id="aiExtract">
  ## aiExtract
</div>

أُضيف في: v26.4.0

يستخرج معلومات منظَّمة من نص غير منظَّم باستخدام موفّر LLM.

يمكن أن تكون الوسيطة الثالثة إما تعليمة بلغة طبيعية حرة الصياغة (مثل `'the main complaint'`) أو
مخططًا مُرمَّزًا بتنسيق JSON بالشكل `'{"field_a": "description of field a", "field_b": "description of field b"}'`.

في وضع التعليمات، تُرجِع الدالة القيمة المستخرجة كسلسلة نصية عادية، أو سلسلة فارغة إذا لم يُعثر على أي شيء.
وفي وضع المخطط، تُرجِع الدالة سلسلة كائن JSON تتطابق مفاتيحها مع المخطط المطلوب؛ وتكون الحقول المفقودة `null`.

تُؤخذ بيانات الاعتماد (وهي مجموعة مُسمّاة تحدد الموفّر والنموذج ونقطة النهاية، وبشكل اختياري مفتاح واجهة برمجة تطبيقات)
من المفتاح `credentials` في خريطة المعلمات الاختيارية، أو من الإعداد
`ai_function_text_default_credentials` عندما لا تتضمن الخريطة هذا المفتاح.

**البنية**

```sql theme={null}
aiExtract(text, instruction_or_schema[, params])
```

**الأسماء البديلة**: `AIExtract`

**الوسيطات**

* `text` — النص المراد استخراج المعلومات منه. [`String`](/ar/reference/data-types/string)
* `instruction_or_schema` — تعليمة استخراج بصياغة حرة، أو كائن JSON ثابت يصف الحقول المطلوب استخراجها. [`const String`](/ar/reference/data-types/string)
* `params` — `Map(String, String)` ثابت اختياري للمعلمات. المفاتيح الخاصة بالدالة هي: `temperature` (درجة حرارة أخذ العينات التي تتحكم في مستوى العشوائية؛ الافتراضي `0.0`) و`max_tokens` (الحد الأقصى لرموز الإخراج في كل استدعاء؛ الافتراضي `1024`). كما تنطبق أيضًا المعلمات العامة `credentials` و`model` (راجع [دوال الذكاء الاصطناعي](/ar/reference/functions/regular-functions/ai-functions)). [`Map(String, String)`](/ar/reference/data-types/map)

**القيمة المُعادة**

قيمة واحدة مستخرجة (وضع التعليمات) أو سلسلة JSON تمثل كائنًا (وضع المخطط). تُرجِع القيمة الافتراضية لنوع العمود (سلسلة فارغة) إذا فشل الطلب وكان `ai_function_throw_on_error` معطّلًا. [`String`](/ar/reference/data-types/string)

**أمثلة**

**تعليمة بصياغة حرة**

```sql title=Query theme={null}
SELECT aiExtract('The package arrived late and was damaged.', 'the main complaint')
```

```response title=Response theme={null}
late and damaged package
```

**استخراج المخطط**

```sql title=Query theme={null}
SELECT aiExtract(review, '{"sentiment": "positive, negative or neutral", "topic": "main topic of the review"}') FROM reviews LIMIT 5
```

<div id="aiFilter">
  ## aiFilter
</div>

أُضيف في: v26.8.0

يقيّم شرطًا مكتوبًا بلغة طبيعية على النص المحدد باستخدام موفّر LLM، ويُرجع قيمة منطقية (`UInt8`) مناسبة للاستخدام في `WHERE` و`PREWHERE` و`JOIN ... ON`.

تطلب الدالة من النموذج أن يردّ بـ `true` أو `false` فقط وبأحرف صغيرة. تُحوَّل الطلبات الفاشلة (عندما يكون
`ai_function_throw_on_error` معطّلًا) والاستجابات غير المعروفة إلى `0`، وبالتالي يُستبعد الصف.

**تحذير:** لا تعتمد على نتائج `aiFilter` دون تدقيق. قد تكون المسندات المستندة إلى LLM غير صحيحة
أو غير متسقة؛ لذا لا تستخدمها إلا عندما تكون الإيجابيات الكاذبة والسلبيات الكاذبة مقبولة.

تُؤخذ بيانات الاعتماد (مجموعة مسمّاة تحدد الموفّر والنموذج ونقطة النهاية، ومفتاح واجهة برمجة تطبيقات اختياريًا)
من المفتاح `credentials` في خريطة المعلمات الاختيارية، أو من إعداد
`ai_function_text_default_credentials` إذا لم تتضمنه الخريطة.

ملاحظة: يؤدي استخدام `aiFilter` في `JOIN ... ON` إلى تقييم LLM مرة واحدة لكل زوج مرشّح، وقد يكون ذلك مكلفًا.

**البنية**

```sql theme={null}
aiFilter(text, condition[, params])
```

**الأسماء المستعارة**: `AIFilter`

**الوسيطات**

* `text` — النص المراد تقييمه. [`String`](/ar/reference/data-types/string)
* `condition` — شرط ثابت باللغة الطبيعية يجب أن يستوفيه النص. [`String`](/ar/reference/data-types/string)
* `params` — `Map(String, String)` ثابت اختياري للمعلمات. المفاتيح الخاصة بالدالة هي: `temperature` (درجة حرارة أخذ العينات التي تتحكم في العشوائية؛ القيمة الافتراضية `0.0`) و`max_tokens` (الحد الأقصى لرموز الإخراج لكل استدعاء؛ القيمة الافتراضية `1024`). تنطبق أيضًا المعلمتان العامتان `credentials` و`model` (راجع [دوال الذكاء الاصطناعي](/ar/reference/functions/regular-functions/ai-functions)). [`Map(String, String)`](/ar/reference/data-types/map)

**القيمة المُعادة**

`1` إذا كان النص يطابق الشرط، و`0` في غير ذلك. تُرجع القيمة الافتراضية (`0`) إذا فشل الطلب وكان `ai_function_throw_on_error` معطّلًا. [`UInt8`](/ar/reference/data-types/int-uint)

**أمثلة**

**تصفية المراجعات الغاضبة**

```sql title=Query theme={null}
SELECT * FROM reviews WHERE aiFilter(body, 'the customer is angry about shipping')
```

**تصفية عمود باستخدام بيانات اعتماد مُحدَّدة صراحةً**

```sql title=Query theme={null}
SELECT body, aiFilter(body, 'describes a bug', map('credentials', 'ai_text_credentials')) AS is_bug FROM issues LIMIT 5
```

<div id="aiGenerate">
  ## aiGenerate
</div>

أُضيف في: v26.4.0

يُنشئ محتوى نصيًا حرًّا انطلاقًا من موجّه باستخدام موفّر LLM.

ترسل الدالة الموجّه إلى موفّر الذكاء الاصطناعي المُعَدّ وتُرجع النص الناتج.

تُؤخذ بيانات الاعتماد (وهي مجموعة مسماة تحدد الموفّر، والنموذج، ونقطة النهاية، واختياريًا مفتاح واجهة برمجة تطبيقات)
من المفتاح `credentials` في خريطة المعلمات الاختيارية، أو من الإعداد
`ai_function_text_default_credentials` عندما لا تتضمنه الخريطة.

يمكن لخريطة المعلمات الاختيارية أيضًا تعيين `system_prompt` (تعليمة توجّه سلوك النموذج،
مثل النبرة، والتنسيق، والدور)، و`temperature`، و`max_tokens`، و`model`. إذا لم يتم تعيين `system_prompt`،
فالقيمة الافتراضية هي: `You are a helpful assistant. Provide a clear and concise response.`

**البنية**

```sql theme={null}
aiGenerate(prompt[, params])
```

**الأسماء البديلة**: `AIGenerate`

**الوسيطات**

* `prompt` — الموجّه أو السؤال الذي يُرسله المستخدم إلى النموذج. [`String`](/ar/reference/data-types/string)
* `params` — قيمة ثابتة اختيارية من النوع `Map(String, String)` للمعلمات. المفاتيح الخاصة بالدالة هي: `temperature` (درجة حرارة التوليد التي تتحكم في العشوائية؛ والقيمة الافتراضية `0.7`)، و`max_tokens` (الحد الأقصى لعدد الرموز المميّزة في المخرجات لكل استدعاء؛ والقيمة الافتراضية `1024`)، و`system_prompt` (تعليمة ثابتة على مستوى النظام لتوجيه سلوك النموذج؛ والقيمة الافتراضية موجّه عام للمساعد). كما تنطبق أيضًا المعلمتان الشائعتان `credentials` و`model` (راجع [دوال الذكاء الاصطناعي](/ar/reference/functions/regular-functions/ai-functions)). [`Map(String, String)`](/ar/reference/data-types/map)

**القيمة المُعادة**

الاستجابة النصية المُولَّدة، أو القيمة الافتراضية لنوع العمود (سلسلة فارغة) إذا فشل الطلب وكان `ai_function_throw_on_error` معطّلًا. [`String`](/ar/reference/data-types/string)

**أمثلة**

**سؤال بسيط**

```sql title=Query theme={null}
SELECT aiGenerate('What is 2 + 2? Reply with just the number.')
```

```response title=Response theme={null}
4
```

**مع بيانات اعتماد صريحة وموجّه النظام**

```sql title=Query theme={null}
SELECT aiGenerate('Explain ClickHouse', map('credentials', 'ai_text_credentials', 'system_prompt', 'You are a database expert. Be concise.'))
```

**لخّص قيم العمود**

```sql title=Query theme={null}
SELECT article_title, aiGenerate(concat('Summarize in one sentence: ', article_body)) AS summary FROM articles LIMIT 5
```

<div id="aiRedact">
  ## aiRedact
</div>

أُضيف في: v26.8.0

يكتشف معلومات تحديد الهوية الشخصية (PII) في النص المعطى ويحجبها باستخدام موفّر LLM.

<Warning>
  ينفّذ `aiRedact` اكتشاف معلومات تحديد الهوية الشخصية وحجبها بأفضل جهد باستخدام LLM، ولا يُعتمد على ناتجه.
  يعتمد اكتشاف معلومات تحديد الهوية الشخصية وإزالتها على النموذج المختار والموجّه والإدخال؛ فقد
  يفوّت النموذج المعرّفات أو يحجبها جزئيًا فقط أو يغيّر النص المحيط بها. يعمل بأفضل صورة مع
  النصوص الإنجليزية السليمة؛ وقد تكون النتائج أسوأ مع اللغات الأخرى أو النصوص التي تتضمن الكثير من الأخطاء الإملائية
  أو أخطاء علامات الترقيم أو الأخطاء النحوية. لا يضمن `aiRedact` خلو ناتجه من معلومات تحديد الهوية الشخصية، ويجب ألا
  يُعامل وحده كآلية آمنة أو كافية لإخفاء الهوية. راجع الناتج دائمًا للتأكد من أنه
  يلتزم بسياسات مؤسستك المتعلقة بخصوصية البيانات والامتثال قبل كشف البيانات لأطراف غير موثوقة.
</Warning>

يُستبدل كل نطاق مكتشف من معلومات تحديد الهوية الشخصية برمز حجب (`[REDACTED]` افتراضيًا، ويمكن تهيئته عبر
المعلمة `replacement`). تقيّد مصفوفة `categories` أنواع معلومات تحديد الهوية الشخصية التي تُحجب؛ أما المصفوفة الفارغة
فتستخدم مجموعة افتراضية من الفئات الشائعة (الاسم، البريد الإلكتروني، رقم الهاتف، العنوان، بطاقة الائتمان، عنوان IP).

يوجّه `aiRedact` النموذج إلى تغيير نطاقات معلومات تحديد الهوية الشخصية المكتشفة فقط، لكن الحفاظ على النص المحيط بها
يتم بأفضل جهد، وقد يظل النموذج يغيّره (انظر التحذير أعلاه). تُحوَّل أيضًا محارف التحكم، باستثناء علامة الجدولة
والسطر الجديد وعودة العربة، إلى مسافات قبل إرسال الطلب، لذلك لا يكون الناتج
مطابقًا على مستوى البايت للمدخلات التي تحتوي عليها.

لأن `aiRedact` يعيد النص الكامل للإدخال بعد استبدال معلومات تحديد الهوية الشخصية، فإن طول الناتج يقارب طول الإدخال.
اضبط `max_tokens` (القيمة الافتراضية `1024`) على قيمة أعلى من طول الإدخال بالرموز المميزة؛ إذ ستكون الاستجابة المقتطعة بسبب حد منخفض جدًا
غير مكتملة.

**البنية**

```sql theme={null}
aiRedact(text, categories[, params])
```

**الأسماء المستعارة**: `AIRedact`

**الوسيطات**

* `text` — النص المراد حجبه. [`String`](/ar/reference/data-types/string)
* `categories` — قائمة ثابتة بفئات معلومات التعريف الشخصية المراد حجبها (مثل `['name', 'ssn', 'credit_card']`). تستخدم المصفوفة الفارغة مجموعة افتراضية من الفئات الشائعة (الاسم، والبريد الإلكتروني، ورقم الهاتف، والعنوان، وبطاقة الائتمان، وعنوان IP). [`Array(String)`](/ar/reference/data-types/array)
* `params` — `Map(String, String)` اختيارية وثابتة للمعلمات. المفاتيح الخاصة بالدالة هي: `temperature` (درجة حرارة أخذ العينات التي تتحكم في العشوائية؛ القيمة الافتراضية `0.0`)، و`max_tokens` (الحد الأقصى لرموز الإخراج لكل استدعاء؛ القيمة الافتراضية `1024` — بما أن `aiRedact` يعيد النص كاملاً، فاضبطها على قيمة أكبر من طول الإدخال بالرموز، وإلا فقد تكون الاستجابة مقتطعة وغير مكتملة)، و`replacement` (الرمز الذي يحل محل كل نطاق مكتشف من معلومات التعريف الشخصية؛ القيمة الافتراضية `[REDACTED]`). تنطبق أيضًا المعلمتان العامتان `credentials` و`model` (راجع [دوال الذكاء الاصطناعي](/ar/reference/functions/regular-functions/ai-functions)). [`Map(String, String)`](/ar/reference/data-types/map)

**القيمة المعادة**

النص بعد استبدال معلومات التعريف الشخصية المكتشفة برمز الحجب، أو القيمة الافتراضية لنوع العمود (سلسلة فارغة) إذا فشل الطلب وكان `ai_function_throw_on_error` معطلاً. [`String`](/ar/reference/data-types/string)

**أمثلة**

**حجب فئات محددة**

```sql title=Query theme={null}
SELECT aiRedact('Purchase was done by customer John Doe with email test@test.org', ['email', 'credit_card', 'name'])
```

```response title=Response theme={null}
Purchase was done by customer [REDACTED] with email [REDACTED]
```

**احجب فئات معلومات تحديد الهوية الشخصية الافتراضية باستخدام رمز مميز مخصص**

```sql title=Query theme={null}
SELECT aiRedact(body, [], map('replacement', '***')) FROM tickets LIMIT 5
```

<div id="aiSimilarity">
  ## aiSimilarity
</div>

أُضيف في: v26.8.0

يحسب التشابه الدلالي بين نصّين باستخدام موفّر التضمين المُهيّأ.

يحسب التضمينات المتجهية لكلا النصّين ويُرجع
[تشابه جيب التمام](https://en.wikipedia.org/wiki/Cosine_similarity). تُمنح درجة `-1` لمتجهات التضمين
المتعاكسة، ويعني ذلك دلاليًا أن النصوص ذات الدرجات التي تقترب من `-1` متعاكسة في
المعنى. وتعني درجة `0` أن المتجهات متعامدة، أي غير مرتبطة دلاليًا. وأخيرًا، تعني درجة `1`
أن متجهات التضمين تشير في الاتجاه نفسه، وأن النصوص ذات الدرجات التي تقترب من `1`
متشابهة في المعنى. وهو مكمّل `cosineDistance` للتضمينات
نفسها (`aiSimilarity = 1 - cosineDistance(embedding1, embedding2)`).

تتطابق عملية التجميع على دفعات وبيانات الاعتماد والمعلمة `dimensions` مع `aiEmbed`، بما في ذلك
إعداد بيانات الاعتماد الافتراضية `ai_function_embedding_default_credentials`.

كما في `aiEmbed`، يُعدّ `model` وسيطًا موضعيًا مطلوبًا (قيمة ثابتة من نوع `String`) ولا يُقرأ من
المجموعة المُسمّاة أو خريطة المعلمات.

**البنية**

```sql theme={null}
aiSimilarity(text1, text2, model[, params])
```

**اسم بديل**: `AISimilarity`

**الوسائط**

* `text1` — النص الأول. [`String`](/ar/reference/data-types/string)
* `text2` — النص الثاني. [`String`](/ar/reference/data-types/string)
* `model` — اسم نموذج التضمين. [`const String`](/ar/reference/data-types/string)
* `params` — `Map(String, String)` ثابت اختياري للمعلمات. المفتاح الخاص بالدالة هو: `dimensions` (عدد الأبعاد المستهدف للتضمينات؛ تشير القيمة `0` أو عدم تحديده إلى الحجم الأصلي للنموذج). ينطبق أيضًا المعلمة العامة `credentials` (راجع [دوال الذكاء الاصطناعي](/ar/reference/functions/regular-functions/ai-functions)). [`Map(String, String)`](/ar/reference/data-types/map)

**القيمة المُعادة**

تشابه جيب التمام ضمن `[-1, 1]`، أو NULL إذا كان أحد النصين NULL أو فارغًا، أو إذا فشل طلب تضمين وكانت `ai_function_throw_on_error` معطّلة، أو إذا تم تجاوز حصة وكانت `ai_function_throw_on_quota_exceeded` معطّلة. [`Nullable(Float32)`](/ar/reference/data-types/nullable)

**أمثلة**

**قارن بين سلسلتين (`credentials` يمكن حذفها إذا كان الإعداد `ai_function_embedding_default_credentials` مضبوطًا)**

```sql title=Query theme={null}
SELECT aiSimilarity('cat', 'kitten', 'text-embedding-3-small', map('credentials', 'ai_embedding_credentials'))
```

**رتّب المراجعات حسب مدى تشابهها مع استعلام**

```sql title=Query theme={null}
SELECT review FROM product_reviews ORDER BY aiSimilarity(review, 'It works well under rain', 'text-embedding-3-small') DESC LIMIT 100
```

**إزالة التكرار الدلالي باستخدام ربط ذاتي**

```sql title=Query theme={null}
SELECT a.id, b.id FROM docs a, docs b WHERE a.id < b.id AND aiSimilarity(a.title, b.title, 'text-embedding-3-small') > 0.9
```

<div id="aiTranslate">
  ## aiTranslate
</div>

قُدِّم في: v26.4.0

يترجم النص المُعطى إلى اللغة الهدف المحددة باستخدام موفّر LLM.

يمكن تمرير تعليمات إضافية خاصة بالأسلوب أو اللهجة عبر المفتاح `instructions` في خريطة المعلمات (على سبيل المثال: `'الإبقاء على المصطلحات التقنية دون ترجمة'`).

تُؤخذ بيانات الاعتماد (مجموعة مسماة تحدد الموفّر والنموذج ونقطة النهاية، ومفتاح واجهة برمجة تطبيقات اختياريًا)
من المفتاح `credentials` في خريطة المعلمات الاختيارية، أو من
الإعداد `ai_function_text_default_credentials` إذا لم تتضمنه الخريطة.

**البنية**

```sql theme={null}
aiTranslate(text, target_language[, params])
```

**الأسماء البديلة**: `AITranslate`

**الوسيطات**

* `text` — النص المراد ترجمته. [`String`](/ar/reference/data-types/string)
* `target_language` — اسم اللغة الهدف أو رمز BCP-47 لها (مثل `'French'` و`'es-MX'`). [`String`](/ar/reference/data-types/string)
* `params` — `Map(String, String)` ثابت اختياري للمعلمات. المفاتيح الخاصة بهذه الدالة هي: `temperature` (درجة حرارة أخذ العينات التي تتحكم في العشوائية؛ والقيمة الافتراضية `0.3`)، و`max_tokens` (الحد الأقصى لعدد التوكنات الناتجة في كل استدعاء؛ والقيمة الافتراضية `1024`)، و`instructions` (تعليمات إضافية للمترجم تتعلق بالأسلوب أو اللهجة). كما تنطبق أيضًا المعلمتان الشائعتان `credentials` و`model` (راجع [دوال الذكاء الاصطناعي](/ar/reference/functions/regular-functions/ai-functions)). [`Map(String, String)`](/ar/reference/data-types/map)

**القيمة المُعادة**

النص المترجم، أو القيمة الافتراضية لنوع العمود (سلسلة فارغة) إذا فشل الطلب وكان `ai_function_throw_on_error` معطّلًا. [`String`](/ar/reference/data-types/string)

**أمثلة**

**الترجمة إلى الفرنسية**

```sql title=Query theme={null}
SELECT aiTranslate('Hello, world!', 'French')
```

```response title=Response theme={null}
Bonjour le monde!
```

**ترجم إلى اليابانية مع تعليمات الأسلوب**

```sql title=Query theme={null}
SELECT aiTranslate(body, 'Japanese', map('instructions', 'Use polite form (desu/masu)')) FROM articles LIMIT 5
```
