Extract 轉檔零件+工作流:自動辨識副檔名轉檔(docx/pptx/xlsx/pdf/md/csv/xml…),去 Python 化——請出 SDD(含 WASM 鐵律歸屬裁定) #54

Open
opened 2026-07-14 09:12:02 +00:00 by Leo · 1 comment
Owner

[總管] 需求源:leo 2026-07-14 journal(Leo/kb journals/2026_07_14.md「完成 Arcrun RAG 企業 V1」)原話:

身為 Arcrun RAG 用戶,我想要開發 **Extract 零件(不是 Recipe)**及工作流,會自動辨識副檔名轉檔用戶輸入的文件,如 docx, pptx, xsls, pdf, md, csv, xml... 等。好處是不需要多餘 Python 容器跑 markitdown,避免 Python 減慢處理速度,簡化文件攝入流程。

技術盤點(InkStoneCo wishlist C8,2026-07-14):OOXML 全家(docx/pptx/xlsx)=zip+XML;JS 生態成熟(mammoth/SheetJS/unpdf)但牴觸零件鐵律(TinyGo/AS WASM only)。SDD 要裁的核心=歸屬:

  • 選項 A:TinyGo 實作(archive/zip+encoding/xml 抽文字——docx/pptx/xlsx 可行性要 spike;pdf 在 Go 生態弱)
  • 選項 B:平台 worker(TS 合法,同 kbdb/cypher 地位)+recipe 暴露;bundle 肥就按格式拆 worker
  • 選項 C:混合——OOXML 走 TinyGo 零件、pdf 走平台 worker

對標:n8n Extract From File 沒有 docx/pptx——此件補齊即「n8n 有的都有、還多兩格」。掃描 PDF 的 OCR 不進本件(歸 LLM provider)。市場定位與細節見 Leo/InkStoneCo system-dev/docs/1-vision/product-wishlist.md C8。

對應 arcrun-rag V1:demo site 的攝入流程直接吃這個(現用 markitdown Python=要拔掉的最後依賴)。

[總管] 需求源:leo 2026-07-14 journal(`Leo/kb` `journals/2026_07_14.md`「完成 Arcrun RAG 企業 V1」)原話: > 身為 Arcrun RAG 用戶,我想要開發 **Extract 零件(不是 Recipe)**及工作流,會自動辨識副檔名轉檔用戶輸入的文件,如 docx, pptx, xsls, pdf, md, csv, xml... 等。好處是不需要多餘 Python 容器跑 markitdown,避免 Python 減慢處理速度,簡化文件攝入流程。 **技術盤點(InkStoneCo wishlist C8,2026-07-14)**:OOXML 全家(docx/pptx/xlsx)=zip+XML;JS 生態成熟(mammoth/SheetJS/unpdf)但**牴觸零件鐵律(TinyGo/AS WASM only)**。SDD 要裁的核心=歸屬: - 選項 A:TinyGo 實作(archive/zip+encoding/xml 抽文字——docx/pptx/xlsx 可行性要 spike;pdf 在 Go 生態弱) - 選項 B:平台 worker(TS 合法,同 kbdb/cypher 地位)+recipe 暴露;bundle 肥就按格式拆 worker - 選項 C:混合——OOXML 走 TinyGo 零件、pdf 走平台 worker 對標:n8n Extract From File **沒有 docx/pptx**——此件補齊即「n8n 有的都有、還多兩格」。掃描 PDF 的 OCR 不進本件(歸 LLM provider)。市場定位與細節見 `Leo/InkStoneCo` `system-dev/docs/1-vision/product-wishlist.md` C8。 對應 arcrun-rag V1:demo site 的攝入流程直接吃這個(現用 markitdown Python=要拔掉的最後依賴)。
Author
Owner

[總管] leo 07-14 補需求核心=自動偵測(這是與 n8n 的本質差異,寫進 SDD requirements):

  1. 對標痛點:n8n Extract From File 要用戶手選輸入格式——多格式攝入就得 switch 分流到不同 extractor。Arcrun Extract=單一入口零件,進什麼吃什麼,工作流不需要 switch。

  2. 偵測級聯(副檔名只是第一層,magic bytes 才是權威)

  • ①副檔名(快路徑)→ ②magic bytesPK\x03\x04=ZIP 家族→讀內部 [Content_Types].xml 分辨 docx/pptx/xlsx;%PDF-=pdf;D0CF11E0=舊版 Office;③二進位判不中→文字類結構嗅探(<?xml→xml、分隔符規律→csv、其餘→md/plain)。
  • 副檔名被刪/亂改也照吃(magic bytes 為主的直接收益——leo 原問)。
  1. 判不出的誠實 fallback:能當 UTF-8 文字讀→以 plain text 攝入並標 format:unknown-text;真二進位判不出→不假裝,標 format:unknown 進待處理清單+通知 admin(原檔留 repo 溯源,不丟)。禁默默跳過、禁猜錯格式硬解出亂碼入庫。
[總管] leo 07-14 補需求核心=**自動偵測**(這是與 n8n 的本質差異,寫進 SDD requirements): 1. **對標痛點**:n8n Extract From File 要用戶手選輸入格式——多格式攝入就得 switch 分流到不同 extractor。Arcrun Extract=單一入口零件,**進什麼吃什麼**,工作流不需要 switch。 2. **偵測級聯(副檔名只是第一層,magic bytes 才是權威)**: - ①副檔名(快路徑)→ ②**magic bytes**:`PK\x03\x04`=ZIP 家族→讀內部 `[Content_Types].xml` 分辨 docx/pptx/xlsx;`%PDF-`=pdf;`D0CF11E0`=舊版 Office;③二進位判不中→文字類結構嗅探(`<?xml`→xml、分隔符規律→csv、其餘→md/plain)。 - **副檔名被刪/亂改也照吃**(magic bytes 為主的直接收益——leo 原問)。 3. **判不出的誠實 fallback**:能當 UTF-8 文字讀→以 plain text 攝入並標 `format:unknown-text`;真二進位判不出→**不假裝**,標 `format:unknown` 進待處理清單+通知 admin(原檔留 repo 溯源,不丟)。禁默默跳過、禁猜錯格式硬解出亂碼入庫。
Leo added the
s
backlog
label 2026-08-09 13:13:12 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Leo/Arcrun#54