ทุกอย่างที่ต้องการ สำหรับ AI Orchestration
EDDI ให้แพลตฟอร์ม production-ready สมบูรณ์สำหรับสร้าง deploy และจัดการ AI agents ไม่ต้องเขียน boilerplate

หนึ่งเทิร์นของบทสนทนาทำงานอย่างไร
เลือกขั้นตอนเพื่อดูว่าทำอะไร ตั้งค่าอย่างไร และเขียนอะไรลงไป
Input
สิ่งที่เกิดขึ้นที่นี่
ข้อความเข้ามาจากแชต Slack, API หรือไคลเอนต์ MCP ข้อความดิบกลายเป็นรายการแรกของสเต็ปใหม่ใน Conversation memory ตอนนี้ยังไม่มี task ใดทำงาน ขั้นตอนนี้จึงแสดงสเต็ปในหน่วยความจำแทนรายการ audit
ค่าตัวอย่างเพื่อประกอบคำอธิบาย
{
"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 คือเงื่อนไข IF-THEN บนนิพจน์และ Conversation memory กฎที่ตรงเงื่อนไขทุกข้อจะส่งแอ็กชันออกมา การกำหนดเส้นทางเป็นการตั้งค่า ไม่ใช่โค้ด อินพุตเดิมจึงไปตามเส้นทางเดิมทุกครั้ง
แต่ละ 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 เขียนรายการ audit ที่ลงนามแล้วหนึ่งรายการ ระบุสิ่งที่อ่าน สิ่งที่สร้าง และรายละเอียดของโมเดลและเครื่องมือ
แต่ละ 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 แปลงแอ็กชันที่ส่งออกมาเป็นคำตอบ ทั้งข้อความและ quick reply คำตอบถูกเก็บในหน่วยความจำและส่งกลับไปยังช่องทางที่ข้อความมา
ค่าตัวอย่างเพื่อประกอบคำอธิบาย
{
"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) และ property ที่มีขอบเขตระดับสเต็ป การสนทนา หรือผู้ใช้ (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"
}
}แพลตฟอร์มหลัก
ความสามารถหลักที่ทำให้ EDDI เป็น AI Orchestration Platform สมบูรณ์
🖥️ EDDI Manager
Production-Ready React UI สำหรับสร้าง deploy และ monitor เอเจนต์ 11 ภาษา, live chat debugging, audit dashboards
⚙️ Config-as-Code
Agent logic เป็น JSON configuration ไม่ใช่โค้ดที่คอมไพล์ ไม่ต้อง recompile
🔌 MCP Server (89 เครื่องมือ)
การควบคุม AI-native สมบูรณ์ผ่าน Model Context Protocol
🔐 ความปลอดภัยก่อน
ไม่มี eval(), การผสานรวม Vault, การป้องกัน path traversal, OIDC/Keycloak, พื้นที่ทำงานรายผู้ใช้, cryptographic audit trails
✋ มนุษย์ร่วมตัดสินใจ
หยุดเทิร์นชั่วคราว กำกับการเรียกใช้เครื่องมือ หรือกำหนดให้ต้องอนุมัติแต่ละเฟส เวิร์กโฟลว์การอนุมัติ พร้อมนโยบายหมดเวลา การ์ด Slack และสถานะที่ทนต่อระบบล่ม
🚀 ประสิทธิภาพ
Java 25 Virtual Threads บน Quarkus ล้านๆ lightweight threads สำหรับ I/O-bound LLM workloads
🤖 มัลติเอเจนต์
Intent-based discovery, managed conversations และการทำงานร่วมกันแบบกลุ่ม พร้อมการลงคะแนน, artifacts ที่ใช้ร่วมกัน และมนุษย์ในฐานะสมาชิก
ความสามารถ AI
ฟีเจอร์ AI ขั้นสูงที่ทำให้เอเจนต์ EDDI ฉลาดขึ้น เร็วขึ้น และประหยัดต้นทุนมากขึ้น
🧠 หน่วยความจำและบริบท
หน่วยความจำถาวร, การรวม Dream, สรุปแบบต่อเนื่อง และการจัดหน้าต่างที่รับรู้โทเค็น เอเจนต์ที่จำได้
📚 ความรู้และ RAG
ครอลเว็บไซต์หรืออัปโหลดไฟล์ PDF, Word, Excel และ PowerPoint เข้าสู่ฐานความรู้ที่รีเฟรชตามกำหนดเวลา 8 ผู้ให้บริการ embedding, 6 vector stores การดึงข้อมูลความรู้ระดับองค์กรพร้อมใช้งาน
📈 การเรียงซ้อนโมเดล
การกำหนดเส้นทางหลายโมเดลที่ปรับต้นทุนด้วยกลยุทธ์ความเชื่อมั่น การใช้งานจริงของรูปแบบนี้ที่เผยแพร่แล้วรายงานต้นทุน inference ลดลง 31 ถึง 58% โดยคุณภาพคงเดิม (หลักฐาน)
🧭 ผู้ให้บริการ LLM 19 ราย
Claude, GPT, Gemini, Grok, DeepSeek, Kimi, Qwen, GLM, Mistral, Llama และอื่นๆ ทั้งแบบโฮสต์และแบบรันในเครื่อง แคตตาล็อกโมเดลแสดงว่าแต่ละโมเดลเก่งด้านใดและรันอย่างไร
⏰ การจัดตารางและ Heartbeats
ทริกเกอร์ Cron, การปลุก Heartbeat, วงจร Dream เอเจนต์เชิงรุกที่ดำเนินการด้วยตนเอง
เครื่องมือ Agent ในตัว
EDDI มาพร้อมเครื่องมือพร้อมใช้งาน 12 รายการที่ Agent สามารถเรียกใช้ระหว่างสนทนา ไม่ต้องตั้งค่าภายนอก
Config และ Portability
การตั้งค่า Agent พร้อมพกพา ประกอบได้ และพร้อมซิงค์ ย้าย Agent ระหว่างสภาพแวดล้อมได้อย่างราบรื่น
📤 Import / Export
Agent พกพาเป็นไฟล์ ZIP พร้อมการล้าง secrets อัตโนมัติ การนำเข้ารวมหรือเขียนทับ ไม่มีปัญหาเวอร์ชัน
🔄 Agent Sync
ซิงค์สดระหว่างอินสแตนซ์พร้อมการจับคู่โครงสร้าง การเปรียบเทียบเนื้อหา และการเลือกทรัพยากร
📝 Prompt Snippets
บล็อกสร้าง system prompt ที่ใช้ซ้ำได้และมีเวอร์ชัน อ้างอิงด้วย {{snippets.safety_rules}}
ความเป็นเลิศทางวิศวกรรม
📊 Observability
ทุกขั้นตอนถูกบันทึกใน immutable audit trails
🧪 คุณภาพโค้ด
20,000+ เทสต์ ผ่านทุกการ merge บังคับ instruction coverage >90% และ branch coverage >80% มีเกต CodeQL, Checkstyle และ formatter ใน CI
🧩 AI-Ready
89 MCP tools, API ที่เข้ากันได้กับ OpenAI, CRUD patterns ที่คาดเดาได้, API ที่มีเอกสารในตัว สร้างสำหรับ coding agents