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

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

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

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <span>Beta</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>ميزة Beta</span>
        </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).

## ai\_function\_allow\_insecure\_endpoint

<BetaBadge />

<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://` غير المشفرة على المضيفين البعيدين.

## ai\_function\_embedding\_default\_credentials

<BetaBadge />

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

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

## ai\_function\_embedding\_max\_batch\_size

<BetaBadge />

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

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

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

## ai\_function\_max\_api\_calls\_per\_query

<BetaBadge />

<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 التي يمكن لدوال الذكاء الاصطناعي إرسالها لكل استعلام. يُفرض بشكل مستقل بواسطة كل خادم وجزء من الاستعلام: ضمن سياق تنفيذ واحد، يكون حدًا دقيقًا مشتركًا بين كل دالة ذكاء اصطناعي وكتلة وخيط فيه، لكن يمكن للاستعلام الموزع (عبر الأجزاء أو أجزاء النسخ المتماثلة المتوازية) إرسال ما يصل إلى هذا العدد من الطلبات لكل جزء بيانات/جزء. يجب ضبطه في استعلام ذي المستوى الأعلى — ويُتجاهل تجاوز `SETTINGS` في استعلام فرعي. اضبطه على 0 لتعطيله.

## ai\_function\_max\_input\_tokens\_per\_query

<BetaBadge />

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

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

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

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

## ai\_function\_max\_output\_tokens\_per\_query

<BetaBadge />

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

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

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

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

## ai\_function\_max\_retries

<BetaBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "1"},{"label": "تُعاد محاولة خطأ عابر في واجهة برمجة تطبيقات مرة واحدة افتراضيًا، بحيث لا يؤدي خطأ 429 أو 5xx واحد من موفّر إلى فشل الاستعلام."}]}, {"id": "row-2","items": [{"label": "26.4"},{"label": "0"},{"label": "إعداد جديد"}]}]} />

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

## ai\_function\_request\_timeout\_sec

<BetaBadge />

<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`.

## ai\_function\_retry\_initial\_delay\_ms

<BetaBadge />

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

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

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

## ai\_function\_text\_default\_credentials

<BetaBadge />

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

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

## ai\_function\_throw\_on\_error

<BetaBadge />

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

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

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

## ai\_function\_throw\_on\_quota\_exceeded

<BetaBadge />

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

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

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