Files
service-catalog/update_catalog/docs/design/03-llm-summarizer.md
T
2026-03-06 17:06:07 +09:00

7.6 KiB

LLM Summarizer + Docs Updater 설계

1. 개요

Structured Diff JSON과 Breaking Change 판단 결과를 입력받아 자연어 업그레이드 주의사항 문서를 생성하고, 해당 차트 버전의 CUSTOM-README.md에 반영한다.

LLM의 유일한 역할: Structured JSON → Markdown 문서 변환. Diff 생성이나 Breaking 판단은 수행하지 않는다.


2. LLM Summarizer

2.0 실행 조건

  • generate_upgrade_doc항상 실행한다 (breaking 여부 무관).
  • breaking=true → LLM을 사용하여 custom-values.yaml 수정 방법을 포함한 상세 가이드 생성.
  • breaking=false → 템플릿 기반 간단 요약 생성 (LLM 미호출).

카탈로그는 신규 배포를 위한 차트 보관소이므로, breaking 여부와 무관하게 모든 업그레이드에 주의사항 기록이 필요하다.

2.1 입력

{
  "chart": "airflow",
  "from_version": "1.2.3",
  "to_version": "1.3.0",
  "values": { ... },
  "templates": { ... },
  "crd": { ... },
  "dependencies": { ... },
  "breaking": true,
  "severity": "high",
  "breaking_reasons": [
    {
      "type": "values_key_removed",
      "key": "ingress.enabled",
      "detail": "custom-values.yaml에서 사용 중인 key가 삭제됨 — 수정 필요"
    }
  ],
  "warnings": [
    {
      "type": "service_port_changed",
      "resource": "Service/airflow-webserver",
      "detail": "port changed from 8080 to 8081"
    }
  ],
  "docs_context": {
    "CUSTOM-README.md": "..."
  }
}

dip-catalog 구조에서는 버전 디렉토리 내 CUSTOM-README.md 내용을 docs_context로 제공한다.

2.2 Prompt 설계

당신은 Kubernetes Helm 업그레이드 주의사항 문서를 작성하는 전문가입니다.

두 Helm 차트 버전 간 변경점을 담은 Structured Diff JSON이 제공됩니다.
이 카탈로그는 신규 배포를 위한 것이며, custom-values.yaml 수정 필요 여부가 핵심입니다.

## 작업
1. 핵심 변경 사항을 평문으로 요약합니다.
2. custom-values.yaml 수정이 필요한 항목(breaking_reasons)을 상세히 설명합니다.
3. 신규 배포 시 참고할 주의사항(warnings)을 기록합니다.
4. 아래 형식의 간결한 Markdown 문서를 생성합니다.

## 규칙
- 입력 JSON에 없는 내용은 절대 추가하지 마세요.
- 추측하지 마세요.
- docs_context는 보조 설명에만 사용하고, diff에 없는 변경을 추가하지 마세요.
- errors가 있으면 분석이 불완전할 수 있음을 명시하세요.
- 배포 담당자가 바로 참고할 수 있도록 명확하게 작성하세요.

## 출력 형식
아래 Markdown 구조를 정확히 지키세요 (`## {to_version}` 헤더는 포함하지 마세요 — `update_docs_file`이 관리):

### 변경 요약
- from_version: <from_version>
- to_version: <to_version>
- <핵심 변경 사항 bullet points>

### custom-values.yaml 수정 필요 항목
<breaking=true면 항목별 수정 방법>
<breaking=false면 "없음">

### 배포 시 주의사항
<warnings가 있으면 나열>
<없으면 섹션 생략>

### 참고
- severity: <severity>
- breaking: <true/false>

---

Input:
<Structured Diff JSON>

2.3 토큰 예산 관리

대형 chart(airflow, kafka 등)는 Structured Diff JSON이 매우 클 수 있다.

전략 설명
중요도 기반 필터링 breaking_reasons와 changed 항목만 포함, unchanged는 제외
template diff 요약 리소스별 상세 diff 대신 변경된 리소스 목록만 전달
청크 분할 values / templates / crd를 각각 별도 LLM 호출 후 결과 합산
토큰 상한 설정 입력 JSON 최대 크기 제한 (예: 50,000 tokens), 초과 시 요약 버전 사용

