Skip to content

CodeofO/document-automation-workspace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

89 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Document Automation Workspace

์ˆ˜์ž‘์—…์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋˜ ๋ฌธ์„œ ๋ถ„๋ฅ˜, ํ•„์ˆ˜ ํ•ญ๋ชฉ ํ™•์ธ, ํ•ต์‹ฌ ์ •๋ณด ์ถ”์ถœ, ๊ฒฐ๊ณผ ์ •๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ์ž๋™ํ™” ํ๋ฆ„์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฌธ์„œ ์—…๋ฌด ์ž๋™ํ™” ์•ฑ์ž…๋‹ˆ๋‹ค.

Workflow Builder Document Library Document Classifier Required Field Checker Key Information Extractor Raw Data Extractor

Document Automation Workspace overview

Demo

์‹œ์—ฐ ์˜์ƒ

Document Automation Workspace ์‹œ์—ฐ ์˜์ƒ

๋กœ์ปฌ ๋ฐ๋ชจ ์‹คํ–‰

uv venv --python 3.11 .venv
uv pip install -e 'backend[dev]'
./scripts/run_dev.sh

์‹คํ–‰ ํ›„ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://127.0.0.1:5173/์„ ์—ฝ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋กœ์ปฌ ๊ตฌ์„ฑ์€ VLM_PROVIDER=mock์œผ๋กœ ์™ธ๋ถ€ AI ํ˜ธ์ถœ ์—†์ด UI์™€ workflow ํ๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ provider๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด .env.example์„ .env๋กœ ๋ณต์‚ฌํ•œ ๋’ค VLM_PROVIDER, VLM_API_KEY, VLM_MODEL_NAME์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Features

๋‹จ์ผ ๋ชจ๋“ˆ ์‹คํ–‰๊ณผ ์›Œํฌํ”Œ๋กœ์šฐ ์—ฐ๊ฒฐ

Core modules

Module Purpose
Document Library ํŒŒ์ผ/ํด๋”๋ฅผ ๋จผ์ € ๋ณด๊ด€ํ•จ์— ์˜ฌ๋ฆฌ๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ณ€ํ™˜ ํ›„ ๋ชจ๋“  ๋ชจ๋“ˆ๊ณผ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
Workflow Builder ๋ฌธ์„œ ์ž…๋ ฅ, ๋ถ„๋ฅ˜, ๋ถ„๊ธฐ, ์ถ”์ถœ, ํ•„์ˆ˜ ํ•ญ๋ชฉ ํ™•์ธ, ๋ณ‘ํ•ฉ, export ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
Document Classifier ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ class ํ›„๋ณด์™€ unknown ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์„œ๋ฅผ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.
Required Field Checker ์„ฑ๋ช…, ๋‚ ์งœ, ์„œ๋ช…, ์ฒดํฌ๋ฐ•์Šค ๋“ฑ ํ•„์ˆ˜ ํ•ญ๋ชฉ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
Key Information Extractor ์ €์žฅ๋œ schema ๊ธฐ์ค€์œผ๋กœ field, value, confidence, evidence๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
Raw Data Extractor PDF, Office ๋ฌธ์„œ, ์ด๋ฏธ์ง€์˜ preview์™€ ์›๋ฌธ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Document Library

  • ํ™ˆ์˜ ๋ฌธ์„œ ๋ณด๊ด€ํ•จ์—์„œ ํŒŒ์ผ ๋˜๋Š” ํด๋”๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—…๋กœ๋“œ ๋Œ€๊ธฐ์—ด์€ ํ˜„์žฌ ์—…๋กœ๋“œ๊ฐ€ ์ง„ํ–‰ ์ค‘์ด์–ด๋„ ๋‹ค์Œ ํŒŒ์ผ/ํด๋”๋ฅผ ๋ฐ›์•„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณด๊ด€ํ•จ์€ ์›๋ณธ ํŒŒ์ผ, ์ƒ๋Œ€ ๊ฒฝ๋กœ, ๋ณ€ํ™˜ ์ƒํƒœ, page image/meta๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณด๊ด€ํ•จ์€ ๋นˆ ํด๋” ์ƒ์„ฑ, ์ „์ฒด ์„ ํƒ, ๋ณต์‚ฌ, ์ด๋™, ์ž˜๋ผ๋‚ด๊ธฐ, ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ๋ฆ„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ/ํด๋” ๋ณต์‚ฌ๋Š” ์›๋ณธ payload๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ storage ๊ฒฝ๋กœ์™€ ์ƒˆ document id๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ์„ ํƒ ์‚ญ์ œ๋Š” ํ™•์ธ ํŒ์—… ํ›„ ์—ฌ๋Ÿฌ ๋ฌธ์„œ์˜ ์›๋ณธ payload๋ฅผ ํ•œ ๋ฒˆ์— ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณด๊ด€ํ•จ์€ ๋ชฉ๋ก ๋ณด๊ธฐ์™€ ์•„์ด์ฝ˜ ๋ณด๊ธฐ๋ฅผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฌธ์„œ ์˜์—ญ์„ ๋„“๊ฒŒ ์“ฐ๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด๊ด€ํ•จ์—์„œ๋Š” Command/Ctrl+A/C/X/V, Delete, Esc ๋‹จ์ถ•ํ‚ค๋กœ ์ „์ฒด ์„ ํƒ, ๋ณต์‚ฌ, ์ด๋™, ๋ถ™์—ฌ๋„ฃ๊ธฐ, ์„ ํƒ ์‚ญ์ œ, ์„ ํƒ ํ•ด์ œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด๊ด€ํ•จ ์ž‘์—… ์ง„ํ–‰/์™„๋ฃŒ ์ƒํƒœ๋Š” ๋ณธ๋ฌธ์„ ๋ฐ€์–ด๋‚ด์ง€ ์•Š๊ณ  ์šฐ์ธก ์ƒ๋‹จ ์•Œ๋ฆผ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ready ๋ฌธ์„œ๋Š” ์ฆ‰์‹œ ์‹คํ–‰๋˜๊ณ , queued/preprocessing ๋ฌธ์„œ๋Š” ์ค€๋น„๋˜๋ฉด ์‹คํ–‰ ์ƒํƒœ๋กœ ๋ชจ๋“ˆ/์›Œํฌํ”Œ๋กœ์šฐ ์ž‘์—…์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ ์‚ญ์ œ๋Š” ์›๋ณธ๊ณผ page image payload๋งŒ ์‚ญ์ œํ•˜๊ณ , ๊ณผ๊ฑฐ ๊ฒฐ๊ณผ row์™€ ์‹คํ–‰ ๊ธฐ๋ก์€ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

