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

# إعدادات الجلسة لـ ai_function_*

> إعدادات الجلسة في ClickHouse ضمن المجموعة المُولَّدة ai_function_*.

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            ميزة تجريبية
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["الإصدار", "القيمة الافتراضية", "التعليق"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        سجل الإصدارات
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>النوع</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>القيمة الافتراضية</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          يمكن تغييره دون إعادة التشغيل
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

هذه الإعدادات متوفّرة في [system.settings](/ar/reference/system-tables/settings)، وقد أُنشئت تلقائيًا من [الشفرة المصدرية](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="ai_function_allow_insecure_endpoint">
  ## ai\_function\_allow\_insecure\_endpoint
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "0"},{"label": "ترفض دوال الذكاء الاصطناعي الآن افتراضيًا نقاط النهاية غير الآمنة (http) للمضيفين البعيدين."}]}]} />

إذا كانت القيمة false (وهي الافتراضية)، ترفض دوال الذكاء الاصطناعي استخدام `endpoint` ضمن مجموعة مسماة إذا كان سيرسل prompt ومفاتيح واجهة برمجة تطبيقات عبر اتصال غير مشفر إلى مضيف بعيد: إذ يُرفض أي endpoint غير HTTPS لا يشير مضيفه إلى عنوان loopback مع ظهور استثناء. ويُسمح دائمًا بنقاط النهاية التي تشير إلى loopback (مثل خادم نموذج محلي على `http://localhost`). اضبط القيمة على true للسماح بنقاط نهاية `http://` غير المشفرة على المضيفين البعيدين.

<div id="ai_function_embedding_default_credentials">
  ## ai\_function\_embedding\_default\_credentials
</div>

<ExperimentalBadge />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": ""},{"label": "إعداد جديد"}]}]} />

اسم المجموعة المسماة التي تستخدمها دوال التضمين (`aiEmbed`, `aiSimilarity`) عندما لا يمرّر الاستدعاء `credentials` ضمن خريطة المعلمات الخاصة به. وتعني القيمة الفارغة عدم وجود قيمة افتراضية: لذا يجب على مثل هذه الاستدعاءات تمرير `credentials` صراحةً. تأخذ هذه الدوال ‏`model` بوصفه وسيطًا موضعيًا مطلوبًا، وليس من المجموعة المسماة. وقد أُبقي هذا الإعداد منفصلًا عن `ai_function_text_default_credentials` لأن نقطة نهاية التضمينات تختلف عن نقطة نهاية الدردشة.

<div id="ai_function_embedding_max_batch_size">
  ## ai\_function\_embedding\_max\_batch\_size
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="NonZeroUInt64" default_value="100" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "100"},{"label": "إعداد جديد"}]}]} />

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

<div id="ai_function_max_api_calls_per_query">
  ## ai\_function\_max\_api\_calls\_per\_query
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="1000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1000"},{"label": "تقييد عدد استدعاءات HTTP الصادرة لدوال الذكاء الاصطناعي لكل استعلام افتراضيًا (كان سابقًا 0، أي بلا حد)."}]}, {"id": "row-2","items": [{"label": "26.4"},{"label": "0"},{"label": "إعداد جديد"}]}]} />

الحد الأقصى لعدد طلبات HTTP التي يمكن لدوال الذكاء الاصطناعي إرسالها لكل استعلام. اضبطه على 0 لتعطيله.

<div id="ai_function_max_input_tokens_per_query">
  ## ai\_function\_max\_input\_tokens\_per\_query
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="1000000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "1000000"},{"label": "إعداد جديد"}]}]} />

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

لا يُفرَض هذا الحد إلا على الموفّرين الذين يبلّغون عن كائن `usage` في استجابتهم (OpenAI وAnthropic وvLLM). أما الموفّرون الذين لا يضمّنون معلومات استخدام الرموز (وخاصة HuggingFace TEI) فيؤدي ذلك إلى بقاء العداد عند 0 — استخدم `ai_function_max_api_calls_per_query` بدلًا من ذلك لتقييد مثل هذه الاستدعاءات.

