Gateway
الإعداد — الأدوات والموفّرون المخصّصون
مفاتيح الإعداد tools.* وإعداد المزوّد المخصّص / عنوان URL الأساسي. للوكلاء والقنوات ومفاتيح الإعداد الأخرى ذات المستوى الأعلى، راجع مرجع الإعدادات.
الأدوات
ملفات تعريف الأدوات
يحدّد tools.profile قائمة سماح أساسية قبل tools.allow/tools.deny:
| ملف التعريف | يتضمن |
|---|---|
minimal |
session_status فقط |
coding |
group:fs، group:runtime، group:web، group:sessions، group:memory، cron، get_goal، create_goal، update_goal، update_plan، skill_workshop، image، image_generate، music_generate، video_generate |
messaging |
group:messaging، sessions_list، sessions_history، sessions_send، session_status |
full |
بلا قيود (كما لو لم يكن محددًا) |
يسمح coding وmessaging أيضًا ضمنيًا بـ bundle-mcp (خوادم MCP التي تم إعدادها).
مجموعات الأدوات
| المجموعة | الأدوات |
|---|---|
group:runtime |
exec، process، code_execution (يُقبل bash كاسم بديل لـ exec) |
group:fs |
read، write، edit، apply_patch |
group:sessions |
sessions_list، sessions_history، sessions_send، sessions_spawn، sessions_yield، subagents، session_status، spawn_task، dismiss_task |
group:memory |
memory_search، memory_get |
group:web |
web_search، x_search، web_fetch |
group:ui |
browser، canvas |
group:automation |
heartbeat_respond، cron، gateway |
group:messaging |
message |
group:nodes |
nodes، computer |
group:agents |
agents_list، get_goal، create_goal، update_goal، update_plan، skill_workshop |
group:media |
image، image_generate، music_generate، video_generate، tts |
group:openclaw |
جميع الأدوات المضمّنة أعلاه باستثناء read/write/edit/apply_patch/exec/process/canvas (لا تشمل أدوات الإضافات) |
group:plugins |
الأدوات المملوكة للإضافات المحمّلة، بما فيها خوادم MCP التي تم إعدادها والمكشوفة عبر bundle-mcp |
تتيح spawn_task لوكيل برمجة اقتراح عمل متابعة مؤكَّد من دون بدئه. تعرض واجهة التحكم العنوان والملخص على هيئة شارة قابلة للتنفيذ؛ وتعرض TUI مدعومة من Gateway مطالبة تفاعلية مكافئة. يؤدي قبول أيٍّ منهما إلى إنشاء جلسة جديدة في شجرة عمل مُدارة وإرسال المطالبة الكاملة إليها، بينما تستمر الجولة الحالية. تسحب dismiss_task اقتراحًا لا يزال معلّقًا باستخدام task_id المؤقت الذي أعادته spawn_task.
لا تُعرض الأدوات إلا عندما يكون سطح المشغّل الذي بدأ العملية قادرًا على استقبال أحداث اقتراح المهام من Gateway والتعامل معها. لا تتلقاها جلسات القنوات ولا جلسات TUI المحلية/المضمّنة؛ وتحتاج وسائل نقل القنوات إلى إجراء مهام نمطي قابل للنقل قبل أن تتمكن من إتاحة هذا التدفق بأمان. تكون الاقتراحات محلية للعملية وتختفي عند إعادة تشغيل Gateway. تظل الأداتان ضمن ملف التعريف coding والمجموعة group:sessions، ولذلك تضبطهما سياسة tools.allow وtools.deny العادية تلقائيًا عندما يدعمهما السطح.
أدوات MCP والإضافات ضمن سياسة أدوات البيئة المعزولة
تُكشف خوادم MCP التي تم إعدادها بوصفها أدوات مملوكة للإضافات تحت معرّف الإضافة bundle-mcp. يمكن لملفات تعريف الأدوات العادية السماح بها، لكن tools.sandbox.tools تمثّل بوابة إضافية للجلسات المعزولة. إذا كان وضع البيئة المعزولة هو "all" أو "non-main"، فأدرج أحد الإدخالات التالية في قائمة سماح أدوات البيئة المعزولة عندما ينبغي أن تكون أدوات MCP/الإضافات مرئية:
bundle-mcpلخوادم MCP المُدارة بواسطة OpenClaw منmcp.servers- معرّف الإضافة لإضافة أصلية محددة
group:pluginsلجميع الأدوات المملوكة للإضافات المحمّلة- أسماء أدوات خادم MCP الدقيقة أو أنماط الخوادم العامة مثل
outlook__send_mailأوoutlook__*عندما تريد خادمًا واحدًا فقط
تستخدم أنماط الخوادم العامة بادئة خادم MCP الآمنة للمزوّد، وليس بالضرورة مفتاح mcp.servers الخام. تتحول الأحرف غير التابعة للنطاق [A-Za-z0-9_-] إلى -، وتحصل الأسماء التي لا تبدأ بحرف على البادئة mcp-، وقد تُقتطع البادئات الطويلة أو المكررة أو تُلحق بها لاحقة؛ فعلى سبيل المثال، يستخدم mcp.servers["Outlook Graph"] نمطًا عامًا مثل outlook-graph__*.
{ agents: { defaults: { sandbox: { mode: "all" } } }, mcp: { servers: { outlook: { command: "node", args: ["./outlook-mcp.js"] }, }, }, tools: { sandbox: { tools: { alsoAllow: ["web_search", "web_fetch", "memory_search", "memory_get", "bundle-mcp"], }, }, },}من دون هذا الإدخال في طبقة البيئة المعزولة، قد يستمر تحميل خادم MCP بنجاح، بينما تُرشّح أدواته قبل طلب المزوّد. استخدم openclaw doctor لاكتشاف هذا النمط لخوادم MCP المُدارة بواسطة OpenClaw في mcp.servers. تستخدم خوادم MCP المحمّلة من بيانات الإضافات المضمّنة أو ملف Claude .mcp.json بوابة البيئة المعزولة نفسها، لكن هذا التشخيص لا يسرد هذه المصادر حتى الآن؛ استخدم إدخالات قائمة السماح نفسها إذا اختفت أدواتها في الجولات المعزولة.
tools.codeMode
يفعّل tools.codeMode سطح وضع البرمجة العام في OpenClaw. عند تفعيله
لتشغيل يتضمن أدوات، تنتقل أدوات OpenClaw العادية خلف جسر كتالوج tools.*
داخل البيئة المعزولة، وتصبح أدوات MCP متاحة عبر نطاق الأسماء MCP
المُنشأ. يرى النموذج عادةً exec وwait؛ وتظل الأدوات مثل computer
التي لا يمكن لنتائجها المنظّمة عبور الجسر المقتصر على JSON مباشرةً.
{ tools: { codeMode: { enabled: true, }, },}يُقبل الاختصار أيضًا:
{ tools: { codeMode: true },}تُكشف تعريفات MCP عبر سطح ملفات API الافتراضي للقراءة فقط في
وضع البرمجة. يمكن لشفرة الضيف استدعاء API.list("mcp") و
API.read("mcp/<server>.d.ts") لفحص التواقيع المشابهة لـ TypeScript قبل
استدعاء MCP.<server>.<tool>(). راجع وضع البرمجة للاطلاع على
عقد وقت التشغيل والقيود وخطوات تصحيح الأخطاء.
tools.allow / tools.deny
سياسة عامة للسماح بالأدوات أو منعها (المنع له الأولوية). لا تراعي حالة الأحرف، وتدعم أحرف البدل *. تُطبَّق حتى عندما يكون وضع الحماية Docker متوقفًا.
{ tools: { deny: ["browser", "canvas"] },}يُعدّ write وapply_patch معرّفي أداتين منفصلتين. يؤدي allow: ["write"] أيضًا إلى تمكين apply_patch للنماذج المتوافقة، لكن deny: ["write"] لا يمنع apply_patch. لمنع جميع تعديلات الملفات، امنع group:fs أو أدرج كل أداة تعديل صراحةً:
{ tools: { deny: ["write", "edit", "apply_patch"] },}tools.byProvider
يفرض قيودًا إضافية على الأدوات لموفّرين أو نماذج محددة. الترتيب: ملف التعريف الأساسي ← ملف تعريف الموفّر ← السماح/المنع.
{ tools: { profile: "coding", byProvider: { "google-antigravity": { profile: "minimal" }, "openai/gpt-5.4": { allow: ["group:fs", "sessions_list"] }, }, },}tools.toolsBySender
يفرض قيودًا على الأدوات لهوية طالب محددة. يمثّل ذلك طبقة دفاع إضافية فوق التحكم في الوصول إلى القناة؛ ويجب أن تأتي قيم المرسل من مهايئ القناة، لا من نص الرسالة.
{ tools: { toolsBySender: { "channel:discord:1234567890123": { alsoAllow: ["group:fs"] }, "id:guest-user-id": { deny: ["group:runtime", "group:fs"] }, "*": { deny: ["exec", "process", "write", "edit", "apply_patch"] }, }, },}تستخدم المفاتيح بادئات صريحة: channel:<channelId>:<senderId> أو id:<senderId> أو e164:<phone> أو username:<handle> أو name:<displayName> أو "*". معرّفات القنوات هي معرّفات OpenClaw القياسية؛ وتُطبَّع الأسماء البديلة مثل teams إلى msteams. تُقبل المفاتيح القديمة التي لا تحتوي على بادئة بصفتها id: فقط. ترتيب المطابقة هو القناة+المعرّف، ثم المعرّف، ثم e164، ثم اسم المستخدم، ثم الاسم، وأخيرًا حرف البدل.
يتجاوز agents.list[].tools.toolsBySender الخاص بكل وكيل مطابقة المرسل العامة عند تطابقه، حتى مع سياسة فارغة {}.
tools.elevated
يتحكم في الوصول المرتفع لتنفيذ الأوامر خارج وضع الحماية:
{ tools: { elevated: { enabled: true, allowFrom: { whatsapp: ["+15555550123"], discord: ["1234567890123", "987654321098765432"], }, }, },}- لا يمكن للتجاوز الخاص بكل وكيل (
agents.list[].tools.elevated) سوى فرض قيود إضافية. - يخزّن
/elevated on|off|ask|fullالحالة لكل جلسة؛ وتنطبق التوجيهات المضمّنة على رسالة واحدة. - يتجاوز
execالمرتفع وضع الحماية ويستخدم مسار الخروج المُعدّ (gatewayافتراضيًا، أوnodeعندما يكون هدف التنفيذ هوnode).
tools.exec
{ tools: { exec: { backgroundMs: 10000, timeoutSec: 1800, cleanupMs: 1800000, approvalRunningNoticeMs: 10000, notifyOnExit: true, notifyOnExitEmptySuccess: false, commandHighlighting: false, applyPatch: { enabled: true, allowModels: ["gpt-5.6-sol"], }, }, },}القيم المعروضة هي القيم الافتراضية باستثناء applyPatch.allowModels (تكون فارغة/غير معيّنة افتراضيًا، ما يعني أنه يجوز لأي نموذج متوافق استخدام apply_patch). يصدر approvalRunningNoticeMs إشعارًا باستمرار التشغيل عندما يطول تنفيذ أمر مستند إلى موافقة؛ وتعطّله القيمة 0.
tools.loopDetection
تكون فحوصات أمان حلقات الأدوات معطّلة افتراضيًا. عيّن enabled: true لتفعيل الاكتشاف. يمكن تعريف الإعدادات عموميًا في tools.loopDetection وتجاوزها لكل وكيل في agents.list[].tools.loopDetection.
{ tools: { loopDetection: { enabled: true, historySize: 30, warningThreshold: 10, unknownToolThreshold: 10, criticalThreshold: 20, globalCircuitBreakerThreshold: 30, detectors: { genericRepeat: true, knownPollNoProgress: true, pingPong: true, }, postCompactionGuard: { windowSize: 3, }, }, },}historySizenumberالحد الأقصى لسجل استدعاءات الأدوات المحتفظ به لتحليل الحلقات.
warningThresholdnumberعتبة نمط التكرار دون تقدم لإصدار التحذيرات.
unknownToolThresholdnumberيحظر الاستدعاءات المتكررة لاسم الأداة غير المتاحة أو غير المعروفة نفسه بعد هذا العدد من الإخفاقات.
criticalThresholdnumberعتبة تكرار أعلى لحظر الحلقات الحرجة.
globalCircuitBreakerThresholdnumberعتبة إيقاف صارمة لأي تشغيل لا يحرز تقدمًا.
detectors.genericRepeatbooleanيصدر تحذيرًا عند تكرار الاستدعاءات بالأداة نفسها والوسائط نفسها.
detectors.knownPollNoProgressbooleanيصدر تحذيرًا أو يحظر عند استخدام أدوات الاستطلاع المعروفة (process.poll وcommand_status وما إلى ذلك).
detectors.pingPongbooleanيصدر تحذيرًا أو يحظر عند حدوث أنماط زوجية متناوبة لا تحرز تقدمًا.
postCompactionGuard.windowSizenumberعدد المحاولات التي يظل خلالها الحارس مفعّلًا بعد Compaction التلقائي؛ ويُجهض التشغيل إذا كرر الوكيل المجموعة نفسها (الأداة، الوسائط، النتيجة) ضمن تلك النافذة.
tools.web
{ tools: { web: { search: { enabled: true, apiKey: "brave_api_key", // or BRAVE_API_KEY env (Brave provider) maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, provider: "firecrawl", // optional; omit for auto-detect maxChars: 20000, maxCharsCap: 20000, maxResponseBytes: 750000, timeoutSeconds: 30, cacheTtlMinutes: 15, maxRedirects: 3, readability: true, userAgent: "custom-ua", }, }, },}القيم المعروضة هي القيم الافتراضية باستثناء provider وuserAgent. تُقيَّد قيمة maxResponseBytes بالنطاق 32000–10000000؛ وتُقيَّد قيمة maxChars بقيمة maxCharsCap (ارفع maxCharsCap للسماح باستجابات أكبر).
tools.media
يضبط فهم الوسائط الواردة (الصور/الصوت/الفيديو):
{ tools: { media: { concurrency: 2, asyncCompletion: { directSend: false, // deprecated: completions stay agent-mediated }, audio: { enabled: true, maxBytes: 20971520, scope: { default: "deny", rules: [{ action: "allow", match: { chatType: "direct" } }], }, models: [ { provider: "openai", model: "gpt-4o-mini-transcribe" }, { type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"] }, ], }, image: { enabled: true, timeoutSeconds: 180, models: [{ provider: "ollama", model: "gemma4:26b", timeoutSeconds: 300 }], }, video: { enabled: true, maxBytes: 52428800, models: [{ provider: "google", model: "gemini-3-flash-preview" }], }, }, },}تُعرض concurrency (القيمة الافتراضية 2) وaudio.maxBytes (القيمة الافتراضية 20 ميغابايت) وvideo.maxBytes (القيمة الافتراضية 50 ميغابايت) بقيمها الافتراضية؛ وتبلغ القيمة الافتراضية لـimage.maxBytes مقدار 10 ميغابايت. القيم الافتراضية لمهلة الطلب لكل قدرة: 60 ثانية للصور/الصوت، و120 ثانية للفيديو.
حقول إدخال نموذج الوسائط
إدخال المزوّد (type: "provider" أو محذوف):
provider: معرّف مزوّد API (openaiوanthropicوgoogle/geminiوgroqوما إلى ذلك)model: تجاوز معرّف النموذجprofile/preferredProfile: اختيار ملف التعريف منauth-profiles.json
إدخال CLI (type: "cli"):
command: الملف التنفيذي المراد تشغيلهargs: وسائط قالبية (تدعم{{MediaPath}}و{{Prompt}}و{{MaxChars}}وما إلى ذلك؛ ينقلopenclaw doctor --fixالعناصر النائبة المهملة{input}إلى{{MediaPath}})
الحقول المشتركة:
capabilities: قائمة اختيارية (imageوaudioوvideo). يعلن كل Plugin مزوّد عن مجموعة قدراته الافتراضية؛ فعلى سبيل المثال، تكون القيم الافتراضية لمزوّدopenaiالمضمّن هي الصور+الصوت، ولمزوّديanthropic/minimaxالصور، ولمزوّدgoogleالصور+الصوت+الفيديو، ولمزوّدgroqالصوت.promptوmaxCharsوmaxBytesوtimeoutSecondsوlanguage: تجاوزات خاصة بكل إدخال.- تنطبق أيضًا إدخالات
tools.media.image.timeoutSecondsوإدخالاتtimeoutSecondsالمطابقة لنموذج الصور عندما يستدعي الوكيل أداةimageالصريحة. بالنسبة إلى فهم الصور، تنطبق هذه المهلة على الطلب نفسه ولا تُخفَّض بسبب أعمال التحضير السابقة. - تنتقل الإخفاقات إلى الإدخال التالي.
تتبع مصادقة المزوّد الترتيب القياسي: auth-profiles.json ← متغيرات البيئة ← models.providers.*.apiKey.
حقول الإكمال غير المتزامن:
asyncCompletion.directSend: علامة توافق مهملة. تظل مهام الوسائط غير المتزامنة المكتملة بوساطة جلسة مقدم الطلب، لكي يتلقى الوكيل النتيجة ويقرر كيفية إبلاغ المستخدم ويستخدم أداة الرسائل عندما يتطلب تسليم المصدر ذلك.
tools.agentToAgent
{ tools: { agentToAgent: { enabled: false, allow: ["home", "work"], }, },}tools.sessions
يتحكم في الجلسات التي يمكن لأدوات الجلسات (sessions_list وsessions_history وsessions_send) استهدافها.
القيمة الافتراضية: tree (الجلسة الحالية + الجلسات التي أنشأتها، مثل الوكلاء الفرعيين).
{ tools: { sessions: { // "self" | "tree" | "agent" | "all" visibility: "tree", }, },}نطاقات الرؤية
self: مفتاح الجلسة الحالية فقط.tree: الجلسة الحالية + الجلسات التي أنشأتها الجلسة الحالية (الوكلاء الفرعيون).agent: أي جلسة تنتمي إلى معرّف الوكيل الحالي (قد تشمل مستخدمين آخرين إذا شغّلت جلسات منفصلة لكل مرسل تحت معرّف الوكيل نفسه).all: أي جلسة. لا يزال الاستهداف عبر الوكلاء يتطلبtools.agentToAgent.- تقييد صندوق العزل: عندما تكون الجلسة الحالية معزولة وتكون
agents.defaults.sandbox.sessionToolsVisibility="spawned"(القيمة الافتراضية)، تُفرض الرؤية علىtreeحتى إذا كانتtools.sessions.visibility="all". - عندما لا تكون القيمة
all، يتضمنsessions_listحقلvisibilityموجزًا يصف الوضع الفعلي وتحذيرًا بأن بعض الجلسات قد تكون محذوفة إذا كانت خارج النطاق الحالي.
tools.sessions_spawn
يتحكم في دعم المرفقات المضمّنة لـsessions_spawn.
{ tools: { sessions_spawn: { attachments: { enabled: false, // opt-in: set true to allow inline file attachments maxTotalBytes: 5242880, // 5 MB total across all files maxFiles: 50, maxFileBytes: 1048576, // 1 MB per file retainOnSessionKeep: false, // keep attachments when cleanup="keep" }, }, },}ملاحظات المرفقات
- تتطلب المرفقات
enabled: true. - تُنشأ مرفقات الوكلاء الفرعيين فعليًا في مساحة عمل الجلسة التابعة ضمن
.openclaw/attachments/<uuid>/مع ملف.manifest.json. - تقتصر مرفقات ACP على الصور، وتُمرر مضمّنة إلى وقت تشغيل ACP بعد استيفاء حدود عدد الملفات وحجم كل ملف وإجمالي الحجم نفسها.
- تُحجب محتويات المرفقات تلقائيًا من التخزين الدائم للنصوص المنسوخة.
- يُتحقق من مدخلات Base64 باستخدام فحوص صارمة للأبجدية والحشو، مع حارس للحجم قبل فك الترميز.
- تكون أذونات ملفات مرفقات الوكلاء الفرعيين
0700للمجلدات و0600للملفات. - تتبع إزالة مرفقات الوكلاء الفرعيين سياسة
cleanup: تزيلdeleteالمرفقات دائمًا؛ ولا تحتفظ بهاkeepإلا عندما تكونretainOnSessionKeep: true.
tools.experimental
علامات الأدوات التجريبية المضمّنة. تكون معطّلة افتراضيًا ما لم تنطبق قاعدة التفعيل التلقائي لنماذج GPT-5 ذات النمط الوكيلي الصارم.
{ tools: { experimental: { planTool: true, // enable experimental update_plan }, },}planTool: يفعّل أداةupdate_planالمنظَّمة لتتبّع الأعمال غير البسيطة متعددة الخطوات.- القيمة الافتراضية:
falseما لم تُضبطagents.defaults.embeddedAgent.executionContract(أو تجاوز خاص بكل وكيل) على"strict-agentic"لتشغيل مزوّدopenaiباستخدام معرّف نموذج من عائلة GPT-5 (يشمل ذلك أيضًا عمليات تشغيل OpenAI Codex CLI، لأن توجيه المصادقة والنماذج في Codex يقع ضمن مزوّدopenai). اضبطها علىtrueلفرض تشغيل الأداة خارج هذا النطاق، أو علىfalseلإبقائها معطّلة حتى لعمليات GPT-5 ذات النمط الوكيلي الصارم. - عند تفعيلها، تضيف مطالبة النظام أيضًا إرشادات استخدام لكي لا يستخدمها النموذج إلا للأعمال المهمة، وألا يحتفظ بأكثر من خطوة واحدة بالحالة
in_progress.
agents.defaults.subagents
{ agents: { defaults: { subagents: { allowAgents: ["research"], model: "minimax/MiniMax-M2.7", maxConcurrent: 8, runTimeoutSeconds: 900, announceTimeoutMs: 120000, archiveAfterMinutes: 60, }, }, },}model: النموذج الافتراضي للوكلاء الفرعيين المُنشَئين. إذا حُذف، يرث الوكلاء الفرعيون نموذج المستدعي.allowAgents: قائمة السماح الافتراضية لمعرّفات الوكلاء المستهدفين المضبوطة لـsessions_spawnعندما لا يضبط الوكيل مقدم الطلب قيمةsubagents.allowAgentsالخاصة به (["*"]= أي هدف مضبوط؛ القيمة الافتراضية: الوكيل نفسه فقط). يرفضsessions_spawnالإدخالات القديمة التي حُذف إعداد وكيلها، ويحذفهاagents_list؛ شغّلopenclaw doctor --fixلتنظيفها.maxConcurrent: الحد الأقصى لعمليات تشغيل الوكلاء الفرعيين المتزامنة. القيمة الافتراضية:8.runTimeoutSeconds: المهلة (بالثواني) لـsessions_spawnعندما لا يمرر المستدعي تجاوزه الخاص. القيمة الافتراضية:0(دون مهلة)؛ أما القيمة900المعروضة أعلاه فهي قيمة اختيارية شائعة وليست القيمة الافتراضية المضمّنة.announceTimeoutMs: مهلة كل استدعاء (بالمللي ثانية) لمحاولات تسليم إعلانagentعبر Gateway. القيمة الافتراضية:120000. قد تجعل إعادات المحاولة العابرة إجمالي انتظار الإعلان أطول من مهلة واحدة مضبوطة.archiveAfterMinutes: عدد الدقائق بعد اكتمال جلسة وكيل فرعي قبل أرشفتها تلقائيًا. القيمة الافتراضية:60؛ وتعطّل0الأرشفة التلقائية.- سياسة الأدوات لكل وكيل فرعي:
tools.subagents.tools.allow/tools.subagents.tools.deny.
المزوّدون المخصصون وعناوين URL الأساسية
تنشر Plugins المزوّدين صفوف كتالوج النماذج الخاصة بها. أضف مزوّدين مخصصين عبر models.providers في الإعداد أو ~/.openclaw/agents/<agentId>/agent/models.json.
يمثّل ضبط baseUrl لمزوّد مخصص/محلي أيضًا قرار الثقة الشبكية المحدود لطلبات HTTP الخاصة بالنماذج: يسمح OpenClaw لذلك الأصل المحدد المطابق لـscheme://host:port بالمرور عبر مسار الجلب المحمي، دون إضافة خيار إعداد منفصل أو الوثوق بأصول خاصة أخرى.
{ models: { mode: "merge", // merge (default) | replace providers: { "custom-proxy": { baseUrl: "http://localhost:4000/v1", apiKey: "LITELLM_KEY", api: "openai-completions", // openai-completions | openai-responses | anthropic-messages | google-generative-ai | etc. models: [ { id: "llama-3.1-8b", name: "Llama 3.1 8B", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128000, contextTokens: 96000, maxTokens: 32000, }, ], }, }, },}المصادقة وأسبقية الدمج
- استخدم
authHeader: trueمعheadersلتلبية احتياجات المصادقة المخصصة. - تجاوز جذر إعدادات الوكيل باستخدام
OPENCLAW_AGENT_DIR. - أسبقية الدمج لمعرّفات المزوّدين المتطابقة:
- تكون الأولوية لقيم
baseUrlغير الفارغة فيmodels.jsonالخاص بالوكيل. - تكون الأولوية لقيم
apiKeyغير الفارغة الخاصة بالوكيل فقط عندما لا يكون ذلك المزوّد مُدارًا بواسطة SecretRef في سياق الإعدادات/ملف تعريف المصادقة الحالي. - تُحدَّث قيم
apiKeyللمزوّد المُدار بواسطة SecretRef من علامات المصدر (ENV_VAR_NAMEلمراجع متغيرات البيئة، وsecretref-managedلمراجع الملف/التنفيذ) بدلًا من تخزين الأسرار المحلولة بصورة دائمة. - تُحدَّث قيم ترويسات المزوّد المُدار بواسطة SecretRef من علامات المصدر (
secretref-env:ENV_VAR_NAMEلمراجع متغيرات البيئة، وsecretref-managedلمراجع الملف/التنفيذ). - تعود قيم
apiKey/baseUrlالفارغة أو المفقودة الخاصة بالوكيل إلىmodels.providersفي الإعدادات. - عند تطابق
contextWindow/maxTokensللنموذج: تكون الأولوية لقيمة الإعداد الصريحة عند وجودها وصلاحيتها (عدد موجب ومحدود)؛ وإلا فتُستخدم قيمة الكتالوج الضمنية/المولَّدة. - يتبع
contextTokensللنموذج المتطابق القاعدة نفسها: الأولوية للقيمة الصريحة وإلا فالقيمة الضمنية؛ استخدمه لتقييد السياق الفعلي دون تغيير البيانات الوصفية الأصلية للنموذج. - تُخزَّن كتالوجات Plugin المزوّد على هيئة أجزاء كتالوج مولَّدة ومملوكة للـPlugin ضمن حالة Plugins الخاصة بالوكيل.
- استخدم
models.mode: "replace"عندما تريد من الإعدادات إعادة كتابةmodels.jsonبالكامل وتخطي دمج أجزاء الكتالوج المملوكة للـPlugin. - تخزين العلامات خاضع لمرجعية المصدر: تُكتب العلامات من لقطة إعداد المصدر النشط (قبل الحل)، لا من قيم أسرار وقت التشغيل المحلولة.
- تكون الأولوية لقيم
تفاصيل حقول المزوّد
الكتالوج عالي المستوى
models.mode: سلوك كتالوج المزوّد (mergeأوreplace).models.providers: خريطة مزوّدين مخصصة مفهرسة بمعرّف المزوّد.- التعديلات الآمنة: استخدم
openclaw config set models.providers.<id> '<json>' --strict-json --mergeأوopenclaw config set models.providers.<id>.models '<json-array>' --strict-json --mergeلإجراء تحديثات إضافية. يرفضconfig setعمليات الاستبدال المتلفة ما لم تمرّر--replace.
- التعديلات الآمنة: استخدم
اتصال المزوّد والمصادقة
models.providers.*.api: محوّل الطلبات (openai-completions، أوopenai-responses، أوopenai-chatgpt-responses، أوanthropic-messages، أوgoogle-generative-ai، أوgoogle-vertex، أوgithub-copilot، أوbedrock-converse-stream، أوollama، أوazure-openai-responses). بالنسبة إلى الواجهات الخلفية ذاتية الاستضافة التي تستخدم/v1/chat/completionsمثل MLX وvLLM وSGLang ومعظم الخوادم المحلية المتوافقة مع OpenAI، استخدمopenai-completions. يستخدم المزوّد المخصص الذي يحتوي علىbaseUrlمن دونapiالقيمة الافتراضيةopenai-completions؛ لا تضبطopenai-responsesإلا عندما تدعم الواجهة الخلفية/v1/responses.models.providers.*.apiKey: بيانات اعتماد المزوّد (يُفضّل استبدال SecretRef/متغير البيئة).models.providers.*.auth: استراتيجية المصادقة (api-key، أوtoken، أوoauth، أوaws-sdk).models.providers.*.contextWindow: نافذة السياق الأصلية الافتراضية للنماذج التابعة لهذا المزوّد عندما لا يضبط إدخال النموذجcontextWindow.models.providers.*.contextTokens: الحد الافتراضي الفعلي لسياق وقت التشغيل للنماذج التابعة لهذا المزوّد عندما لا يضبط إدخال النموذجcontextTokens.models.providers.*.maxTokens: الحد الافتراضي لرموز الإخراج للنماذج التابعة لهذا المزوّد عندما لا يضبط إدخال النموذجmaxTokens.models.providers.*.timeoutSeconds: مهلة اختيارية، بالثواني ولكل مزوّد، لطلب HTTP الخاص بالنموذج، وتشمل الاتصال والترويسات والنص ومعالجة إلغاء الطلب بالكامل.models.providers.*.injectNumCtxForOpenAICompat: بالنسبة إلى Ollama معopenai-completions، يحقنoptions.num_ctxفي الطلبات (الافتراضي:true).models.providers.*.authHeader: يفرض نقل بيانات الاعتماد في ترويسةAuthorizationعند الحاجة.models.providers.*.baseUrl: عنوان URL الأساسي لواجهة API في المنبع.models.providers.*.headers: ترويسات ثابتة إضافية لتوجيه الوكيل/المستأجر.
تجاوزات نقل الطلبات
models.providers.*.request: تجاوزات النقل لطلبات HTTP بين النموذج والمزوّد.
request.headers: ترويسات إضافية (تُدمج مع إعدادات المزوّد الافتراضية). تقبل القيم SecretRef.request.auth: تجاوز استراتيجية المصادقة. الأوضاع:"provider-default"(استخدام المصادقة المضمّنة للمزوّد)، و"authorization-bearer"(معtoken)، و"header"(معheaderNameوvalueوprefixاختياري).request.proxy: تجاوز وكيل HTTP. الأوضاع:"env-proxy"(استخدام متغيري البيئةHTTP_PROXY/HTTPS_PROXY) و"explicit-proxy"(معurl). يقبل كلا الوضعين كائنtlsفرعيًا اختياريًا.request.tls: تجاوز TLS للاتصالات المباشرة. الحقول:caوcertوkeyوpassphrase(تقبل جميعها SecretRef)، وserverName، وinsecureSkipVerify.request.allowPrivateNetwork: عندما تكون القيمةtrue، يسمح لطلبات HTTP بين النموذج والمزوّد بالوصول إلى النطاقات الخاصة أو CGNAT أو النطاقات المشابهة عبر حاجز جلب HTTP الخاص بالمزوّد. تثق عناوين URL الأساسية للمزوّد المخصص/المحلي مسبقًا في الأصل المضبوط نفسه تمامًا، باستثناء أصول البيانات الوصفية/الارتباط المحلي التي تظل محظورة من دون اشتراك صريح. اضبط هذا علىfalseلإلغاء الثقة بالأصل المطابق تمامًا. يستخدم WebSocket إعدادrequestنفسه للترويسات/TLS، لكن ليس بوابة SSRF الخاصة بالجلب. القيمة الافتراضيةfalse.
إدخالات كتالوج النماذج
models.providers.*.models: إدخالات كتالوج نماذج المزوّد الصريحة.models.providers.*.models.*.input: أنماط إدخال النموذج. استخدم["text"]للنماذج النصية فقط و["text", "image"]للنماذج الأصلية للصور/الرؤية. لا تُحقن مرفقات الصور في دورات الوكيل إلا عندما يُعلَّم النموذج المحدد بأنه قادر على معالجة الصور.models.providers.*.models.*.contextWindow: البيانات الوصفية لنافذة السياق الأصلية للنموذج. يتجاوز هذاcontextWindowعلى مستوى المزوّد لذلك النموذج.models.providers.*.models.*.contextTokens: حد اختياري لسياق وقت التشغيل. يتجاوز هذاcontextTokensعلى مستوى المزوّد؛ استخدمه عندما تريد ميزانية سياق فعلية أصغر منcontextWindowالأصلية للنموذج؛ يعرضopenclaw models listالقيمتين عندما تختلفان.models.providers.*.models.*.compat.supportsDeveloperRole: تلميح توافق اختياري. عند استخدامapi: "openai-completions"معbaseUrlغير فارغ وغير أصلي (المضيف ليسapi.openai.com)، يفرض OpenClaw القيمةfalseفي وقت التشغيل. يحافظbaseUrlالفارغ/المحذوف على سلوك OpenAI الافتراضي.models.providers.*.models.*.compat.requiresStringContent: تلميح توافق اختياري لنقاط نهاية الدردشة المتوافقة مع OpenAI التي تقبل السلاسل فقط. عندما تكون القيمةtrue، يحوّل OpenClaw مصفوفاتmessages[].contentالنصية البحتة إلى سلاسل عادية قبل إرسال الطلب.models.providers.*.models.*.compat.strictMessageKeys: تلميح توافق اختياري لنقاط نهاية الدردشة الصارمة المتوافقة مع OpenAI. عندما تكون القيمةtrue، يختزل OpenClaw كائنات رسائل Chat Completions الصادرة إلىroleوcontentقبل إرسال الطلب.models.providers.*.models.*.compat.thinkingFormat: تلميح اختياري لحمولة التفكير. استخدم"together"معreasoning.enabledبأسلوب Together، أو"qwen"معenable_thinkingعالي المستوى، أو"qwen-chat-template"معchat_template_kwargs.enable_thinkingعلى خوادم عائلة Qwen المتوافقة مع OpenAI التي تدعم معاملات قالب الدردشة على مستوى الطلب، مثل vLLM. تعرض نماذج Qwen المضبوطة في vLLM خيارات/thinkثنائية (offوon) لهذه التنسيقات.models.providers.*.models.*.compat.requiresReasoningContentOnAssistantMessages: تلميح توافق اختياري لواجهات Chat Completions الخلفية بأسلوب DeepSeek التي تتطلب احتفاظ رسائل المساعد السابقة بـreasoning_contentعند إعادة التشغيل. عندما تكون القيمةtrue، يحافظ OpenClaw على هذا الحقل في رسائل المساعد الصادرة. استخدم هذا عند توصيل وكيل مخصص متوافق مع DeepSeek يرفض الطلبات بعد إزالة الاستدلال. القيمة الافتراضيةfalse.
اكتشاف Amazon Bedrock
plugins.entries.amazon-bedrock.config.discovery: جذر إعدادات الاكتشاف التلقائي لـBedrock.plugins.entries.amazon-bedrock.config.discovery.enabled: تشغيل/إيقاف الاكتشاف الضمني.plugins.entries.amazon-bedrock.config.discovery.region: منطقة AWS للاكتشاف.plugins.entries.amazon-bedrock.config.discovery.providerFilter: مرشح اختياري لمعرّف المزوّد للاكتشاف المستهدف.plugins.entries.amazon-bedrock.config.discovery.refreshInterval: الفاصل الزمني للاستقصاء لتحديث الاكتشاف.plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow: نافذة السياق الاحتياطية للنماذج المكتشفة.plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens: الحد الأقصى الاحتياطي لرموز الإخراج للنماذج المكتشفة.
يستنتج الإعداد التفاعلي للمزوّد المخصص إدخال الصور لأنماط معرّفات نماذج الرؤية المعروفة، بما فيها GPT-4o/GPT-4.1/GPT-5+ وعائلات الاستدلال o1/o3/o4 وClaude وGemini وأي معرّف ينتهي بـ-vl (Qwen-VL وما شابه) والعائلات المسماة مثل LLaVA وPixtral وInternVL وMllama وMiniCPM-V وGLM-4V؛ ويتخطى السؤال الإضافي لعائلات النماذج النصية فقط المعروفة (Llama وDeepSeek وMistral/Mixtral وKimi/Moonshot وCodestral وDevstral وPhi وQwQ وCodeLlama ومعرّفات Qwen المجردة التي لا تحتوي على لاحقة vl/vision). تظل معرّفات النماذج غير المعروفة تطلب تحديد دعم الصور. يستخدم الإعداد غير التفاعلي الاستنتاج نفسه؛ مرّر --custom-image-input لفرض بيانات وصفية تدعم الصور أو --custom-text-input لفرض بيانات وصفية نصية فقط.
أمثلة المزوّدين
Cerebras (GLM 4.7 / GPT OSS)
يمكن لـPlugin المزوّد الخارجي الرسمي cerebras ضبط ذلك عبر openclaw onboard --auth-choice cerebras-api-key. استخدم إعداد المزوّد الصريح فقط عند تجاوز الإعدادات الافتراضية.
{ env: { CEREBRAS_API_KEY: "sk-..." }, agents: { defaults: { model: { primary: "cerebras/zai-glm-4.7", fallbacks: ["cerebras/gpt-oss-120b"], }, models: { "cerebras/zai-glm-4.7": { alias: "GLM 4.7 (Cerebras)" }, "cerebras/gpt-oss-120b": { alias: "GPT OSS 120B (Cerebras)" }, }, }, }, models: { mode: "merge", providers: { cerebras: { baseUrl: "https://api.cerebras.ai/v1", apiKey: "${CEREBRAS_API_KEY}", api: "openai-completions", models: [ { id: "zai-glm-4.7", name: "GLM 4.7 (Cerebras)" }, { id: "gpt-oss-120b", name: "GPT OSS 120B (Cerebras)" }, ], }, }, },}استخدم cerebras/zai-glm-4.7 مع Cerebras؛ وzai/glm-4.7 للاتصال المباشر بـZ.AI.
Kimi Coding
{ env: { KIMI_API_KEY: "sk-..." }, agents: { defaults: { model: { primary: "kimi/kimi-for-coding" }, models: { "kimi/kimi-for-coding": { alias: "Kimi Code" } }, }, },}مزوّد مضمّن ومتوافق مع Anthropic. الاختصار: openclaw onboard --auth-choice kimi-code-api-key.
النماذج المحلية (LM Studio)
راجع النماذج المحلية. الخلاصة: شغّل نموذجًا محليًا كبيرًا عبر LM Studio Responses API على عتاد قوي؛ وأبقِ النماذج المستضافة مدمجة لاستخدامها كخيار احتياطي.
MiniMax M3 (مباشر)
{ agents: { defaults: { model: { primary: "minimax/MiniMax-M3" }, models: { "minimax/MiniMax-M3": { alias: "Minimax" }, }, }, }, models: { mode: "merge", providers: { minimax: { baseUrl: "https://api.minimax.io/anthropic", apiKey: "${MINIMAX_API_KEY}", api: "anthropic-messages", models: [ { id: "MiniMax-M3", name: "MiniMax M3", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 1000000, maxTokens: 131072, }, ], }, }, },}عيّن MINIMAX_API_KEY. الاختصارات: openclaw onboard --auth-choice minimax-global-api أو openclaw onboard --auth-choice minimax-cn-api. يستخدم كتالوج النماذج M3 افتراضيًا، ويتضمن أيضًا متغيرات M2.7. في مسار البث المتوافق مع Anthropic، يعطّل OpenClaw التفكير في MiniMax M2.x افتراضيًا ما لم تعيّن thinking بنفسك صراحةً؛ بينما يظل MiniMax-M3 (وM3.x) افتراضيًا على مسار التفكير المحذوف/التكيفي الخاص بموفّر الخدمة. يعيد /fast on أو params.fastMode: true كتابة MiniMax-M2.7 إلى MiniMax-M2.7-highspeed.
Moonshot AI (Kimi)
{ env: { MOONSHOT_API_KEY: "sk-..." }, agents: { defaults: { model: { primary: "moonshot/kimi-k2.6" }, models: { "moonshot/kimi-k2.6": { alias: "Kimi K2.6" } }, }, }, models: { mode: "merge", providers: { moonshot: { baseUrl: "https://api.moonshot.ai/v1", apiKey: "${MOONSHOT_API_KEY}", api: "openai-completions", models: [ { id: "kimi-k2.6", name: "Kimi K2.6", reasoning: false, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, }, ], }, }, },}لنقطة النهاية الخاصة بالصين: baseUrl: "https://api.moonshot.cn/v1" أو openclaw onboard --auth-choice moonshot-api-key-cn.
تعلن نقاط نهاية Moonshot الأصلية توافق استخدام البث عبر وسيلة النقل المشتركة openai-completions، ويحدد OpenClaw ذلك استنادًا إلى إمكانات نقطة النهاية بدلًا من الاعتماد على معرّف موفّر الخدمة المدمج وحده.
OpenCode
{ agents: { defaults: { model: { primary: "opencode/claude-opus-4-6" }, models: { "opencode/claude-opus-4-6": { alias: "Opus" } }, }, },}عيّن OPENCODE_API_KEY (أو OPENCODE_ZEN_API_KEY). استخدم مراجع opencode/... لكتالوج Zen أو مراجع opencode-go/... لكتالوج Go. الاختصار: openclaw onboard --auth-choice opencode-zen أو openclaw onboard --auth-choice opencode-go.
Synthetic (متوافق مع Anthropic)
{ env: { SYNTHETIC_API_KEY: "sk-..." }, agents: { defaults: { model: { primary: "synthetic/hf:MiniMaxAI/MiniMax-M2.5" }, models: { "synthetic/hf:MiniMaxAI/MiniMax-M2.5": { alias: "MiniMax M2.5" } }, }, }, models: { mode: "merge", providers: { synthetic: { baseUrl: "https://api.synthetic.new/anthropic", apiKey: "${SYNTHETIC_API_KEY}", api: "anthropic-messages", models: [ { id: "hf:MiniMaxAI/MiniMax-M2.5", name: "MiniMax M2.5", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 192000, maxTokens: 65536, }, ], }, }, },}يجب ألا يتضمن عنوان URL الأساسي اللاحقة /v1 (إذ يضيفها عميل Anthropic). الاختصار: openclaw onboard --auth-choice synthetic-api-key.
Z.AI (GLM-4.7)
{ agents: { defaults: { model: { primary: "zai/glm-4.7" }, models: { "zai/glm-4.7": {} }, }, },}عيّن ZAI_API_KEY. تستخدم مراجع النماذج معرّف موفّر الخدمة القياسي zai/*. الاختصار: openclaw onboard --auth-choice zai-api-key.
- نقطة النهاية العامة:
https://api.z.ai/api/paas/v4 - نقطة نهاية البرمجة:
https://api.z.ai/api/coding/paas/v4 - يفحص خيار المصادقة الافتراضي
zai-api-keyمفتاحك ويكتشف تلقائيًا نقطة النهاية التي ينتمي إليها (وينتقل إلى مطالبة عند تعذّر الوصول إلى نتيجة حاسمة، مع اعتماد Global افتراضيًا). تتوفر أيضًا خيارات مصادقة مخصصة للصين وخطة البرمجة للاختيار الصريح. - لنقطة النهاية العامة، عرّف موفّر خدمة مخصصًا مع تجاوز عنوان URL الأساسي.
ذو صلة
- الإعدادات — الوكلاء
- الإعدادات — القنوات
- مرجع الإعدادات — مفاتيح أخرى من المستوى الأعلى
- الأدوات والإضافات