एंटरप्राइज़
AI ऑर्केस्ट्रेटर
शासित, मल्टी-एजेंट AI सिस्टम तैनात करने के लिए ओपन-सोर्स प्लेटफ़ॉर्म: सेल्फ-होस्टेड, कॉन्फ़िगरेशन-संचालित और अनुपालन-तैयार। अब 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
समस्या
एंटरप्राइज़ AI ऑर्केस्ट्रेशन खंडित और कठिन है। टीमें एक दर्दनाक, खंडित जीवनचक्र में फंसी हुई हैं:
प्रोटोटाइप जाल
टीमें Python/Flowise/n8n से प्रोटोटाइप बनाती हैं, फिर प्रोडक्शन के लिए सब कुछ स्क्रैच से फिर से लिखती हैं।
बॉइलरप्लेट थकान
Spring AI या LangChain4j का उपयोग करने का मतलब REST कंट्रोलर, ऑथ लेयर्स और स्टेट मैनेजमेंट स्क्रैच से बनाना है।
BPMN घर्षण
गैर-निर्धारणवादी AI एजेंट्स को Camunda/Temporal वर्कफ़्लो में मजबूर करने से गंभीर इम्पीडेंस असंगतता होती है।
समाधान
EDDI एक डिप्लॉय करने योग्य AI ऑर्केस्ट्रेशन प्लेटफ़ॉर्म है, लाइब्रेरी नहीं। विज़ुअल मैनेजमेंट, Config-as-Code और एंटरप्राइज़ सिक्योरिटी, सब बिल्ट-इन करने योग्य मिडलवेयर प्लेटफ़ॉर्म:
Configuration-as-Code
एजेंट लॉजिक, पाइपलाइन और टूल डेफ़िनिशन JSON कॉन्फ़िगरेशन हैं, कंपाइल्ड Java नहीं।
89 MCP टूल्स
EDDI अपनी क्षमताओं को Model Context Protocol के माध्यम से उजागर करता है, Claude Desktop के साथ इंटरैक्शन सक्षम करता है।
सुरक्षा पहले
कोई eval() नहीं, कोई एस्केप नहीं। Vault इंटीग्रेशन, URL वैलिडेशन, और क्रिप्टोग्राफ़िक ऑडिट ट्रेल्स आर्किटेक्चरल फ़ाउंडेशन हैं।
ऑब्ज़र्वेबिलिटी
हर पाइपलाइन स्टेप को अपरिवर्तनीय ऑडिट ट्रेल के साथ लॉग किया जाता है।
एंटरप्राइज़ कंकरेंसी
Quarkus पर Java 25 वर्चुअल थ्रेड्स। I/O-बाउंड LLM वर्कलोड के लिए लाखों लाइटवेट थ्रेड्स।
मल्टी-एजेंट ऑर्केस्ट्रेशन
इंटेंट-आधारित एजेंट डिस्कवरी, प्रबंधित वार्तालाप और ग्रुप सहयोग: एजेंट्स सात शैलियों में विचार-विमर्श करते हैं, वोट करते हैं, साझा कार्य-उत्पादों को मिलकर संपादित करते हैं और मनुष्यों को भी चर्चा में जगह देते हैं।
कॉन्फ़िग और UI, साथ-साथ
एजेंट जो करता है वह 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 जारी करता है। task और output उस एक्शन को सुनते हैं। Manager एक एजेंट और उसके नियम चलाने वाला workflow दिखाता है।
{
"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 task भी JSON है: प्रदाता का प्रकार, सीधे API कुंजी की जगह vault रेफ़रेंस, मॉडल और सिस्टम संदेश। 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
हर निर्णय ऑडिट ledger में hitl.approval एंट्री के रूप में लिखा जाता है।
किसी इंसान के लिए रुकने हेतु नियम PAUSE_CONVERSATION जारी करता है। बातचीत AWAITING_HUMAN स्थिति में तब तक इंतज़ार करती है जब तक मालिक, कोई eddi-admin या eddi-approver Manager या Slack में निर्णय न ले। टूल कॉल और ग्रुप चरणों को भी इसी तरह नियंत्रित किया जा सकता है।
"इंजन सख्त है ताकि AI रचनात्मक हो सके।"Project Philosophy
बातचीत का एक टर्न कैसे आगे बढ़ता है
किसी चरण को चुनें और देखें कि वह क्या करता है, उसका कॉन्फ़िग क्या है और वह क्या लिखता है।
Input
यहाँ क्या होता है
चैट, Slack, API या किसी MCP क्लाइंट से संदेश आता है। मूल टेक्स्ट Conversation memory में नए स्टेप की पहली एंट्री बन जाता है। अभी कोई task नहीं चला है, इसलिए यह चरण ऑडिट एंट्री के बजाय मेमोरी स्टेप दिखाता है।
समझाने के लिए उदाहरण मान
{
"key": "input",
"value": "What is the weather?"
}Parser
यहाँ क्या होता है
parser टेक्स्ट को सामान्य रूप देता है और एजेंट की डिक्शनरी में खोजकर शब्दों और वाक्यांशों को trigger(current_weather) जैसे अर्थपूर्ण एक्सप्रेशन में बदलता है। यह मॉडल कॉल नहीं, लुकअप है, इसलिए एक ही टेक्स्ट से हमेशा वही एक्सप्रेशन मिलते हैं।
पाइपलाइन का हर task एक एंट्री लिखता है: 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 पर लगाई गई IF-THEN शर्तें हैं। हर मिलता हुआ नियम एक्शन जारी करता है। रूटिंग कोड नहीं, कॉन्फ़िगरेशन है, इसलिए एक ही इनपुट हर बार वही रास्ता लेता है।
पाइपलाइन का हर task एक एंट्री लिखता है: 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
यहाँ क्या होता है
task एक्शन सुनते हैं: LLM कॉल, HTTP कॉल, MCP टूल या नॉलेज बेस लुकअप। हर task एक हस्ताक्षरित ऑडिट एंट्री लिखता है, जिसमें उसने क्या पढ़ा, क्या बनाया और मॉडल व टूल का विवरण होता है।
पाइपलाइन का हर task एक एंट्री लिखता है: 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 पैटर्न से मेल खाने वाले कॉल तब तक रुके रहते हैं जब तक कोई इंसान निर्णय न ले, और वह निर्णय ledger में hitl.approval एंट्री के रूप में लिखा जाता है। क्रेडेंशियल vault से ${vault:keyName} रेफ़रेंस के रूप में आते हैं।
पाइपलाइन का हर task एक एंट्री लिखता है: 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"
}
}औद्योगिक AI के लिए UNIDO विश्वसनीय भागीदार
LABS.AI को संयुक्त राष्ट्र औद्योगिक विकास संगठन (UNIDO) द्वारा ग्लोबल साउथ के लिए औद्योगिक AI हेतु विश्वसनीय भागीदार के रूप में चुना गया है।
साझेदारी के बारे में और जानें →विश्वसनीय और प्रमाणित
सिद्ध तकनीक पर निर्मित
अगले कदम
अक्सर पूछे जाने वाले प्रश्न
EDDI क्या है?
EDDI एक ओपन-सोर्स, एंटरप्राइज़-ग्रेड AI ऑर्केस्ट्रेशन प्लेटफ़ॉर्म है। यह टीमों को कंपाइल्ड कोड के बजाय JSON कॉन्फ़िगरेशन का उपयोग करके AI-संचालित एजेंट्स बनाने, कॉन्फ़िगर करने और डिप्लॉय करने में सक्षम बनाता है। EDDI प्रोडक्शन-तैयार React मैनेजमेंट UI (EDDI मैनेजर), बिल्ट-इन REST APIs, कन्वर्सेशन स्टेट मैनेजमेंट, सिक्योरिटी (OIDC/Keycloak), अपरिवर्तनीय ऑडिट ट्रेल्स और 89 MCP टूल्स के साथ एक पूर्ण प्लेटफ़ॉर्म प्रदान करता है, जो Docker या Kubernetes के माध्यम से डिप्लॉय किया जा सकता है।
EDDI AI लाइब्रेरी और फ्रेमवर्क से कैसे अलग है?
LangChain, Spring AI और LangChain4j जैसी AI लाइब्रेरी आपको बिल्डिंग ब्लॉक देती हैं, लेकिन REST कंट्रोलर, ऑथेंटिकेशन, कन्वर्सेशन स्टेट मैनेजमेंट, ऑडिट लॉगिंग और मैनेजमेंट UI आपको फिर भी खुद बनाने पड़ते हैं। EDDI एक डिप्लॉय करने योग्य मिडलवेयर प्लेटफ़ॉर्म है, लाइब्रेरी नहीं। यह सब EDDI में बॉक्स से बाहर शामिल है, Docker के माध्यम से डिप्लॉय के लिए तैयार।
क्या EDDI एंटरप्राइज़ प्रोडक्शन उपयोग के लिए तैयार है?
हाँ। EDDI एक एंटरप्राइज़-ग्रेड रनटाइम पर बना है, जिसमें भारी I/O-बाउंड कंकरेंसी के लिए हल्के वर्चुअल थ्रेड्स हैं। यह MongoDB और PostgreSQL को सपोर्ट करता है, इसमें बिल्ट-इन OIDC/Keycloak ऑथेंटिकेशन और रिसोर्स शेयरिंग वाले प्रति-उपयोगकर्ता वर्कस्पेस शामिल हैं, यह अनुपालन (EU AI अधिनियम सहित) के लिए अपरिवर्तनीय क्रिप्टोग्राफ़िक ऑडिट ट्रेल्स देता है, और NATS JetStream के ज़रिए क्षैतिज रूप से स्केल होता है।
Model Context Protocol (MCP) क्या है?
Model Context Protocol (MCP) एक ओपन स्टैंडर्ड है जो Claude Desktop, IDE प्लगइन्स और कस्टम क्लाइंट्स जैसे AI सहायकों को बाहरी टूल्स के साथ प्रोग्रामेटिक रूप से इंटरैक्ट करने की अनुमति देता है। EDDI 89 MCP टूल्स उजागर करता है, जो वार्तालाप प्रबंधन, एजेंट प्रशासन, ग्रुप चर्चाओं, मानवीय अनुमोदनों, सेटअप ऑटोमेशन, शेड्यूल प्रबंधन और डायग्नोस्टिक्स को कवर करते हैं।
क्या EDDI प्रोडक्शन वर्कलोड के लिए Flowise या n8n की जगह ले सकता है?
EDDI Node.js के बजाय JVM पर समान विज़ुअल बिल्डिंग उद्देश्य पूरा करता है। Flowise और n8n के विपरीत, EDDI कोई eval() या कोड ब्लॉक उपयोग नहीं करता और नियंत्रित उद्योगों के लिए डिज़ाइन किया गया है।
क्या EDDI "Eddie AI" या "Eddy" नाम के अन्य उत्पादों से संबंधित है?
नहीं। EDDI (LABS.AI द्वारा) Java/Quarkus पर निर्मित एक सेल्फ-होस्टेड एंटरप्राइज़ AI एजेंट ऑर्केस्ट्रेशन प्लेटफ़ॉर्म है। यह वीडियो संपादन, HR सॉफ़्टवेयर, चैटबॉट बिल्डर या समान नाम वाले अन्य उत्पादों से संबंधित नहीं है।
EDDI की तुलना AWS Bedrock या Azure AI Studio जैसे क्लाउड AI प्लेटफ़ॉर्म से कैसे होती है?
क्लाउड AI प्लेटफ़ॉर्म प्रबंधित इंफ्रास्ट्रक्चर प्रदान करते हैं लेकिन वेंडर लॉक-इन बनाते हैं। EDDI वहीं चलता है जहाँ Docker चलता है: ऑन-प्रिमाइसेस, किसी भी क्लाउड में या एयर-गैप्ड वातावरण में। यह 19 LLM प्रदाताओं और किसी भी OpenAI-संगत एंडपॉइंट को सपोर्ट करता है, जिससे पूर्ण मॉडल पोर्टेबिलिटी और डेटा संप्रभुता मिलती है। हमारी विस्तृत तुलना देखें।
क्या EDDI, Open WebUI और अन्य OpenAI-संगत क्लाइंट्स के साथ काम करता है?
हाँ। EDDI में एक OpenAI-संगत /v1 API शामिल है, जो डिप्लॉय किए गए AI एजेंट्स को मॉडल के रूप में प्रस्तुत करता है, ताकि Open WebUI, openai SDK, LangChain और LiteLLM उनसे सीधे बात कर सकें। यह स्ट्रीमिंग और टोकन उपयोग की रिपोर्टिंग को सपोर्ट करता है, हर चैट को उसके अपने वार्तालाप में रखता है, और एजेंट के अप्रूवल गेट तब भी लागू रहते हैं। यह API डिफ़ॉल्ट रूप से बंद रहता है और इसका अपना API-कुंजी ऑथेंटिकेशन है।
क्या कई उपयोगकर्ता और टीमें एक ही EDDI डिप्लॉयमेंट साझा कर सकते हैं?
हाँ। प्रति-उपयोगकर्ता वर्कस्पेस हर एजेंट और कॉन्फ़िगरेशन को एक मालिक, Keycloak ग्रुप्स से मैप किया गया एक व्यक्तिगत या टीम स्पेस, और उपयोग, देखने, संपादन या स्वामित्व के स्तर पर स्पष्ट शेयरिंग देते हैं। आप साइन-इन किए हुए उपयोगकर्ताओं की डायरेक्टरी से लोगों के साथ नाम से शेयर करते हैं, उन्हें सूचना मिलती है, और जो कोई ऐसे लिंक पर पहुँचता है जिसे वह खोल नहीं सकता, वह मालिक से एक्सेस माँग सकता है। Connections एजेंट्स को संगठन-व्यापी कुंजी, सर्विस अकाउंट, या हर उपयोगकर्ता के अपने OAuth खाते से बाहरी सिस्टम कॉल करने देते हैं, ताकि किसी एजेंट को उतने तक ही सीमित रखा जा सके जितना उसे इस्तेमाल करने वाले व्यक्ति को करने की अनुमति है। वर्कस्पेस वैकल्पिक (opt-in) हैं, और मौजूदा रिसोर्सेज़ बैकफ़िल किए जाते हैं, ताकि इन्हें चालू करने पर कुछ भी गायब न हो।
EDDI के साथ मैं कौन-से LLM इस्तेमाल कर सकता हूँ?
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 में चलाने का सटीक कॉन्फ़िगरेशन दिखाता है।