Workflow Builder

์›Œํฌํ”Œ๋กœ์šฐ ๋นŒ๋”

Workflow Builder

์›Œํฌํ”Œ๋กœ์šฐ ๋นŒ๋”: ๊ฒฐ๊ณผ ๊ฒ€ํ† 

Workflow Builder result view

  • React Flow ์บ”๋ฒ„์Šค์—์„œ ๋ฌธ์„œ ์ฒ˜๋ฆฌ ๋ชจ๋“ˆ์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • AI ์ƒ์„ฑ์œผ๋กœ ์ƒ˜ํ”Œ ์ด๋ฏธ์ง€ ์ตœ๋Œ€ 10์žฅ์„ ๋ถ„์„ํ•ด workflow/schema/checklist ์ดˆ์•ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • AI workflow draft ์ƒ์„ฑ์€ ์š”์ฒญ ์ฒ˜๋ฆฌ ์ค‘ ์ž„์‹œ ๊ณต๊ฐ„๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ƒ˜ํ”Œ์„ ๋ณด๊ด€ํ•จ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ๋ณ„๋„ ์„ ํƒ ๋™์ž‘์ž…๋‹ˆ๋‹ค.
  • KIE ๋…ธ๋“œ ์„ ํƒ ์‹œ Workflow Builder ์•ˆ์—์„œ ๊ธฐ์กด schema field๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ƒˆ schema ์ดˆ์•ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ €์žฅ/์‹คํ–‰ ์‹œ schema ์ดˆ์•ˆ์ด ๋จผ์ € ์ €์žฅ ๋˜๋Š” ์—…๋ฐ์ดํŠธ๋œ ๋’ค workflow์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • ์—…๋กœ๋“œ๋กœ ์ƒˆ ๋ฌธ์„œ๋ฅผ ๋ณด๊ด€ํ•จ์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ๋ฌธ์„œ ๋ณด๊ด€ํ•จ์—์„œ ๊ธฐ์กด ๋ฌธ์„œ๋ฅผ ์„ ํƒํ•ด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ ์—…๋กœ๋“œ๋Š” ๋จผ์ € ๋ณด๊ด€ํ•จ์— ์ €์žฅ๋˜๊ณ , workflow run์€ ๋ณด๊ด€ํ•จ document id๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณด๊ด€ํ•จ ๋ฌธ์„œ๋ฅผ ์„ ํƒํ•˜๋ฉด ์—…๋กœ๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ  ๊ฐ™์€ ์›๋ณธ payload๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ๊ณ ์นจ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ๋Š๊น€ ํ›„์—๋Š” ์ด์–ด๊ฐ€๊ธฐ๋กœ ๊ฐ™์€ ์›๋ณธ์„ ๋‹ค์‹œ ์„ ํƒํ•ด ๋‚จ์€ ํ•ญ๋ชฉ๋งŒ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹คํ–‰ ์ค‘์—๋Š” ์ถ”๋ก  ์ผ์‹œ์ค‘๋‹จ, ์ด์–ดํ•˜๊ธฐ, ์‹คํ–‰ ์˜ˆ์•ฝ, ์ถ”๋ก  ์ค‘๋‹จ์œผ๋กœ ์ƒํƒœ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
  • ์›Œํฌํ”Œ๋กœ์šฐ ์ค‘๋‹จ์€ ๋ณด๊ด€ํ•จ ๋ฌธ์„œ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์ง„ํ–‰ ์ค‘์ธ ์ถ”๋ก ๋งŒ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. ์›๋ณธ ์‚ญ์ œ๋Š” ๋ฌธ์„œ ๋ณด๊ด€ํ•จ์—์„œ๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํ–‰ ์˜ˆ์•ฝ์€ ์—…๋กœ๋“œ๋œ ์›๋ณธ ๋ฌธ์„œ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ workflow run์„ waiting ์ƒํƒœ๋กœ ๋“ฑ๋กํ•˜๋ฉฐ, ์•ž์„  run์ด ๋๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ง„ํ–‰ ์ƒํƒœ๋Š” ์—…๋กœ๋“œ๋จ, ์ „์ฒ˜๋ฆฌ, ์‹คํ–‰ ์ค‘, ๋Œ€๊ธฐ, ์™„๋ฃŒ/๊ฒ€ํ† /์‹คํŒจ counter๋กœ ๋ถ„๋ฆฌํ•ด ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ ํ™”๋ฉด์€ ๋ฌธ์„œ ๋ชฉ๋ก ์Šคํฌ๋กค ์œ„์น˜๋ฅผ ์œ ์ง€ํ•˜๊ณ , ์ƒ์„ธ ๊ฒฐ๊ณผ์—์„œ ๋ฌธ์„œ ์ด๋ฏธ์ง€์™€ module output์„ ํ•จ๊ป˜ ๊ฒ€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ CSV/JSON/XLSX์—๋Š” ๋ฌธ์„œ๋ณ„ upload_duration_ms, inference_duration_ms๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Common Ingestion Pipeline

