
LLM CLI를 활용한 배치 텍스트 분석: 500개의 리뷰, 하나의 For Loop, 단 몇 센트의 비용
요약
LLM CLI 도구인 `bl`을 사용하여 대량의 텍스트 데이터를 저비용으로 배치 처리하는 가이드를 제공합니다. 규칙을 파일로 관리하고 JSON 출력을 활용하여 모델의 답변 표류(drift)를 방지하는 효율적인 워크플로우를 설명합니다.
핵심 포인트
- CLI를 활용해 대화형 채팅의 답변 표류 문제를 해결하고 일관된 결과 도출
- 규칙(rule.txt)을 파일로 분리하여 모든 배치 작업에 동일한 프롬프트 적용
- 저가형 모델(qwen-turbo)을 사용하여 고성능 모델 대비 비용을 획기적으로 절감
- 파일 단위 입출력 및 JSON 형식을 통해 데이터 처리의 안정성 확보
저는 500개의 Etsy 리뷰를 한 번에 20개씩 채팅 탭에 붙여넣어 AI가 라벨링(labeling)하도록 시도했습니다. 세 번째 배치(batch)에 이르자, 모델은 제가 설정한 라벨링 체계에 없던 새로운 카테고리를 조용히 만들어냈습니다. 이것은 모델의 문제가 아니라 컨테이너(container)의 문제입니다. 긴 대화는 표류(drift)하지만, 배치 작업에는 표류하지 않는 규칙이 필요합니다.
그래서 저는 작업 전체를 터미널(terminal)로 옮겼습니다. 이 포스트는 다음 작업들에 대한 전체 가이드입니다: 500개 리뷰에 대한 감성 라벨링 (sentiment labeling), 계약 리스크 체크리스트, 학위 논문 챕터를 위한 AI 글쓰기 점검, 그리고 2시간 분량의 강의 영상을 Obsidian 노트로 변환하기. 이번 주의 총 비용은 0.50달러 미만이었습니다.
도구 (The Tool)
bl은 Alibaba Cloud Model Studio를 위한 CLI(Command Line Interface)입니다. Node.js로 설치하세요:
npm install -g bailian-cli
Model Studio 콘솔에서 무료 API 키를 받으세요 (신규 계정에는 무료 티어가 포함되어 있습니다). 그 다음:
bl auth login
패턴: 파일로서의 규칙, 파일로서의 입력, JSON으로서의 출력
전체 접근 방식은 한 문장으로 요약됩니다: 라벨링 규칙을 파일에 넣고, 파일로부터 입력을 공급하며, 구조화된 출력을 파일로 작성하는 것입니다. 모든 호출은 동일한 규칙을 받으므로, 구조적으로 표류(drift)가 사라집니다.
rule.txt:
당신은 리뷰 분석가입니다. 입력된 리뷰에 대해 다음 JSON을 출력하세요: {"sentiment": "positive/negative/neutral", "aspect": ["quality", "shipping", "packaging", "price", "service" 중 일치하는 항목], "intent": "praise/complaint/suggestion/question", "summary": "10단어 미만"}. JSON만 출력하세요.
루프(loop):
for f in reviews/*.txt; do bl text chat --model qwen-turbo --system "$(cat rule.txt)" --message "$(cat "$f")" --output json > "out/$(basename "$f" .txt).json"; done
세 가지 의도적인 선택:
--model qwen-turbo: 레이블링 (labeling)은 추론 (reasoning) 작업이 아니라 공장 작업과 같습니다. 50개의 샘플을 병렬로 비교했을 때, 저가형 모델이 플래그십 기본 모델과 대등한 성능을 보이면서도 비용은 한 자릿수(order of magnitude)만큼 낮았습니다. 500개의 리뷰 배치 작업 비용은 단 몇 센트에 불과했습니다.--output json: 결과가 스프레드시트나 스크립트로 즉시 입력됩니다. (파이프 출력 (Piped output)은 어차피 기본값이 JSON입니다.)- 리뷰당 파일 생성 (File-per-review): 특수 문자로 인해 3개의 항목이 실패했습니다. 재시도할 때 배치 전체가 아닌 정확히 실패한 3개의 파일만 다시 실행하면 되었습니다.
순차 실행 (Sequential run): 약 40분. --concurrent 4 사용 시: 약 11분.
종합 결과: 부정적 감성 (negative sentiment)의 62%가 "배송"을 지적했으며, 17개의 제품 제안 사항이 별점 5점 리뷰 속에 숨어 있었습니다. 제 친구는 사흘 밤 동안 그 리뷰들을 훑어보고 막연한 느낌만 얻었지만, 루프 (loop)는 수치로 결과를 가져왔습니다.
계약서 → 리스크 체크리스트
동일한 명령어를 사용하되, 계약서(contract)만 다릅니다 (언어유희를 의도했습니다). 핵심은 부정적 제약 조건 (negative constraint)입니다:
bl text chat --system "You are a contract reviewer. List ONLY clauses that are unfavorable or unusual for the contractor. For each: quote the exact wording, explain the risk, suggest a redline. Skip boilerplate." --message "$(cat agreement.txt)"
"boilerplate(상용구)를 건너뛰라"는 지시가 없었다면, 모델은 모든 표준 조항을 성실히 검토하느라 정작 중요한 신호 (signal)를 묻어버렸을 것입니다. 이 지시 덕분에 저의 9페이지짜리 프리랜서 계약서는 네 개의 플래그(flagged) 항목으로 요약되어 돌아왔습니다. 여기에는 최종 결제 전에 발효되는 지식재산권(IP) 양도 조항이 포함되어 있었습니다. 각 항목에는 제 답장에 바로 붙여넣을 수 있는 정확한 인용구가 포함되었습니다.
한계점: 이것은 분류 (triage) 작업입니다. 실제 큰 돈이 걸린 문제라면, 이 체크리스트는 변호사에게 가져갈 자료로 활용해야 합니다.
논문을 위한 AI 적합성 검사
이제 대학들은 제출물에 대해 AI 콘텐츠 탐지 (AI-content detection)를 실행하며, 제 사촌도 스스로 점검이 필요했습니다. 솔직하게 먼저 말씀드리자면, 어떤 도구도 탐지기를 통과할 것이라고 보장할 수 없으며, AI가 AI를 탐지하는 과정에서 실제 오탐 (false positives)이 발생합니다. 효과적인 방법은 더 겸손한 접근입니다. 기계적인 느낌이 가장 강한 문단들을 찾아내고, 문장 단위의 재작성 지침을 받는 것입니다:
bl text chat --system "Analyze the input for AI-generation markers: mechanical parallel structures, stock transitions, vague claims with no concrete detail. Rate each paragraph High/Medium/Low and give specific humanization suggestions, down to the sentence." --message "$(cat chapter3.txt)"
두 문단이 '높음 (High)'으로 결과가 나왔는데, 둘 다 그녀가 거의 수정하지 않은 AI 출력물이었습니다. 그녀는 제안된 내용을 바탕으로 직접 그 문단들을 다시 작성했습니다.
2시간 강의 → Obsidian 노트
명령어는 다르지만 철학은 같습니다. bl vision describe는 로컬 비디오 파일을 직접 가져옵니다:
bl vision describe --video ./lecture.mp4 --prompt "This is a course lecture. Output Markdown study notes: chapters in teaching order, each with core arguments, key examples, and any formulas or code. End with a takeaway list. Use Obsidian-compatible syntax."
몇 분 후, 장(chapter)별로 구분된 노트가 완성되었습니다. 저는 120분 대신 25분 동안 비디오를 시청했습니다. 전용 요약 도구들은 더 세련되어 있지만 (타임스탬프, 브라우저 확장 프로그램 등) 구독 기반입니다. 한 달에 비디오를 두 개 정도 본다면, 호출당 비용을 지불하는 방식이 승리하며, 노트 형식은 제가 프롬프트(prompt)에 입력한 대로 결정됩니다.
비용
주말에 bl usage stats --days 7을 실행해 보니: 위에서 언급한 모든 작업이 0.50달러 미만이었으며, 대부분 무료 티어 (free tier) 범위 내에 있었습니다. 대량 작업을 실행하기 전에 bl usage free를 통해 남은 무료 할당량을 확인하는 것은 한 번쯤 살펴볼 가치가 있습니다.
사용해야 할 때 (그리고 사용하지 말아야 할 때)

이 방식은 **대량의 작업, 반복적인 작업, 그리고 구조화된 출력 (structured output)**이 필요한 경우 — 리뷰, 티켓, 설문조사, 계약서 분류 (contract triage), 강의 백로그 등 — 에 사용하세요. 만약 한 달에 텍스트를 하나씩만 분석한다면 (채팅 탭으로 충분합니다) 또는 오류가 전혀 없는 출력이 필요하다면 (AI는 분류 계층 (triage layer)이지, 최종 승인자 (signature)가 아닙니다) 이 방식은 건너뛰셔도 됩니다.
직접 읽지 않은 텍스트 더미를 가지고 있다면, 무료 티어만으로도 이 포스트의 모든 내용을 실행하기에 충분합니다: 여기에서 가입하세요. 그러면 "읽지 않음"과 "체크리스트가 포함된 읽음" 상태 사이의 거리는 단 하나의 For Loop (for 루프)만큼입니다.
여러분이 미뤄왔던 가장 큰 배치 텍스트 (batch-text) 작업은 무엇인가요? 댓글로 알려주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기