2.4 출력 검증

  • 금지 규칙: 입력 JSON에 없는 버전/리소스를 언급하면 실패 처리.
  • 서식 검증: Markdown 구조가 규정과 다르면 1회 재생성, 실패 시 fallback 템플릿으로 대체.
  • 요약 품질 기준: breaking_reasons 누락/허위 서술은 오류로 간주.

2.5 예상 출력 (breaking=true)

update_docs_file## {to_version} 헤더를 추가하므로, LLM 출력은 ### 수준부터 시작한다.

### 변경 요약
- from_version: 1.2.3
- to_version: 1.3.0
- Image tag 1.2.3 → 1.3.0 업데이트
- CPU limit 기본값 추가 (all containers)
- 새 환경변수 `AIRFLOW__CORE__NEW_SETTING` 추가 (scheduler)

### custom-values.yaml 수정 필요 항목
- **`ingress.enabled` 키 삭제**: 차트에서 해당 key가 제거되었습니다.
  현재 custom-values.yaml에서 `ingress.enabled: true`로 설정하고 있는 경우,
  신규 방식(`ingress.create: true` 등)으로 수정이 필요합니다.

### 배포 시 주의사항
- **Service port 변경**: `airflow-webserver` port 8080 → 8081.
  Ingress, load balancer 설정 확인 필요.

### 참고
- severity: high
- breaking: true

2.6 예상 출력 (breaking=false)

템플릿 기반 fallback 출력 (LLM 미호출).

### 변경 요약
- from_version: 1.2.3
- to_version: 1.3.0
- Chart airflow 1.2.3 → 1.3.0 업데이트
- Values: +2 추가 / -0 삭제 / ~3 변경
- Templates: +0 추가 / -0 삭제

### custom-values.yaml 수정 필요 항목
없음

### 참고
- severity: warning
- breaking: false

3. Docs Updater 설계

3.1 역할

생성한 업그레이드 주의사항 Markdown을 해당 차트 버전의 CUSTOM-README.md에 반영한다. (CUSTOM-README.md는 배포에 관한 내용을 포함하는 문서로, 업그레이드 주의사항의 적합한 위치다.)

3.2 처리 방식

1. diff/breaking 결과로 업그레이드 주의사항 생성 (breaking=true면 LLM, 아니면 템플릿)
2. manifests/helm/<chart>/<to_version>/CUSTOM-README.md에 반영
   - "# Upgrade History" 섹션이 없으면 파일 끝에 추가
   - 해당 버전 항목이 이미 있으면 skip (idempotent)
3. 파일 저장

3.3 파일 구조 규칙

  • 각 차트 버전 디렉토리의 CUSTOM-README.md에 업그레이드 주의사항을 추가한다.
  • CUSTOM-README.mdchart_updater가 이전 버전에서 carry-over하므로 기존 배포 내용은 유지된다.
  • BUILD-README.md는 차트 메타 정보(repo, 설치 명령어 등)를 유지한다.
  • 별도의 docs/upgrade.md는 생성하지 않는다.

3.4 중복 방지

이미 해당 버전 업그레이드 섹션이 존재하면 덮어쓰기 또는 스킵한다 (설정으로 제어).


4. Git PR Bot 설계

4.1 자동화 단계

1. 새 branch 생성: update-{chart}/{to_version}
2. 카탈로그 신규 버전 디렉토리 커밋 (manifests/helm/<chart>/<to_version>/)
3. CUSTOM-README.md 업그레이드 주의사항 섹션 포함
4. git commit
5. PR 생성

4.2 PR 메타데이터

PR 제목:

update {chart}: {from_version} → {to_version}

PR labels:

  • needs-review (breaking=true 시) — 담당자 확인 권장
  • auto-update (breaking=false 시) — 자동 업데이트, 검토 선택적

PR description:

## Helm Chart Update: {chart} `{from_version}` → `{to_version}`

**Severity**: `high`
**Breaking**: ✅ custom-values.yaml 수정 필요 (담당자 확인 권장)

### Breaking Changes
- `[values_key_removed]` ingress.enabled — custom-values.yaml에서 사용 중인 key 삭제

### Warnings
- `[service_port_changed]` Service/airflow-webserver — port 8080 → 8081

---
*Generated by update-catalog automation*

5. 관련 문서