์‹ ๊ทœ UX์˜ ๊ธฐ๋ณธ ์ž…๋ ฅ ๊ฒฝ๋กœ๋Š” ๋ฌธ์„œ ๋ณด๊ด€ํ•จ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด init -> items -> start multipart API๋Š” ํ˜ธํ™˜์„ฑ๊ณผ ์—…๋กœ๋“œ ์ด์–ด๊ฐ€๊ธฐ๋ฅผ ์œ„ํ•ด ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Step Description
library upload /api/library/uploads๊ฐ€ ์›๋ณธ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  document conversion job์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
conversion ๋ฐฑ๊ทธ๋ผ์šด๋“œ worker๊ฐ€ PDF/page image/meta๋ฅผ ๋งŒ๋“ค๊ณ  document๋ฅผ ready๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
from-documents ๋ชจ๋“ˆ/์›Œํฌํ”Œ๋กœ์šฐ๋Š” document_ids๋งŒ ๋ฐ›์•„ batch/run item์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
ready dispatch ์ด๋ฏธ ready์ธ ๋ฌธ์„œ๋Š” ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๊ณ , ๋ณ€ํ™˜ ์ค‘์ธ ๋ฌธ์„œ๋Š” ์ค€๋น„ ํ›„ ์ž๋™ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
summary polling์€ summary endpoint๋กœ counter๋งŒ ๊ฐ€์ ธ์˜ค๊ณ , ์ƒ์„ธ ํ™”๋ฉด์—์„œ๋งŒ item page๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

