자동화 신호를 숨기기 위한 QC 게이트 구축기

자동화는 예상치 못한 방식으로 그 정체를 드러냅니다.

저는 Bluesky를 위한 자동화 콘텐츠 파이프라인을 운영했습니다. 그런데 한 게시물에 "the content pipeline"이라는 문구가 포함되어 나갔습니다. 기술 블로그라면 괜찮겠지만, 소셜 타임라인에서는 경고 신호(red flag)가 됩니다. 독자들에게 봇과 대화하고 있다는 사실을 알려주기 때문입니다.

이를 방지하기 위해 품질 관리(QC) 스크립트를 구축했습니다. 이 스크립트는 생성 단계와 게시 단계 사이에서 게이트 역할을 합니다.

새로운 워크플로우는 다음과 같습니다: bluesky-qc.mjs → (PASS) bluesky-post-queue.mjs → Bluesky API

스크립트는 모든 항목을 검사하기 위해 네 가지 게이트를 사용합니다:

  • 게이트 1: 문구 필터링 정규 표현식(regex) 리스트를 사용하여 자동화를 암시하는 단어들을 잡아냅니다. "AI-generated", "cron", "content pipeline", "batch test"와 같은 용어들을 차단합니다. 게시물이 개발 보고서처럼 들린다면 통과하지 못합니다.

  • 게이트 2: 신선도 체크 두 가지 유형의 시의성이 떨어진(stale) 콘텐츠를 확인합니다: • 시의성이 떨어진 문구: 게시물이 지연될 경우 의미가 퇴색되는 "today"나 "just launched"와 같은 단어들을 잡아냅니다. • 시의성이 떨어진 타임스탬프: 항목이 14일보다 오래되었다면 거부됩니다.

  • 게이트 3: 참여도 예측 스크립트가 지난 300개의 게시물을 분석합니다. 새 게시물의 해시태그가 좋은 성과를 낼지 예측합니다. 현재는 경고(warning)만 기록하지만, 곧 강제 실패(hard fail)로 전환할 예정입니다.

  • 게이트 4: 품질 통과 (계획 중) 미세한 오류를 잡아내기 위해 품질 프로토콜을 사용하는 최종 레이어를 추가할 계획입니다.

모든 실패 사례는 거부 로그(rejection log)에 기록됩니다. 저는 일주일에 한 번 이 로그를 검토합니다. 이는 프롬프트를 수정하는 데 도움이 됩니다. 만약 게이트가 계속해서 "content pipeline"을 잡아낸다면, AI의 작성 방식을 바꿔야 한다는 것을 알 수 있습니다.

왜 단순히 더 나은 프롬프트를 사용하는 대신 게이트를 사용할까요? 프롬프트는 확률적(probabilistic)입니다. 실패할 수도 있습니다. 게이트는 결정론적(deterministic)입니다. 엄격한 규칙을 따릅니다.

두 레이어를 모두 사용하는 것이 인간적인 어조를 유지하는 가장 안전한 방법입니다.

출처: https://dev.to/morinaga/how-i-built-a-pre-post-qc-gate-that-blocks-bluesky-automation-from-self-revealing-41ja