# 前言 今年接到任務要來開發RAG相關的chatbot應用,老闆先給了我一個文件標的 - ppt,這真的比excel和word難多了,因為設計ppt實在是太自由,非常不好轉換成有結構的markdown或json。尤其是ppt很多圖形、內嵌物件、四散的文字方塊、圖片、圖表...等物件,不同物件的組合所要說的故事也都不一樣。既然接到了任務,就來好好研究一下可以怎麼做。至於有這個chatbot有什麼效益,那就...由老闆評斷。 --- # 技術分析 本來主要技能是c#,後來我選擇python來做這次的開發。原因有以下幾個: - 網路上的範例很多。 - c#的套件用法比python的套件複雜得多,開發時程會拖很長。 - Jupyter Notebook在初期開發測試真的是很方便。 (但最後要整理成.py就有點痛苦...) ## 1. 怎麼讀取ppt的內容? **我的目標是將ppt轉換成markdown。** 目前最通用的library是`Docling`,旨在建立一個通用的文件parser,讓大家輕鬆取得文件內容,以利後續Gen AI的開發。 ![docling_processing](https://hackmd.io/_uploads/rJsRlhyyWx.png) 然而,研究後發現`Docing`有一些缺點不太適用我的情境: - **無法讀取內嵌物件的內容** - 通常是圖表(柱狀圖、折線圖...etc),這類物件的資料底層通常是內嵌excel - **無法處理合併儲存格** - 轉換後的合併儲存格只會在第一格出現資料 - 如果合併儲存格的row越多,對於向量DB的語意搜尋或直接將表格丟給LLM解讀,可能會被認為row 1跟row 10沒有關係,導致回應的資料有缺。 - 比較好的方式是填滿空格 | Item | Vendor | Unit Price | | -------- | -------- | -------- | | Banana | Vendor A | $5 | | Banana | Vendor B | $4.5 | | Banana | Vendor C | $4.2 | | Banana | Vendor D | $3.8 | - 填滿空格有以下好處:(來源:ChatGPT) ![螢幕擷取畫面 2025-10-30 230251](https://hackmd.io/_uploads/HyrHAlZJZx.png) 最後決定土法煉鋼,使用`python-pptx`來讀取ppt。 ## 2. 轉換格式 - `json` 或 `markdown` 目前比較熱門的格式有`json`和`markdown`,我選擇的是`markdown`,原因是轉換後我可以透過vscode直接顯示結果,方便我比對、檢查跟來源ppt的差異。 ## 3. 向量資料庫 技能樹一直都沒有點到向量資料庫,對這領域實在是很陌生,尤其一直在關聯式資料庫打滾,覺得語意搜尋真的是很炫的feature。 於是參考了這篇,快速了解各向量資料庫的懶人包: {%preview https://ithelp.ithome.com.tw/articles/10344993 %} 最後選擇`Qdrant`,不只支援docker快速佈署,重點是 **免錢!!免錢!!免錢!!** 使用後,`Qdrant`最讓我滿意的地方是「RESTful API」,實在是太讓人驚豔了!甚至超出我的期望。 --- # 小結 目前規劃如下: - python 3.12.x - python-pptx - requests - Docker - Qdrant - LLM - mistral - gpt-oss-120b 後續會介紹開發的血淚史,初入AI領域的小白到底是怎麼做出一個chatbot。