๊ณตํ†ต ์ƒํƒœ๋Š” uploading, preprocessing, waiting, running, paused, completed, needs_review, completed_with_errors, failed, canceled๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Public Scope

์ด public repository๋Š” ๋ฌธ์„œ ์ž๋™ํ™” ์ œํ’ˆ ํ‘œ๋ฉด์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค: upload, extraction, classification, validation, workflow building, execution, review, export.

์„œ๋น„์Šค ์šด์˜ ์ „์šฉ ๊ตฌํ˜„๊ณผ ์ •์ฑ… ๋ฌธ๊ตฌ๋Š” public README์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Project Documents

Document Purpose
DEVELOPMENT_DEFINITION.md ์ œํ’ˆ ๋ฒ”์œ„, public feature contract, ํ•ต์‹ฌ API ๊ทธ๋ฃน, ๊ฒ€์ฆ ๊ธฐ์ค€
DEVELOPMENT_PLAN.md ํ˜„์žฌ focus, ์ตœ๊ทผ ๋ฐ˜์˜ ๊ธฐ๋Šฅ, ๋‹ค์Œ product task
ERROR_NOTE.md ์žฅ์• /์˜ค๋ฅ˜ ์›์ธ, ์ˆ˜์ •, ์žฌ๋ฐœ ๋ฐฉ์ง€ ๊ธฐ๋ก
docs/project-insights.md ์ œํ’ˆ/์•„ํ‚คํ…์ฒ˜/VLM/์›Œํฌํ”Œ๋กœ์šฐ ์„ค๊ณ„ ์ธ์‚ฌ์ดํŠธ
docs/templates/bank-documents-poc.json ์€ํ–‰ ์„œ๋ฅ˜ ๋ฐ๋ชจ์šฉ schema/classifier/checklist/workflow template
docs/readme-media.html README ์ด๋ฏธ์ง€ ์žฌ์ƒ์„ฑ์šฉ media source

ํ™ˆ์˜ ์€ํ–‰ ์„œ๋ฅ˜ ๋ฐ๋ชจ ์‹œ์ž‘ ๋ฒ„ํŠผ์€ ์€ํ–‰ ์„œ๋ฅ˜์šฉ schema, classifier, checklist, workflow, ์ƒ˜ํ”Œ ๋ณด๊ด€ ๋ฌธ์„œ 3์žฅ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ํ•ญ๋ชฉ์„ ์žฌ์‚ฌ์šฉํ•œ ๋’ค seed๋œ Workflow Builder๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ƒ˜ํ”Œ ์ถœ์ฒ˜๋Š” ์ด ์ €์žฅ์†Œ์˜ assets/sample ๋กœ์ปฌ ์ž์‚ฐ์ด๋ฉฐ, ํ…œํ”Œ๋ฆฟ ์›๋ณธ์€ docs/templates/bank-documents-poc.json์— ๋‘ก๋‹ˆ๋‹ค.

Input / Output

Input Handling
PDF page image๋กœ rasterize ํ›„ preview์™€ VLM context์— ์‚ฌ์šฉ
PNG/JPG/JPEG ์›๋ณธ์€ ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•˜๊ณ  preview/VLM์šฉ JPEG๋ฅผ ์ƒ์„ฑ
DOCX/PPTX LibreOffice๋กœ PDF ๋ณ€ํ™˜ ํ›„ ์ฒ˜๋ฆฌ
XLSX sheet HTML๊ณผ PDF preview ์ƒ์„ฑ
Output Format
KIE field, value, normalized value, confidence, evidence
Classification class name, confidence, reason, evidence
Required Check item๋ณ„ present/missing/uncertain/not_applicable
Workflow Export branch๋ณ„ union-column CSV/JSON/XLSX, upload/inference duration

Stack

Layer Tech
Frontend Vite, React, TypeScript, React Flow
Backend FastAPI, SQLAlchemy, Alembic-compatible lightweight migration
Storage Local filesystem, optional S3-compatible adapter
Document Preview PyMuPDF, LibreOffice headless
VLM Gemini/OpenAI-compatible/mock provider

Local Run

Requirements:

  • Python 3.11
  • Node.js 20+
  • LibreOffice for DOCX/PPTX/XLSX conversion
uv venv --python 3.11 .venv
uv pip install -e 'backend[dev]'

cd frontend
npm ci
cd ..

