AI News HubLIVE
站內改寫3 分鐘閱讀

Flora:一個為AI構建(並與AI共同構建)的圖表庫

Flora 是一個相容 Mermaid 的容錯圖表庫,能將不完美的輸入渲染為精美的互動式 SVG。其構建過程大量藉助 AI(尤其是 Claude Fable),在 10 天內從零完成。核心特性包括故障跳過、嚴格模式、互動式畫布,以及支援 JS/React/Python/Markdown 等多種整合方式。

來源Hacker News AI作者: jillcates

十天前,作者從零開始構建一個圖表庫,如今釋出了 Flora——一個容錯、相容 Mermaid 的圖表庫,能將不完美的輸入渲染為精美的互動式 SVG。本文不僅介紹 Flora,更想分享其構建過程,因為過程本身比產品更令人驚喜。

為什麼需要另一個圖表庫?

作為一名資料工程師,設計架構是日常工作的重要部分。在構建資料管道之前,總需要先畫圖:資料如何流動、存放在哪裡、各元件如何互動。圖表既是思考的方式,也是說服他人的工具。

在 AI 原生的世界裡,Mermaid 已成為“圖表即程式碼”的通用語言——LLM 用它生成圖,GitHub 用它渲染圖,作者過去幾年也一直使用它。圖表即程式碼的核心思想很棒:圖表像 Markdown 文本一樣存放在倉庫中,可被評審,永不腐爛。但有兩件事一直困擾著作者。

首先是美觀問題。每當想定製圖表外觀——例如整個文件站使用統一配色,或者讓圓柱體不擠壓標籤——就會遇到限制。一位同事構建的圖表設計工具能產生非常漂亮的輸出,但所有內容都是硬編碼的 SVG。修改一個節點就得重新生成整張圖。為了美觀而犧牲 Mermaid 的宣告式能力,作者立刻懷念起後者。

其次,LLM 經常生成 Mermaid 程式碼,但幾乎總是接近正確而非完全正確。一行格式錯誤,Mermaid 就會丟擲解析錯誤,UI 渲染一個空白框。如果圖表即文本已成為 AI 與人類之間的介面,那麼渲染器不應在文本 95% 正確時報錯。

Flora 的解決方案:使用 Mermaid 的語法,輸出更美觀,解析器更具彈性。

功能概覽

Flora 能理解您已經會寫的流程圖語法。例如:

flowchart LR events[[Kafka: events]] --> enrich[Enrichment] enrich --> wh[(Snowflake)] wh --> dash([Dashboard])

上述程式碼在預設主題下渲染;同樣程式碼,使用草圖主題則呈現“白板草圖”風格而非最終架構圖。

圖表開箱即支援互動:縮放、平移,以及作者最愛的功能——點選任意節點可追蹤其上下游依賴鏈。

容錯是作者最關注的設計決策。當 Mermaid 遇到無法解析的行時,它會丟擲異常並顯示空白框,即使圖表有 40 行且其中 39 行正確。Flora 則跳過無法理解的行,渲染其餘內容,並以診斷資訊(含行號和列號)報告跳過的行。更重要的是,它從不猜測:格式錯誤行直接丟棄並標記,而非重新解釋為您未編寫的節點。如果希望在 CI 中嚴格報錯,可啟用 strict: true 選項讓解析器丟擲異常而非盡力渲染。

使用方式

Flora 提供多種整合方式:

  • JavaScript/TypeScript:npm install @topspinj/flora 獲取完整 API。
  • 純 HTML:CDN 包註冊為 Web Component,新增 script 標籤即可在頁面中用標記編寫圖表。
  • React:提供封裝元件。
  • Markdown 文件:rehype 外掛在構建時渲染 Flora 程式碼塊,預設在圖表錯誤時導致構建失敗。
  • Python/Jupyter:pip install florajs 支援 Jupyter/marimo 筆記本及無頭 SVG 匯出。
  • 部落格/平臺:hosted /embed 路由可在任何支援 iframe 的地方使用(如 Ghost、Substack、Notion)。
  • 瀏覽器:線上遊樂場即時渲染並編碼圖表至可分享 URL。

構建過程:GitHub Issue 作為提示詞

作者真正想分享的是構建過程。作者並非 TypeScript 專家——職業生涯始於 React 和 NodeJS,但那已是十年前,之後一直使用 Python 和 SQL。在此之前,作者從未釋出過 npm 包、配置過 TypeScript 構建或認真思考過解析器設計。十天之內,作者完成了所有三項,而 Python 封裝從空目錄到釋出到 PyPI 只用了不到 30 分鐘。

關鍵工作流是將 GitHub Issue 作為提示詞。作者不再為自己或未來的貢獻者寫 Issue,而是直接寫出供 AI 代理處理的 Issue。在《專業虛擬碼的理由》一文中,作者曾認為將模糊意圖轉化為精確規格正在成為工作的核心。本專案正是這一想法的最終實踐。不是寫“解析器壞了”,而是寫“解析器無法理解的行應被完整跳過,並以診斷資訊報告行號和列號。絕不重新解釋為額外節點。所有有效內容仍應渲染。新增包含格式錯誤固定用例的迴歸測試。”

Issue 跟蹤器成為通訊協議。作者晚上排隊 Issue,第二天處理時更像是在給一位非常快速的同事分配任務。

Fable 的加入

週三晚上,一封郵件到達:Claude Fable 5 現已可用。通常作者會將模型公告歸檔稍後處理,但這次手頭有一個進行中的專案——真實程式碼庫、已梳理好的代理就緒 Issue 列表、以及測試新模型的完美理由。郵件發出兩小時後,Fable 已交付了 Flora 的 React 封裝。

Flora 大約一半的提交歷史發生在接下來的 48 小時內。CDN 包、Web Component、解析器診斷、嚴格模式、Python 包、線上遊樂場:全部在兩天內完成。但速度並非最有趣的部分。Fable 捕獲了作者從未要求它查詢的 bug,並反駁了作者的一些想法。當作者試圖讓主題控制節點間距時,Fable 認為主題應改變圖表外觀,而非佈局——它是對的。感覺更像是程式碼審查,而不是自動補全。

v0.1 釋出

目前還處於早期階段,存在粗糙之處,Issue 跟蹤器也誠實地列出了它們。最好的部分是作者能立即在實踐中試用——工作中沒有強制使用的圖表工具,Flora 將直接應用於日常工作。真實用例是最佳的測試方式。

如果你曾喜愛 Mermaid 但希望它更美觀、更少出錯,不妨試試 Flora。