CASE STUDY / 01LLM AGENT · RELIABILITY
01 — EVIDENCE-BOUND AUTOMATION

ALGO
PIPELINE

뉴스 수집부터 카드뉴스 생성·검증·사람 승인·Instagram 게시 경계·성과 기록까지 연결하되, 검증되지 않은 결과는 다음 단계로 넘기지 않는 AI 콘텐츠 운영 시스템을 설계했습니다.

TYPEPersonal Project
ROLEAI · Backend · Automation
STATUSHardened main / staged rollout
STACKPython · FastAPI · SQLite · LLM API
Core question
LLM 자동화를 어떻게 검증·승인·발행 경계 안에서 운영할 것인가?
Problem

생성 성공과 운영 성공은 다릅니다.

출처에 없는 수치 생성, 검증되지 않은 Queue 항목, 원격 게시 성공 여부가 불확실한 상태의 재시도, 테스트 중 운영 DB 오염은 실제 자동화에서 모두 운영 위험이 됩니다. 그래서 생성 품질만 높이는 대신 각 단계의 근거·상태·권한을 코드로 분리했습니다.

My role

파이프라인을 신뢰성 중심 운영 구조로 재설계했습니다.

  • Queue Lineage V2로 source metadata·schema version·lineage hash 검증
  • Claim/Evidence 분리, deterministic verifier와 Semantic Critic을 이용한 Fact Checker V2
  • publisher 호출 전 durable attempt 기록과 uncertain/stale attempt 자동 재시도 차단
  • 운영 DB와 테스트 DB를 분리하고 CI에서 DB/WAL/SHM 생성 여부까지 검증
  • Instagram Login 인증, read-only account preflight, credential/token 로그 제거
  • Analytics V2의 실험·성과 데이터와 사람 검토 경계를 분리
System

Collect → Verify → Review → Publish를 하나의 상태 흐름으로 연결했습니다.

COLLECTGENERATEVERIFYREVIEW
[BLOCK] unsupported numeric claim[PASS] Queue lineage attestation[SAFE] production DB mutation: 0[OFF] unattended publish by default
Decision

오류를 숨기지 않고 명시적인 실패 상태로 남겼습니다.

Deterministic Gate

숫자 근거, 필수 필드, schema·lineage 불일치처럼 명확히 판정할 수 있는 오류는 코드로 차단합니다.

Semantic Critic

문맥 왜곡이나 근거와 표현 사이의 의미 차이는 의미 기반 검증 단계에서 다시 확인합니다.

Fail-closed publish boundary

계정 불일치, 자격증명 오류, 공개 이미지 URL 미설정, 불확실한 원격 게시 상태에서는 Queue를 소모하거나 자동 재시도하지 않습니다.

Evidence

현재 main 기준으로 운영 경계를 증명합니다.

198Instagram 인증 하드닝 병합 시 전체 테스트
0해당 검증에서 production DB write
BLOCKED근거 없는 숫자 Claim
OFF기본 unattended auto-publish
현재 기준. 초기 Quality Hardening PR #1은 이미 main에 병합됐고 이후 staged rollout, Windows test hardening, public image delivery guard, Instagram Login credential hardening까지 추가 병합됐습니다. 실제 무인 게시 활성화는 별도 운영 승인 경계로 남겨 두었습니다.
Output

파이프라인이 실제로 만들어낸 결과물입니다.

아래 두 장은 2026-09-15 실행에서 생성된 실제 카드뉴스입니다. 원문 기사를 수집해 주제를 잡고, 각 Claim을 근거에 연결한 뒤 렌더링까지 자동으로 수행했습니다.

Algo Pipeline이 생성한 카드뉴스 커버. 제목 "AI 속도 조절, 협약인가"와 발행일 2026.09.15가 표시된 실제 출력물
01 / 수집된 원문 → 생성된 커버Generated
Algo Pipeline이 생성한 콘텐츠 카드. "근거로 확인된 내용" 라벨 아래 검증된 Claim이 표시된 실제 출력물
02 / Claim → 근거로 확인된 내용Fact-checked
이 실행의 기록. 원문은 The Verge “Is Big Tech’s AI slowdown a safety pact or a cartel?”이며, fact_confirmed 4 · disputed 0 · unverifiable 0, source_lineage_sha256 기록, publish_requested=false로 남았습니다. 생성은 성공했지만 자동 게시는 기본 OFF 경계에서 멈춘 상태입니다.
Active experiment

다음 단계는 생성량이 아니라 실제 완성도입니다.

PR #7은 Ready for review 상태이며, 표지 문구·CTA 톤·영상 배경(Pexels) 로딩·무영상 카드 정렬·ffmpeg 안정성·의존성 충돌 해결까지 카드뉴스 실사용 품질 전반을 다룹니다. 마지막 CI(2026-09-28)는 통과했고, 아직 main에 병합되지 않았습니다.

그 사이 main에는 운영 경계를 우회하던 경로를 막는 수정이 계속 병합됐습니다. --threads 모드가 Queue V2와 사람 승인을 우회하던 문제(#12), 주제 출처 가드의 우회 경로(#10), DevOrch 보호 경로 지정(#13), 시작 시 import 순서 오류·테스트 DB 분기·일시적 네트워크 오류 재시도 수정(#14–#17)입니다.

Troubleshooting

제 변경이 만든 회귀도 원인 커밋까지 기록했습니다.

승인을 우회하는 옵션

증상 --threads 옵션이 Queue V2 검증과 승인을 거치지 않고 게시하는 경로였습니다. 해결 모든 모드에서 차단했습니다(PR #12).

한 번도 실행되지 않던 테스트용 DB 분기

증상 ALGO_ENV=test 블록이 production·development 분기 안에 들어 있어 실행된 적이 없었습니다. 원인 이전 커밋에서 제가 분기 구조를 잘못 만들었습니다. 해결 분기를 바로잡고, CI에서 DB·WAL·SHM 파일 생성 여부까지 검증했습니다.

일시적 네트워크 오류가 재시도되지 않음

증상 call_with_retry가 일시적 오류를 재시도하지 않고 바로 예외를 던졌습니다. 원인 직전 커밋이 만든 회귀입니다. 해결 재시도 대상을 바로잡았습니다(PR #16).

Learning

프롬프트보다 실패를 통제하는 구조가 먼저였습니다.

LLM 서비스의 신뢰성은 좋은 프롬프트 하나보다 출처 lineage, 검증 단계, 사람 승인, 재시도 정책과 관측 가능한 상태 전이에서 결정된다는 점을 구현으로 확인했습니다.

NEXT CASE STUDYMEDI-MATRIX↗