./scripts/run_dev.sh
Server URL
Frontend http://127.0.0.1:5173
Backend http://127.0.0.1:8000

Mock VLM์œผ๋กœ UI์™€ workflow๋งŒ ํ™•์ธํ•  ๋•Œ:

VLM_PROVIDER=mock
VLM_MODEL_NAME=mock-vlm

๋กœ์ปฌ OpenAI-compatible VLM์œผ๋กœ ์‹ค์ œ ์ถ”๋ก ํ•  ๋•Œ:

VLM_PROVIDER=auto
VLM_MODEL_NAME=google/gemma-4-26b-a4b
VLM_BASE_URL=http://127.0.0.1:1234/v1
VLM_API_KEY=
VLM_INFERENCE_PARAMS='{"reasoning_effort":"off","thinking":"off","temperature":"0","verbosity":"","max_completion_tokens":"","top_p":"","service_tier":""}'
VLM_TIMEOUT_SECONDS=600
KIE_FIELD_GROUP_SIZE=1

๋กœ์ปฌ 26B๊ธ‰ ๋ชจ๋ธ์€ ๊ณต์‹ API๋ณด๋‹ค ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ inference parameter๋Š” reasoning/thinking off์ด๋ฉฐ, KIE ๋‹จ์ผ ์‹คํ–‰ ํ™”๋ฉด์€ backend job์ด completed, needs_review, failed, canceled๋กœ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ณ„์† pollingํ•ฉ๋‹ˆ๋‹ค. provider request ์ž์ฒด์˜ ์ตœ๋Œ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ VLM_TIMEOUT_SECONDS๋กœ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

VLM_BASE_URL์ด ์„ค์ •๋œ OpenAI-compatible ๋กœ์ปฌ ์„œ๋ฒ„๋Š” provider๋ณ„ strict json_schema ์ง€์› ์ˆ˜์ค€์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ backend๋Š” raw message.content๋ฅผ ๋ฐ›์•„ JSON object๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ , markdown fence, ์•ž๋’ค ์„ค๋ช…, ๊ธด ๊ณต๋ฐฑ ํ›„ ๋‹จ์ˆœ brace ๋ˆ„๋ฝ ๊ฐ™์€ ์‘๋‹ต์€ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„์—์„œ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ VLM_RESPONSE_INVALID_JSON์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ชจ๋ธ์ด JSON์„ ๋๊นŒ์ง€ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์ด๋ฏ€๋กœ KIE_FIELD_GROUP_SIZE=1์„ ์œ ์ง€ํ•˜๊ณ , VLM_INFERENCE_PARAMS์˜ max_completion_tokens๋ฅผ ๋ณด์ˆ˜์ ์œผ๋กœ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„/model์„ ๋ฐ”๊ฟ” ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Verification

Backend tests:

cd backend
../.venv/bin/python -m pytest tests

Frontend build:

npm run build --prefix frontend

Large mock smoke:

./.venv/bin/python scripts/run_large_mock_smoke.py --count 1000

PoC UI smoke:

./.venv/bin/python scripts/run_poc_ui_smoke.py

Diff whitespace check:

git diff --check

Key Environment Variables

