منسّق
الذكاء الاصطناعي للمؤسسات
المنصة مفتوحة المصدر لنشر أنظمة ذكاء اصطناعي متعددة الوكلاء ومحكومة: مستضافة ذاتياً، قائمة على التكوين، وجاهزة للامتثال. متوفرة الآن في v6.
curl -fsSL https://raw.githubusercontent.com/labsai/EDDI/main/install.sh | bashInvoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/labsai/EDDI/main/install.ps1" -OutFile "install.ps1"
Unblock-File .\install.ps1
.\install.ps1
المشكلة
تنسيق الذكاء الاصطناعي المؤسسي مجزأ ومؤلم. الفرق عالقة في دورة حياة مفككة:
فخ النموذج الأولي
تقوم الفرق بالنمذجة باستخدام Python/Flowise/n8n، ثم تعيد كتابة كل شيء من الصفر في Java للإنتاج. يتم التخلي عن النماذج الأولية المرئية بالكامل.
إرهاق النمط المتكرر
استخدام Spring AI أو LangChain4j يعني بناء وحدات تحكم REST وطبقات المصادقة وإدارة الحالة من الصفر. كل تعديل للموجه يتطلب إعادة التجميع.
احتكاك BPMN
إجبار وكلاء الذكاء الاصطناعي غير الحتمية على سير عمل حتمي في Camunda/Temporal يخلق عدم توافق شديد وبنى هشة.
الحل
EDDI هو منصة تنسيق ذكاء اصطناعي قابلة للنشر: وليس مكتبة. منصة وسيطة كاملة مع واجهة إدارة مرئية:
التكوين-كشفرة
منطق الوكلاء وخطوط الأنابيب وتعريفات الأدوات هي تكوينات JSON: وليس شفرة مجمعة. يكرر مهندسو الموجهات فوراً عبر واجهة React أو REST API، بدون إعادة نشر.
89 أداة MCP
يكشف EDDI قدراته عبر بروتوكول سياق النموذج: مما يتيح تفاعل Claude Desktop. يمكن للوكلاء أيضاً استهلاك أدوات MCP خارجية.
الأمان أولاً
بدون eval()، بدون هروب. تكامل الخزنة والتحقق من URL ومسارات التدقيق المشفرة هي أسس معمارية.
المراقبة
يتم تسجيل كل خطوة في خط الأنابيب مع مسار تدقيق غير قابل للتغيير: الرموز والتكلفة والتوقيت واستدعاءات الأدوات. دفتر أستاذ قياس CQRS كامل.
التزامن المؤسسي
Java 25 Virtual Threads على Quarkus. ملايين الخيوط الخفيفة لأحمال عمل LLM كثيفة الإدخال/الإخراج. بدون حظر حلقة الأحداث، بدون اختناقات الخيط الواحد.
تنسيق متعدد الوكلاء
اكتشاف الوكلاء القائم على النية، والمحادثات المُدارة، والتعاون الجماعي: يتداول الوكلاء بسبعة أنماط، ويصوّتون، ويحررون نواتج العمل المشتركة معاً، ويمنحون البشر مقعداً على الطاولة.
الإعداد والواجهة جنبًا إلى جنب
ما يفعله الوكيل مجموعة من مستندات JSON يمكنك قراءتها ومقارنتها وإدارة إصداراتها. ويحرّر Manager المستندات نفسها.
{
"behaviorGroups": [
{
"name": "",
"behaviorRules": [
{
"name": "Ask for City",
"actions": [
"ask_for_city"
],
"conditions": [
{
"type": "inputmatcher",
"configs": {
"expressions": "trigger(current_weather)"
},
"conditions": []
}
]
}
]
}
]
}
Behavior Rule ملف JSON بسيط: عندما يطابق المدخل المحلَّل trigger(current_weather) تُصدر الإجراء ask_for_city. تستمع المهام والمخرجات إلى هذا الإجراء. يعرض Manager وكيلًا وسير العمل الذي ينفّذ قواعده.
{
"tasks": [
{
"actions": [
"send_message"
],
"id": "simpleChat",
"type": "openai",
"description": "Simple chat interaction",
"parameters": {
"apiKey": "${vault:openai-key}",
"modelName": "gpt-4o",
"systemMessage": "You are a helpful assistant",
"addToOutput": "true"
}
}
]
}
مهمة LLM هي أيضًا JSON: نوع المزوّد ومرجع إلى الـ vault بدل مفتاح API صريح والنموذج ورسالة النظام. ويحرّر Manager المستند نفسه.
{
"behaviorGroups": [
{
"name": "",
"behaviorRules": [
{
"name": "Refund needs approval",
"actions": [
"PAUSE_CONVERSATION"
],
"conditions": [
{
"type": "inputmatcher",
"configs": {
"expressions": "trigger(refund_request)"
},
"conditions": []
}
]
}
]
}
]
}AWAITING_HUMANتم إيقاف المحادثة مؤقتًا بواسطة القاعدة
Refund needs approval
يُكتب كل قرار في سجل التدقيق كإدخال hitl.approval.
للتوقف انتظارًا لإنسان تُصدر القاعدة PAUSE_CONVERSATION. تنتظر المحادثة في الحالة AWAITING_HUMAN حتى يقرر المالك أو eddi-admin أو eddi-approver، في Manager أو في Slack. ويمكن ضبط استدعاءات الأدوات ومراحل المجموعات بالطريقة نفسها.
"المحرك صارم حتى يتمكن الذكاء الاصطناعي من الإبداع."Project Philosophy
كيف تسير دورة المحادثة
اختر مرحلة لترى ما تفعله وإعداداتها وما تكتبه.
Input
ما الذي يحدث هنا
تصل رسالة من الدردشة أو Slack أو واجهة API أو عميل MCP. يصبح النص الخام أول إدخال في خطوة جديدة داخل Conversation memory. لم تعمل أي مهمة بعد، لذلك تعرض هذه المرحلة خطوة الذاكرة بدل إدخال التدقيق.
قيم توضيحية للمثال
{
"key": "input",
"value": "What is the weather?"
}Parser
ما الذي يحدث هنا
يطبّع الـ parser النص ويبحث عنه في قواميس الوكيل، فيحوّل الكلمات والعبارات إلى تعبيرات دلالية مثل trigger(current_weather). هذا بحث وليس استدعاء نموذج، فالنص نفسه يعطي دائمًا التعبيرات نفسها.
تكتب كل مهمة في المسار إدخالًا واحدًا: موقّعًا بـ HMAC، للإضافة فقط، مع فحص التسلسل.
قيم توضيحية للمثال
{
"words": [
{
"word": "weather",
"expressions": "trigger(current_weather)",
"frequency": 0
}
],
"phrases": [
{
"phrase": "what is the weather",
"expressions": "trigger(current_weather)"
}
]
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": 0,
"taskId": "ai.labs.parser",
"taskType": "expressions",
"taskIndex": 0,
"durationMs": 3,
"input": {
"input": "What is the weather?"
},
"output": {
"expressions": [
"trigger(current_weather)"
]
},
"actions": [],
"cost": 0,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 0
}Behavior Rules
ما الذي يحدث هنا
Behavior Rules شروط إذا-فإن على التعبيرات وConversation memory. كل قاعدة مطابقة تُصدر إجراءات. التوجيه إعداد وليس كودًا، لذا يسلك المدخل نفسه المسار نفسه في كل مرة.
تكتب كل مهمة في المسار إدخالًا واحدًا: موقّعًا بـ HMAC، للإضافة فقط، مع فحص التسلسل.
قيم توضيحية للمثال
{
"behaviorGroups": [
{
"name": "",
"behaviorRules": [
{
"name": "Ask for City",
"actions": [
"ask_for_city"
],
"conditions": [
{
"type": "inputmatcher",
"configs": {
"expressions": "trigger(current_weather)"
},
"conditions": []
}
]
}
]
}
]
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": 0,
"taskId": "ai.labs.behavior",
"taskType": "behavior_rules",
"taskIndex": 1,
"durationMs": 1,
"input": {
"expressions": [
"trigger(current_weather)"
]
},
"output": {
"behavior_rules:success": [
"Ask for City"
]
},
"actions": [
"ask_for_city"
],
"cost": 0,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 1
}Tasks
ما الذي يحدث هنا
تستمع المهام (Tasks) إلى الإجراءات: استدعاء LLM أو استدعاء HTTP أو أداة MCP أو بحث في قاعدة معرفة. تكتب كل مهمة إدخال تدقيق موقّعًا بما قرأته وما أنتجته مع تفاصيل النموذج والأدوات.
تكتب كل مهمة في المسار إدخالًا واحدًا: موقّعًا بـ HMAC، للإضافة فقط، مع فحص التسلسل.
قيم توضيحية للمثال
{
"tasks": [
{
"actions": [
"send_message"
],
"id": "simpleChat",
"type": "anthropic",
"description": "Answers weather questions",
"parameters": {
"apiKey": "${vault:anthropic-key}",
"modelName": "claude-sonnet-5-5",
"systemMessage": "You are a helpful assistant",
"addToOutput": "true"
}
}
]
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": 0,
"taskId": "ai.labs.llm",
"taskType": "langchain",
"taskIndex": 2,
"durationMs": 1840,
"input": {
"input": "What is the weather in Vienna?",
"actions": [
"send_message"
]
},
"output": {
"text": "Vienna: 14 °C, light rain."
},
"llmDetail": {
"modelName": "claude-sonnet-5-5",
"inputTokens": 412,
"outputTokens": 18
},
"toolCalls": {
"name": "get_weather",
"args": {
"city": "Vienna"
},
"result": "14 °C, light rain"
},
"actions": [
"send_message"
],
"cost": 0.0016,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 2
}Output
ما الذي يحدث هنا
تحوّل قوالب Output الإجراءات الصادرة إلى الرد: نص وردود سريعة. يُحفظ الرد في الذاكرة ويُعاد إلى القناة التي جاءت منها الرسالة.
قيم توضيحية للمثال
{
"outputSet": [
{
"action": "ask_for_city",
"timesOccurred": 0,
"outputs": [
{
"valueAlternatives": [
{
"type": "text",
"text": "Which city would you like to know the weather of?"
}
]
}
],
"quickReplies": []
}
]
}{
"key": "output",
"value": [
"Which city would you like to know the weather of?"
]
}Tool boundary
ما الذي يحدث هنا
يعبر كل استدعاء أداة، مهما كان مصدره، الحدّ نفسه. الاستدعاءات المطابقة لنمط toolApprovals تتوقف حتى يقرر إنسان، ويُكتب القرار في السجل كإدخال hitl.approval. تأتي بيانات الاعتماد من الـ vault كمراجع ${vault:keyName}.
تكتب كل مهمة في المسار إدخالًا واحدًا: موقّعًا بـ HMAC، للإضافة فقط، مع فحص التسلسل.
قيم توضيحية للمثال
{
"hitlConfig": {
"toolApprovals": {
"requireApproval": [
"mcp:*",
"delete_*",
"transfer_funds"
],
"exempt": [
"mcp:read_*"
],
"approvalTimeout": "PT30M",
"timeoutPolicy": "AUTO_REJECT",
"pauseReason": "Approval required for {toolNames}"
}
}
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": -1,
"taskId": "hitl.approval",
"taskType": "hitl",
"taskIndex": -1,
"durationMs": 0,
"input": {},
"output": {
"verdict": "APPROVED",
"decidedBy": "slack:U04EXAMPLE",
"automated": false,
"pauseType": "TOOL_CALL",
"toolDecisions": [
{
"callId": "call_01",
"toolName": "transfer_funds",
"verdict": "APPROVED",
"amended": false,
"argsDigest": "sha256:9c1d…e407"
}
]
},
"actions": [],
"cost": 0,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 3
}Conversation memory
ما الذي يحدث هنا
تحفظ Conversation memory كل خطوة (input وexpressions وactions وoutput) وخصائص نطاقها الخطوة أو المحادثة أو المستخدم (longTerm). وتُحفظ معها حالة المحادثة (READY أو IN_PROGRESS أو ENDED أو AWAITING_HUMAN أو ERROR).
قيم توضيحية للمثال
{
"conversationState": "READY",
"conversationSteps": [
{
"data": [
{
"key": "input",
"value": "What is the weather?"
},
{
"key": "expressions",
"value": [
"trigger(current_weather)"
]
},
{
"key": "actions",
"value": [
"ask_for_city"
]
},
{
"key": "output",
"value": [
"Which city would you like to know the weather of?"
]
}
]
}
],
"conversationProperties": {
"chosenCity": "Vienna"
}
}شريك موثوق لدى UNIDO للذكاء الاصطناعي الصناعي
تم اختيار LABS.AI من قبل منظمة الأمم المتحدة للتنمية الصناعية (UNIDO) كشريك موثوق للذكاء الاصطناعي الصناعي للجنوب العالمي.
اعرف المزيد عن الشراكة →موثوق ومعتمد
مبني على تقنية مثبتة
الخطوات التالية
الأسئلة المتكررة
ما هو EDDI؟
EDDI هو وسيط تنسيق ذكاء اصطناعي مفتوح المصدر، أصلي على JVM، مبني على Quarkus و Java 25. يمكّن فرق المؤسسات من بناء وتكوين ونشر وكلاء ذكاء اصطناعي باستخدام تكوين JSON بدلاً من الشفرة المجمعة. يوفر EDDI منصة كاملة مع واجهة إدارة React جاهزة للإنتاج (مدير EDDI)، وواجهات REST API مدمجة، وإدارة حالة المحادثة، والأمان (OIDC/Keycloak)، ومسارات تدقيق غير قابلة للتغيير، و89 أداة MCP، كل ذلك قابل للنشر عبر Docker أو Kubernetes.
كيف يختلف EDDI عن مكتبات وأُطر عمل الذكاء الاصطناعي؟
مكتبات الذكاء الاصطناعي مثل LangChain و Spring AI و LangChain4j تمنحك لبنات البناء، لكنك لا تزال بحاجة لبناء وحدات تحكم REST والمصادقة وإدارة حالة المحادثة وتسجيل التدقيق وواجهات الإدارة بنفسك. EDDI هو منصة وسيطة قابلة للنشر، وليس مكتبة. يوفر كل ذلك جاهزاً، قابلاً للنشر عبر Docker.
هل EDDI جاهز للاستخدام المؤسسي في الإنتاج؟
نعم. يعمل EDDI على Java 25 مع Quarkus، مستفيداً من Virtual Threads للتزامن الضخم في عمليات الإدخال/الإخراج. يدعم MongoDB و PostgreSQL، يتضمن مصادقة OIDC/Keycloak مدمجة ومساحات عمل لكل مستخدم مع مشاركة الموارد، يوفر مسارات تدقيق مشفرة غير قابلة للتغيير للامتثال (بما في ذلك قانون الذكاء الاصطناعي الأوروبي)، ويتوسع أفقياً عبر NATS JetStream.
ما هو بروتوكول سياق النموذج (MCP)؟
بروتوكول سياق النموذج (MCP) هو معيار مفتوح يسمح لمساعدي الذكاء الاصطناعي مثل Claude Desktop وإضافات IDE والعملاء المخصصين بالتفاعل مع الأدوات الخارجية برمجياً. يكشف EDDI 89 أداة MCP تشمل إدارة المحادثات وإدارة الوكلاء والمناقشات الجماعية والموافقات البشرية وأتمتة الإعداد وإدارة الجداول والتشخيصات.
هل يمكن لـ EDDI أن يحل محل Flowise أو n8n لأحمال العمل الإنتاجية؟
يخدم EDDI غرضاً مشابهاً للبناء المرئي ولكن على JVM بدلاً من Node.js. على عكس Flowise و n8n، لا يستخدم EDDI eval() أو كتل الشفرة، يشغل Java 25 Virtual Threads للتزامن المؤسسي، يدعم مصادقة OIDC/Keycloak، ويخزن البيانات في MongoDB أو PostgreSQL. مصمم للصناعات المنظمة.
هل EDDI مرتبط بـ "Eddie AI" أو منتجات أخرى تحمل اسم "Eddy"؟
لا. EDDI (من LABS.AI) هو منصة تنسيق وكلاء الذكاء الاصطناعي للمؤسسات مستضافة ذاتياً ومبنية على Java/Quarkus. لا علاقة له بأدوات تحرير الفيديو أو برامج الموارد البشرية أو منشئي الروبوتات أو المنتجات الأخرى التي تحمل أسماء مشابهة.
كيف يقارن EDDI بمنصات الذكاء الاصطناعي السحابية مثل AWS Bedrock أو Azure AI Studio؟
توفر منصات الذكاء الاصطناعي السحابية بنية تحتية مُدارة لكنها تخلق تقييداً بالمورد. يعمل EDDI في أي مكان يعمل فيه Docker، محلياً أو في أي سحابة أو في بيئات معزولة. يدعم 19 مزود LLM وأي نقطة نهاية متوافقة مع OpenAI، مما يوفر قابلية نقل كاملة للنماذج وسيادة تامة على البيانات. راجع المقارنة التفصيلية.
هل يعمل EDDI مع Open WebUI وغيره من العملاء المتوافقين مع OpenAI؟
نعم. يتضمن EDDI واجهة /v1 API متوافقة مع OpenAI تعرض الوكلاء المنشورين كنماذج، بحيث يمكن لـ Open WebUI وحزمة openai SDK وLangChain وLiteLLM التحدث إليهم مباشرة. تدعم الواجهة البث والإبلاغ عن استهلاك الرموز، وتحتفظ بكل دردشة في محادثة مستقلة خاصة بها، وتظل بوابات الموافقة الخاصة بالوكيل سارية. الواجهة معطلة افتراضياً، ولها مصادقة مستقلة عبر مفتاح API.
هل يمكن لعدة مستخدمين وفرق مشاركة نسخة واحدة منشورة من EDDI؟
نعم. تمنح مساحات العمل لكل مستخدم كل وكيل وكل تكوين مالكاً، ومساحة شخصية أو للفريق مرتبطة بمجموعات Keycloak، ومشاركة صريحة بمستوى الاستخدام أو العرض أو التعديل أو الملكية. تشارك مع الأشخاص بأسمائهم من دليل للمستخدمين المسجّلين فيتلقون إشعاراً، ويستطيع أي شخص يتبع رابطاً إلى شيء لا يمكنه فتحه أن يطلب الوصول من المالك. وتتيح Connections للوكلاء استدعاء الأنظمة الخارجية بمفتاح على مستوى المؤسسة، أو بحساب خدمة، أو بحساب OAuth الخاص بكل مستخدم، بحيث يمكن حصر الوكيل في ما يُسمح به للشخص الذي يستخدمه. تفعيل مساحات العمل اختياري، وتُرحَّل الموارد الموجودة إليها تلقائياً حتى لا يختفي شيء عند تفعيلها.
ما نماذج LLM التي يمكنني استخدامها مع EDDI؟
يتصل EDDI بـ 19 مزود LLM: OpenAI وAnthropic وGoogle Gemini وMistral وAzure OpenAI وAmazon Bedrock وOracle GenAI وGoogle Vertex AI وOllama وHugging Face وJlama، إضافة إلى دعم من الدرجة الأولى لكل من xAI Grok وDeepSeek وMoonshot Kimi وAlibaba Qwen وZ.ai GLM وMiniMax وOpenRouter وGroq. وتعمل أي نقطة نهاية أخرى متوافقة مع OpenAI عبر عنوان URL أساسي. يشرح كتالوج النماذج نقاط قوة كل نموذج ويعرض التكوين الدقيق لتشغيله في EDDI.