<div id="ai_function_max_output_tokens_per_query">
  ## ai\_function\_max\_output\_tokens\_per\_query
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="500000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "500000"},{"label": "إعداد جديد"}]}]} />

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

لا يُطبَّق هذا الحد إلا على الموفّرين الذين يبلّغون عن كائن `usage` في استجابتهم (OpenAI وAnthropic وvLLM). ولا ينطبق على دوال التضمين (`aiEmbed` و`aiSimilarity`)، لأنها لا تنتج رموز إخراج مطلقًا.

<div id="ai_function_max_retries">
  ## ai\_function\_max\_retries
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "إعداد جديد"}]}]} />

الحد الأقصى لعدد محاولات إعادة المحاولة عند حدوث أخطاء عابرة لكل طلب منفرد إلى واجهة برمجة تطبيقات. تستخدم كل محاولة إعادة تأخيرًا أسيًا يبدأ من `ai_function_retry_initial_delay_ms`.

<div id="ai_function_request_timeout_sec">
  ## ai\_function\_request\_timeout\_sec
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="60" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "60"},{"label": "إعداد جديد"}]}]} />

المهلة بالثواني لطلبات HTTP الفردية التي تُجريها وظائف الذكاء الاصطناعي (عمليات إكمال AI Chat واستدعاءات واجهة برمجة التطبيقات للتضمين). إذا لم يكتمل الطلب خلال هذه المدة، فسيُعتبر فاشلًا وقد يُعاد حاولته وفقًا للإعداد `ai_function_max_retries`.

<div id="ai_function_retry_initial_delay_ms">
  ## ai\_function\_retry\_initial\_delay\_ms
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="1000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "1000"},{"label": "إعداد جديد"}]}]} />

التأخير الأولي، بالمللي ثانية، قبل أول إعادة محاولة لطلب واجهة برمجة تطبيقات الفاشل الخاص بدالة AI. ويتضاعف التأخير مع كل محاولة لاحقة (تراجع أُسّي). على سبيل المثال، مع الإعدادات الافتراضية: 1000ms، 2000ms، 4000ms.

<div id="ai_function_text_default_credentials">
  ## ai\_function\_text\_default\_credentials
</div>

<ExperimentalBadge />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": ""},{"label": "إعداد جديد"}]}]} />

اسم المجموعة المسماة التي تستخدمها دوال الذكاء الاصطناعي النصية (`aiGenerate`, `aiClassify`, `aiFilter`, `aiExtract`, `aiTranslate`, `aiRedact`) عندما لا يمرّر الاستدعاء `credentials` ضمن خريطة المعلمات الخاصة به. وتعني القيمة الفارغة عدم وجود قيمة افتراضية: لذا يجب على هذه الاستدعاءات تمرير `credentials` صراحةً. وتختلف نقطة نهاية إكمالات الدردشة عن نظيرتها للتضمينات، لذلك فهذا الإعداد منفصل عن `ai_function_embedding_default_credentials`.

<div id="ai_function_throw_on_error">
  ## ai\_function\_throw\_on\_error
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "1"},{"label": "إعداد جديد"}]}]} />

إذا كانت القيمة true (وهي القيمة الافتراضية)، فإن استدعاء AI function الذي يفشل نهائيًا بعد استنفاد جميع محاولات إعادة المحاولة يُنهي الاستعلام مع إطلاق استثناء. وإذا كانت القيمة false، فإن الصف الذي فشل يتلقى القيمة الافتراضية لنوع العمود (سلسلة فارغة لـ String)، وتستمر المعالجة.

<div id="ai_function_throw_on_quota_exceeded">
  ## ai\_function\_throw\_on\_quota\_exceeded
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "1"},{"label": "إعداد جديد"}]}]} />

إذا كانت القيمة true (وهي القيمة الافتراضية)، فإن تجاوز حد الحصة لدالة AI (`ai_function_max_input_tokens_per_query` أو `ai_function_max_output_tokens_per_query` أو `ai_function_max_api_calls_per_query`) يُنهي الاستعلام مع رفع استثناء. وإذا كانت false، فستحصل الصفوف المتبقية على القيمة الافتراضية لنوع العمود (سلسلة فارغة لنوع String).