Env Default Description
UPLOAD_CHUNK_FILES 10 frontend๊ฐ€ system status์—์„œ ์ฝ๋Š” chunk ํŒŒ์ผ ์ˆ˜
PREPROCESS_MAX_WORKERS 2 ๋ฌธ์„œ ์ „์ฒ˜๋ฆฌ ๋™์‹œ์„ฑ
WORKFLOW_MAX_WORKERS 16 ๋ฌธ์„œ๋ณ„ workflow local ์ž‘์—… ๋™์‹œ์„ฑ
DOCUMENT_PAGE_MAX_LONG_EDGE 3000 preview/VLM์šฉ JPEG ๊ธด ๋ณ€ ์ œํ•œ
DOCUMENT_PAGE_JPEG_QUALITY 88 preview/VLM์šฉ JPEG ํ’ˆ์งˆ
VLM_BASE_URL "" ๋กœ์ปฌ ๋˜๋Š” ์‚ฌ์„ค OpenAI-compatible VLM endpoint
VLM_INFERENCE_PARAMS reasoning/thinking off VLM ์ถ”๋ก  ํŒŒ๋ผ๋ฏธํ„ฐ JSON. reasoning_effort, thinking, temperature, verbosity, max_completion_tokens, top_p, service_tier๋ฅผ ์„ค์ •
VLM_TIMEOUT_SECONDS 120 provider request 1ํšŒ ์ตœ๋Œ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„. ๋กœ์ปฌ ๋Œ€ํ˜• ๋ชจ๋ธ์€ 300~900 ๊ถŒ์žฅ
VLM_MAX_CONCURRENT_REQUESTS 8 provider๋กœ ๋‚˜๊ฐ€๋Š” AI ๋™์‹œ ์š”์ฒญ ์ˆ˜
KIE_FIELD_GROUP_SIZE 2 KIE ์š”์ฒญ 1ํšŒ์— ๋ฌถ๋Š” field ์ˆ˜. ๋กœ์ปฌ VLM์€ 1๋กœ ์ค„์ด๋ฉด timeout/JSON ์‹คํŒจ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
DATABASE_POOL_SIZE 8 SQLAlchemy DB connection pool ํฌ๊ธฐ
DATABASE_MAX_OVERFLOW 0 pool ํฌ๊ธฐ๋ฅผ ๋„˜๋Š” ์ž„์‹œ connection ํ—ˆ์šฉ ์ˆ˜
DATABASE_POOL_TIMEOUT_SECONDS 30 DB connection ๋Œ€๊ธฐ timeout
UPLOAD_MAX_BATCH_FILES 10000 ํ•œ ๋ฒˆ์— ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” batch ํŒŒ์ผ ์ˆ˜
UPLOAD_RETENTION_HOURS 0 ๋กœ์ปฌ ๊ธฐ๋ณธ ๋ฌธ์„œ ๋ณด์กด ์‹œ๊ฐ„

Workflow local blocking work๋Š” WORKFLOW_MAX_WORKERS ํฌ๊ธฐ์˜ ์ „์šฉ executor ํ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋Ÿ‰ ๋ฌธ์„œ ์‹คํ–‰์—์„œ worker ๋Œ€๊ธฐ ์ž์ฒด๊ฐ€ Python default threadpool์„ ์ ์œ ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

Workflow ํ™”๋ฉด์˜ ์ฒ˜๋ฆฌ ์ค‘์€ workflow item์ด ๋ชจ๋“ˆ ๋‹จ๊ณ„์— ์ง„์ž…ํ•œ ๋ฌธ์„œ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์‹ค์ œ provider ๋™์‹œ ํ˜ธ์ถœ ์ˆ˜๋Š” ๋ณ„๋„ KPI์ธ AI ์š”์ฒญ ์ค‘ / AI ์š”์ฒญ ํ•œ๋„, provider ํ˜ธ์ถœ ๋Œ€๊ธฐ๋Š” AI ์š”์ฒญ ๋Œ€๊ธฐ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. async VLM ํ˜ธ์ถœ์€ VLM_TIMEOUT_SECONDS ์•ˆ์— ์™„๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฉด ์‹คํŒจ/์žฌ์‹œ๋„ ๊ฒฝ๋กœ๋กœ ์ˆ˜๋ ดํ•ฉ๋‹ˆ๋‹ค. KIE ๋‹จ์ผ ์‹คํ–‰ ํ™”๋ฉด์€ frontend ์ž์ฒด ์ œํ•œ ์‹œ๊ฐ„์œผ๋กœ ์‹คํŒจ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  backend job ์ƒํƒœ๋ฅผ ๊ณ„์† ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ๋กœ์ปฌ OpenAI-compatible ์„œ๋ฒ„๋Š” strict structured output ๋Œ€์‹  raw JSON fallback ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์‘๋‹ต์ด ๋„์ฐฉํ–ˆ๋Š”๋ฐ ํ™”๋ฉด์ด ์ง„ํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด backend job์˜ error_message์™€ VLM_RESPONSE_INVALID_JSON ์—ฌ๋ถ€๋ฅผ ๋จผ์ € ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์šด์˜์—์„œ 5,000์žฅ ์ด์ƒ ๋Œ€๋Ÿ‰ ์ฒ˜๋ฆฌ๋ฅผ ์ž์ฃผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด SQLite๋ณด๋‹ค Postgres ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

Repository

backend/      FastAPI API, document processing, workflow execution
frontend/     React application
scripts/      local run and mock smoke scripts
docs/         template JSON and README media source
assets/       README images and local sample documents

About

Document Automation Workspace

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors