zioinfo-mail/manual/11_확장개발_Priority3_AI에이전트.md
DESKTOP-TKLFCPR\ython e228faabf5 feat(itsm): G-1~G-12 확장 기능 + 하네스/봇/설치스크립트 구현
G-1: 메신저 Webhook Relay + _send_to_room 실제 httpx 호출 구현
G-2: POST /api/tasks/bulk SR 대량작업 엔드포인트 (최대 100건)
G-3: 라이선스 만료 알림 스케줄러 (매일 09:00 KST)
G-4: 체험판 upgrade_banner 필드 + license.py 배너 로직
G-5: core/auto_rca.py + incidents/problem auto-rca 엔드포인트
G-6: core/deploy_impact.py + vibe impact-analysis 엔드포인트
G-7: core/ticket_classifier.py + SR 생성 시 AI 분류 + ai-suggestion API
G-8: VulnPatchRecord 모델 + vuln_scan 패치추적 4개 엔드포인트
G-9: core/jira_sync.py + gateway Jira/Confluence 연동 엔드포인트
G-10: core/push_notify.py + routers/push.py + PushSubscription 모델
G-11: approvals 다중승인 (위임/서명/기한초과/마감연장)
G-12: alembic.ini + migrations/ + cicd/migrate_to_postgres.sh

하네스: guardia-orchestrator 확장기능 Phase 반영
봇명령어: /sr /status /license /bulk 슬래시 명령어 추가
설치스크립트: setup/ (Ubuntu, CentOS, RHEL, Windows) --test 옵션 포함

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 18:18:52 +09:00

5.7 KiB

GUARDiA ITSM — Priority 3: AI 에이전트 확장

문서 버전: 1.0 | 작성일: 2026-05-25


1. 장애 RCA 자동 초안 생성

목적

INCIDENT_TRIAGE 에이전트 확장. RESOLVED 상태 장애에 대해 Ollama로 RCA 문서 초안을 자동 생성한다.

동작 흐름

1. tb_incident WHERE status='RESOLVED' AND rca_draft IS NULL 조회
2. LLM 프롬프트 구성:
   - 장애 제목, 설명, 등급, 발생~해소 시각, 조치 이력
3. Ollama json_generate() 호출
4. 결과 구조:
   {
     "root_cause": "근본 원인",
     "timeline": "사건 타임라인",
     "impact": "영향 범위",
     "resolution": "해결 과정",
     "preventive_measures": "재발 방지 조치",
     "lessons_learned": "교훈"
   }
5. tb_incident.rca_draft 컬럼에 저장 (JSON)
6. AgentApproval(PENDING) 생성 — 담당자 검토 후 최종 확정

구현 위치

core/agents.py_incident_triage() 핸들러 하단 추가

# RESOLVED 장애 RCA 초안 생성
resolved_incidents = await db.execute(
    select(Incident).where(
        Incident.status == "RESOLVED",
        Incident.rca_draft == None
    ).limit(5)
)
for inc in resolved_incidents.scalars():
    rca = await llm.json_generate(rca_prompt(inc), agent.llm_model)
    inc.rca_draft = rca
    await db.commit()

2. 에이전트 간 메시지 전달

목적

CEO 에이전트가 CTO/PM_AGENT에게 태스크를 위임할 수 있도록 에이전트 간 메시지 전달 체계를 구현한다.

신규 DB 테이블: tb_agent_message

CREATE TABLE tb_agent_message (
    id           INTEGER PRIMARY KEY,
    from_agent_id INTEGER REFERENCES tb_agent_config(id),
    to_agent_id   INTEGER REFERENCES tb_agent_config(id),
    message_type  VARCHAR(30),  -- TASK_DELEGATION / STATUS_UPDATE / ESCALATION
    subject       VARCHAR(200),
    body          TEXT,
    metadata      JSON,
    is_read       BOOLEAN DEFAULT FALSE,
    created_at    DATETIME DEFAULT CURRENT_TIMESTAMP,
    read_at       DATETIME
);

메시지 타입

타입 설명 트리거
TASK_DELEGATION 태스크 위임 CEO → CTO: 개발 태스크
STATUS_UPDATE 상태 보고 CTO/Dev → CEO: 완료 보고
ESCALATION 에스컬레이션 하위 에이전트 → 상위 에이전트

API 엔드포인트 추가

GET  /api/agents/{id}/messages      수신 메시지 목록
POST /api/agents/{id}/messages      메시지 전송
PATCH /api/agents/messages/{msg_id}/read  읽음 처리

3. KB 품질 검토 자동화

목적

KB_CURATOR가 생성한 초안에 자동으로 품질 점수를 부여하고, 기준 이상이면 자동 발행한다.

품질 평가 기준

항목 가중치 설명
completeness 40% 증상/원인/해결책 3섹션 완성도
clarity 30% 문장 명확성 및 가독성
actionability 30% 실제 조치 가능한 구체적 내용 여부

동작 흐름

# kb_curator 핸들러 확장
quality = await llm.json_generate(
    quality_prompt(kb_doc),
    agent.llm_model
)
# quality = {"completeness": 85, "clarity": 78, "actionability": 82, "overall": 82}

kb_doc.quality_score = quality.get("overall", 0)
if kb_doc.quality_score >= 80:
    kb_doc.published = True  # 자동 발행
    approval.status = "AUTO_APPROVED"
else:
    approval.status = "PENDING"  # 수동 검토 필요

모델 변경 (models.py)

KBDocumentquality_score: int 컬럼 추가


4. WBS 지연 완료 예측

목적

WBS_MONITOR 핸들러 확장. 완료율 추이를 분석하여 프로젝트 완료 예상일을 계산한다.

예측 알고리즘

# 최근 7일간 완료율 기울기 계산
prev_rate = wbs_snapshot_7days_ago.completion_rate  # 예: 45%
curr_rate = current_completion_rate                  # 예: 52%
daily_delta = (curr_rate - prev_rate) / 7            # 1%/일

remaining = 100 - curr_rate                          # 48%
est_days = remaining / daily_delta if daily_delta > 0 else 999
est_completion = date.today() + timedelta(days=est_days)

# planned_end_date와 비교 → 초과 시 리스크 등록
if est_completion > project.planned_end_date:
    delay_days = (est_completion - project.planned_end_date).days
    # WBS 리스크 자동 등록

저장 위치

si_project.estimated_completion 컬럼 업데이트 (또는 AgentTask에 기록)


5. 에이전트 파인튜닝 파이프라인

목적

누적된 tb_agent_task(COMPLETED) 데이터를 기반으로 Ollama 커스텀 모델을 파인튜닝한다.

파이프라인 단계

1. 데이터 수집
   SELECT input_data, output_data FROM tb_agent_task
   WHERE status='COMPLETED' AND tokens_used > 0
   LIMIT 1000

2. JSONL 파일 생성 (Ollama fine-tune 포맷)
   {"prompt": "...", "response": "..."}
   → /opt/guardia/finetune/guardia-agent-v2.jsonl

3. Modelfile 생성
   FROM guardia-agent
   TRAIN /opt/guardia/finetune/guardia-agent-v2.jsonl

4. ollama create 실행
   ollama create guardia-agent-v2 -f Modelfile.guardia-v2

5. 헬스체크 후 active model 전환
   AgentConfig.llm_model = "guardia-agent-v2"

API 엔드포인트

POST /api/agents/finetune/start   파인튜닝 시작 (ADMIN only)
GET  /api/agents/finetune/status  진행 상태 조회

구현 위치

core/llm_client.pyfine_tune() 메서드 추가

async def fine_tune(self, dataset_path: str, model_name: str) -> bool:
    """Ollama 모델 파인튜닝 실행"""
    proc = await asyncio.create_subprocess_exec(
        "ollama", "create", model_name,
        "-f", f"Modelfile.{model_name}",
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.PIPE
    )
    stdout, stderr = await proc.communicate()
    return proc.returncode == 0