PrintBrief: 로컬 AI를 이용해 복잡한 고객 메시지를 인쇄 준비가 된 주문으로 변환하기
이 글은 Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle에 제출하는 내용입니다.
제가 만든 것 (What I Built)
“Bhaiya, 25 copies nikal do, A4, kal chahiye.”
인쇄소 주인에게 이 메시지는 여러 질문을 남깁니다: 컬러인가 아니면 흑백인가? 단면 인쇄인가 양면 인쇄인가? 제본이 필요한가? 내일 몇 시에?
저는 비공식적인 고객 메시지를 구조화되고 편집 가능한 인쇄 주문서로 변환하는 로컬 AI 비서인 PrintBrief를 만들었습니다.
이 도구는 인쇄 지침을 추출하고, 누락되거나 모순되는 세부 사항을 표시하며, 명확화를 위한 질문을 제안합니다. 사장님은 주문서를 검토하고, 페이지 수를 계산하기 위해 PDF 파일을 추가한 다음, 가게의 요율을 기반으로 품목별 견적을 받습니다.
확인되면, 주문서는 견적 스냅샷과 다운로드 가능한 PDF 작업 명세서와 함께 로컬에 저장됩니다.
누가 비용을 지불할 수 있을까요? 메시지를 통해 정기적으로 주문을 받는 작은 동네 및 캠퍼스 인쇄소입니다. 제안하는 가치는 수동적인 주문 입력 감소, 더 명확한 지침, 그리고 추측으로 인한 오류 감소입니다. 이러한 지불 의사는 아직 가게 사장님들과의 검증이 필요합니다.
데모 (Demo)
데모는 고객 메시지 추출, 누락 정보 프롬프트, 수동 수정, 견적 계산, 주문 확인 및 작업 명세서 다운로드를 보여줍니다.
코드 (Code)
인-브라우저 PDF 계산, 결정론적 정수 파이사(integer-paise) 가격 책정 및 작업 명세서 생성이 가능한 로컬 AI 인쇄소 주문 비서
PrintBrief — 로컬 AI 인쇄소 주문 비서
PrintBrief는 동네 및 캠퍼스 인쇄소(print shops)를 위해 설계된 로컬 우선 웹 애플리케이션입니다. 이 앱은 혼란스러운 고객의 WhatsApp/이메일 메시지(영어, Hinglish 또는 약어 사용)와 정확한 인쇄 생산 사양 사이의 격차를 해소합니다. 구체적으로는 로컬 오픈 가중치 LLM을 사용하여 요구사항을 추출하고, 브라우저 내에서만 PDF 페이지 수를 계산하며, 정수 단위 파이세(paise)로 결정론적 견적을 산출하고, 공식적인 인쇄 가능 작업 명세서(job slips)를 생성합니다.
1. 고객의 문제점 (The Customer Problem)
인쇄소 주인들은 고객 주문을 받을 때 빈번하게 마찰을 경험합니다:
- 혼란스러운 메시지: 고객들이 'Bhaiya 10 copy nikal do kal 10 baje'와 같이 양면/단면, 컬러/흑백, 용지 크기, 제본 방식, 오전/오후(AM vs PM) 등을 명시하지 않은 모호한 문자 메시지를 보냅니다.
- 비용이 많이 드는 인쇄 실수: 누락된 사양을 추측하는 것은 종이 낭비, 맞지 않는 제본, 그리고 분쟁의 여지가 있는 청구서로 이어집니다.
- 요청당 클라우드 비용 및 데이터 노출: 고객 문자를 타사 클라우드 AI API로 전송하면, 수백 건에 걸쳐 누적되는 요청당 추론(inference) 비용이 발생합니다...
View on GitHub
저장소: PrintBrief on GitHub
구축 방법 (How I Built It)
PrintBrief는 다음 기술들을 사용합니다:
- 인터페이스를 위해 React와 Vite를 사용했습니다.
- 로컬 백엔드를 위해 Node.js와 Express를 사용했습니다.
- 로컬 주문 추출을 위해 Ollama를 통한 Gemma 3 4B 모델을 사용합니다.
- 모델 출력을 검증하고 정규화하기 위해 Zod를 사용합니다.
- 브라우저 기반 PDF 페이지 계산 및 작업 명세서 생성을 위해 pdf-lib을 사용합니다.
- 로컬 주문 기록 및 저장된 견적 스냅샷을 위해 IndexedDB를 사용합니다.
이 오픈 가중치 모델은 핵심 작업을 수행합니다: 비공식적인 고객 언어를 해석하여 구조화된 주문 필드로 변환하는 것입니다. 이후 애플리케이션 규칙들이 모순되는 인쇄 지침이나 AM/PM 없이 지정된 픽업 시간 등의 문제를 검사합니다. 주인은 확인하기 전에 추출된 모든 필드를 수정할 수 있습니다.
가격은 코드로 정수 단위의 파이세(paise)로 계산됩니다. 예를 들어, 11페이지 분량의 문서를 양면으로 인쇄하고 세 개의 별도 세트로 만들 경우 물리적인 용지 18장과 인쇄된 면 33면이 필요합니다. 제본 비용은 상점에서 설정한 요율에 따라 세트당 부과됩니다.
이 프로젝트에는 유효성 검사, 모호성 처리, 견적 계산을 위한 결정론적 테스트가 포함되어 있으며, 조건부 실시간 Ollama 통합 확인도 포함됩니다. 이러한 확인 과정들이 모든 가능한 고객 메시지에서 추출 정확도를 보장하는 것은 아닙니다.
Open Innovation이 중요한 이유?
로컬 추론(Local inference)은 이 제품을 세 가지 방식으로 실용적으로 만듭니다.
고객 텍스트가 로컬에 유지됩니다. Ollama를 동일한 컴퓨터에서 실행하면, 추출 워크플로우가 고객 메시지를 제3자 AI 서비스로 전송할 필요가 없습니다. 업로드된 PDF는 브라우저 내에서 계산되며 모델로 전송되지 않습니다.
요청당 클라우드 추론 비용이 없습니다. 모델을 로컬에서 실행하는 것은 여전히 하드웨어와 전기를 사용하지만, 다른 주문을 처리한다고 해서 또 다른 유료 API 요청이 발생하는 것이 아닙니다. 이는 소규모 사업자에게 다른 운영비용 모델을 제공합니다.
모델을 변경할 수 있습니다. Ollama 모델은 설정 가능하므로, 저는 다른 오픈 웨이트(open-weight) 모델을 실험하고 특정 상점에서 사용되는 언어와 약어를 위한 프롬프트를 개선할 수 있습니다.
폐쇄형 API 역시 주문 상세 정보를 추출할 수 있습니다. 하지만 이 접근 방식의 장점은 추론이 어디서 발생할지, 어떤 모델이 실행될지, 그리고 워크플로우가 어떻게 작동하는지에 대한 통제권입니다.
현재 상태 및 다음 단계
PrintBrief는 샘플 주문으로 시연된 작동 프로토타입입니다. 아직 인쇄소 사장님에게 테스트되지 않았으며, 저는 가격 책정이나 지불 의향을 검증하지 못했습니다.
저의 다음 단계는 지역 상점에서 이를 테스트하고, 각 주문이 얼마나 많은 수정이 필요한지 측정하며, 이것이 그들의 일상적인 워크플로우의 일부가 될 만큼 충분한 시간을 절약하는지 배우는 것입니다.
목표는 간단합니다. 상점 사장님이 불분명한 메시지를 자신 있게 인쇄할 수 있는 주문으로 변환하도록 돕는 것입니다.