AI를 오케스트레이션하는 데 필요한 모든 것
EDDI는 AI 에이전트를 구축, 배포, 관리하기 위한 완전한 프로덕션 대응 플랫폼을 제공합니다, 보일러플레이트 없이.

대화 턴의 흐름
단계를 선택하면 그 단계가 하는 일, 설정, 기록하는 내용을 볼 수 있습니다.
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 패턴과 일치하는 호출은 사람이 결정할 때까지 일시 중지되고, 그 결정은 hitl.approval 항목으로 ledger에 기록됩니다. 자격 증명은 ${vault:keyName} 참조로 vault에서 가져옵니다.
파이프라인의 각 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"
}
}코어 플랫폼
EDDI를 완전한 AI 오케스트레이션 플랫폼으로 만드는 핵심 기능.
🖥️ EDDI 매니저
에이전트를 비주얼하게 구축, 배포, 모니터링하기 위한 프로덕션 대응 React UI, 11개 로케일 i18n, 라이브 채팅 디버깅, 감사 대시보드.
⚙️ Config-as-Code
에이전트 로직은 JSON 구성이며, 컴파일된 코드가 아닙니다. 프롬프트 엔지니어가 즉시 반복, 재컴파일 불필요.
🔌 MCP 서버 (89개 도구)
Model Context Protocol을 통한 완전한 AI 네이티브 제어. Claude Desktop, Cursor, 커스텀 클라이언트가 에이전트를 프로그래밍 방식으로 관리.
🔐 보안 우선
eval() 없음, Vault 통합, 경로 순회 보호, OIDC/Keycloak, 사용자별 워크스페이스, 암호화 감사 추적.
✋ 휴먼 인 더 루프
턴 일시 중지, 도구 호출 게이팅, 단계 승인. 승인 워크플로에 타임아웃 정책, Slack 카드, 장애 복구 상태를 제공합니다.
🚀 성능
Quarkus에서의 Java 25 가상 스레드, I/O 바운드 LLM 워크로드를 위한 수백만 개의 경량 스레드.
🤖 멀티 에이전트
의도 기반 디스커버리, 관리 대화, 그리고 투표, 공유 아티팩트, 사람 멤버를 갖춘 그룹 협업.
AI 기능
EDDI 에이전트를 더 스마트하고, 빠르며, 비용 효율적으로 만드는 고급 AI 기능.
🧠 메모리 & 컨텍스트
영구 메모리, 드림 통합, 롤링 요약, 토큰 인식 윈도잉. 기억하는 에이전트.
📚 지식 & RAG
웹사이트를 크롤링하거나 PDF, Word, Excel, PowerPoint 파일을 지식 베이스에 업로드하면 일정에 따라 새로 고쳐집니다. 8개 임베딩 제공자, 6개 벡터 스토어. 엔터프라이즈 지식 검색 즉시 사용 가능.
📈 모델 캐스케이딩
신뢰도 전략을 포함한 비용 최적화 멀티모델 라우팅. 이 패턴의 공개된 배포 사례는 품질을 유지하면서 추론 비용이 31~58% 감소했다고 보고합니다(근거).
🧭 19개 LLM 프로바이더
Claude, GPT, Gemini, Grok, DeepSeek, Kimi, Qwen, GLM, Mistral, Llama 등, 호스팅 또는 로컬. 모델 카탈로그에서 각 모델의 강점과 실행 방법을 확인하세요.
⏰ 스케줄링 & 하트비트
크론 트리거, 하트비트 웨이크업, 드림 사이클. 자율적으로 행동하는 프로액티브 에이전트.
내장 에이전트 도구
EDDI에는 에이전트가 대화 중에 호출할 수 있는 12개의 바로 사용 가능한 도구가 포함, 외부 설정 불필요.
설정 및 이식성
에이전트 구성은 이식 가능하고, 조합 가능하며, 동기화 준비 완료, 환경 간 마찰 없이 에이전트를 이동.
📤 Import / Export
에이전트를 ZIP 파일로 포터블하게. 자동 시크릿 제거. 가져오기는 병합 또는 덮어쓰기, 버전 충돌 없음.
🔄 Agent Sync
구조 매칭, 콘텐츠 diff, 선택적 리소스 피킹으로 인스턴스 간 실시간 동기화.
📝 Prompt Snippets
재사용 가능하고 버전 관리되는 시스템 프롬프트 빌딩 블록. {{snippets.safety_rules}}로 참조.