愛好 AI Engineer 電子報 🚀 建構 LLMs 應用的戰略、運營和戰術經驗分享 #16

Hello! 你好 👋

我是 ihower,這期累積了不少精彩內容分享給大家。

🔝What We’ve Learned From A Year of Building with LLMs

這包括作者們的 Blog 長文、在 AI Engineer World’s Fair 大會的演講影片,以及我的截圖版本

這是由六位大神一起寫的 What We Learned From A Year of Building With LLMs (我們從一年使用大型語言模型的開發中學到了什麼) 資訊量很高,乾貨滿滿。把開發 LLM-based AI 產品的經驗,分成 戰術、營運和戰略層面,以下摘要節錄: 

戰術上: 

– 單一小 prompt 能夠做好一件事,而且只做一件事
– 偏好使用 RAG 而非微調來獲取新知識
– 逐步、多回合的「流程」可以帶來巨大的提升
– 優先考慮使用確定性的工作流程
– 從真實的輸入/輸出範例中創建一些基於 assert 斷言的單元測試

營運上:

– 所有人都應緊密關注數據,每週花幾個小時查看輸入和輸出,以更好地了解數據分佈:其模式、邊緣情況以及模型的局限性
– 抽樣查看每天 LLM 應用的輸入和輸出結果
– 將提示遷移到不同模型是一件麻煩事
– 無情地考慮需求優先等級,我們必須接受第一個版本不會是完美的,只需發布並迭代
– 根據使用情境校準你的風險承受度
– 以下是構建 AI 產品過程中所需角色類型及其需求時間的大致進展
  * 首先,專注於建立產品
  * 透過儀器化您的系統並收集數據來建立正確的基礎。根據數據的類型和規模,您可能需要平台和/或數據工程師。您還必須有查詢和分析這些數據的系統來調試問題
  * 最終會想要優化你的 AI 系統。這不一定涉及訓練模型。基本步驟包括設計指標、建立評估系統、進行實驗、優化 RAG 檢索、調試隨機系統等等。

戰略上:

– 在達到產品市場契合度 (PMF) 之前,不要使用 GPU
  * 從零開始訓練(幾乎)從來沒有意義
  * 在證明有必要之前,不要進行微調
  * 從推理 API 開始,但不要害怕自我託管
– 模型不是產品;圍繞它的系統才是
  * 模型可能是系統中最不耐用的組件
  * 將你的努力集中在能提供持久價值的事情上:  Evaluation, Guardrails, Caching, 數據飛輪
– LLM 驅動的應用程式非常脆弱。它們需要大量的安全防護和防禦性工程
  * 當範圍嚴格限定時,這些應用程式可以非常有用
  * 想像基於LLM的應用程式完全取代工作流程或代替某個職位功能可能很有吸引力,但目前最有效的範式是人機混合
– 建立 LLMOps,但要為正確的理由而建立:更快的迭代
– 反覆改進,成就卓越
– 從提示、評估和數據收集開始
  * 提示工程優先
  * 建立評估並 啟動數據飛輪

補充(2024/8): 看到 Dylan 的 TLDR 版本也很不錯

👍How to think about AI application development

這是一場由 Anton Troynikov (Founder of Chroma) 分享關於 AI 應用開發的一些想法,覺得非常發人省思,我特翻譯製作了中英版網頁,以下是我的心得摘要: 

– buzzwords 是思想殺手,包括 RAG, Agent 等都是
  * RAG 做為概念沒有用,就像我們現在已經不會稱呼一個網站是 “資料庫增強的網頁” (編按: 因為對我們專業開發者來說,一個軟體應用通常會搭配資料庫,很正常啊)
  * Agent 只是在 loop 中多次呼叫 LLM
– 做 Chatbot 就像古早時代的靜態網頁,只是用新的方式呈現 LLM 裡面的資料而已。不要以為這波 AI 最有價值的應用就是做 chatbot (編按: 目前各種 agent, prompts 指令大全,真的很像當年Web興起時的型錄網站)
– LLM 是可以處理非結構化資訊的系統,以前無法只用常識和 API 去進行,現在可以辦到了
– 軟體的價值在於自動化有價值的活動,AI 可以幫助我們自動化以前無法自動化的事情
– 你只需要 LLM API
– 這兩年來這技術被宣傳成 “生成式” 可用來幫助我們寫文章生成文字,而不是強調處理資訊,這概念是有害的
– 新的 AI 應用,相對於傳統軟體開發,有新的程式設計方式,包括
  * Eval 評估,相對於單元測試,但不是 pass 或 failed 了,而是關於機率
  * Retrieval 檢索,相對於資料庫,新的方式是向量儲存
  * 新的開發迭代方式
  * 降低的門檻,每個人都可以建構自動化
– LLM 創造了新的抽象層和專業
– 叫做 Prompt Engineer 他也覺得不好,因為工作不只有 Prompt Engineering
– 叫做 AI Enginner 可能也有點不夠清楚太廣 (因此我認為加上 Generative 會更好)
– AI 工程師的數量會遠比 ML 工程師多,而且甚至不需要學怎麼訓練模型了

🎯用繁體中文評測 RAG 的 Chunking 切塊策略

我延續之前做的 Embedding 和 Reranker 評測,實驗了 RAG 系統中的 Chunking 切塊環節。由於 embedding 和 LLM 模型的長度限制,我們必須將所有文本資料,拆成小塊後再轉成向量放進向量資料庫。詳細內容請前往我 Blog 文章

👊Vision Agent

這包括 Vision Agent 線上版本開源的 code 和 Andrew Ng 的演講 (推薦 Vision Agent 從 16:35 開始看)

Andrew Ng 在 Snowflake Summit 2024 介紹了他們團隊的一個新開源作品 Vision Agent

我一開始以為不就是呼叫多模態模型,例如 gpt-4o 幫你解讀圖片,這大家已經會啦,認真看一下不是!
這個 Vision Agent 是根據你的 prompt 指示,寫出特定需求的影像辨識程式碼,例如:

1. 計算特定兩個物品的距離
2. 偵測是否發生某個事件,例如判斷 CCTV 影像中是否有車禍
3. 計算有多少某某物品,例如多少人戴口罩

這有什麼好處? 就是一但 code 寫出來之後,這個任務就不需要呼叫多模態模型了。例如 CCTV 監視器場景,你不需要一直呼叫多模態模型,不但花錢而且速度較慢。我們只需要呼叫寫好的視覺辨識程式即可,準確率也比較穩定。

我覺得厲害的地方就是這個 Vision Agent 內建寫好了很多視覺辨識的工具程式,因此他會利用這些工具來寫 code。如果不是專門做視覺辨識的專家,實在是不會熟悉這些工具啊。而現在我透過這個 Vision Agent,就可以快速寫出來了!!

這些不明覺厲的內建影像辨識工具包括(我從 source code 挖出來的):

1. owl_v2: 這是一個物體檢測工具,可以根據文本提示檢測和計數圖像中的多個物體。它返回標準化坐標的邊界框列表,包含標籤名稱和相關的概率分數。
2. grounding_sam: 這是一個物體分割工具,可以根據文本提示分割圖像中的多個物體。它返回邊界框、標籤名稱、遮罩文件名和相關的概率分數。
3. extract_frames: 從視頻文件或YouTube鏈接中提取幀。它返回一個元組列表,每個元組包含一個幀(numpy數組)和其時間戳。
4. ocr: 從圖像中提取文本。它返回檢測到的文本、標準化坐標的邊界框和置信度分數的列表。
5. clip: 使用給定的類別或標籤列表對圖像或裁剪的檢測結果進行分類。它返回輸入類別列表及其基於圖像內容的概率分數。
6. vit_image_classification: 對圖像進行分類。它返回類別列表及其基於圖像內容的概率分數。
7. vit_nsfw_classification: 將圖像分類為”nsfw”或”normal”。它返回預測的標籤及其概率分數。
8. loca_zero_shot_counting: 計算給定圖像中主要前景物體的數量,無需其他信息。
9. loca_visual_prompt_counting: 根據視覺提示(邊界框)計算圖像中主要前景物體的數量。
10. florencev2_roberta_vqa: 分析圖像內容,生成詳細描述,並嘗試回答給定的問題。
11. florencev2_image_caption: 根據圖像內容生成圖像說明或描述。
12. florencev2_object_detection: 無需文本提示或閾值即可檢測圖像中的常見物體。
13. detr_segmentation: 無需文本提示即可分割圖像中的常見物體。
14. depth_anything_v2: 從給定的RGB圖像生成深度圖像。
15. generate_soft_edge_image: 生成軟邊緣圖像(HED)。
16. dpt_hybrid_midas: 從給定的RGB圖像生成法線貼圖。
17. generate_pose_image: 從給定的RGB圖像生成開放式姿態骨架/棒狀圖像。
18. closest_mask_distance: 計算兩個遮罩之間的最近距離。
19. closest_box_distance: 計算兩個邊界框之間的最近距離。
20. save_json: 將數據保存為JSON文件的實用函數。
21. load_image: 從給定文件路徑加載圖像的實用函數。
22. save_image: 將圖像保存到文件路徑的實用函數。
23. save_video: 將幀列表保存為mp4視頻文件的實用函數。
24. overlay_bounding_boxes: 在圖像上顯示邊界框的實用函數。
25. overlay_segmentation_masks: 顯示分割遮罩的實用函數。
26. overlay_heat_map: 在圖像上顯示熱圖的實用函數。
27. template_match: 檢測給定圖像中模板的所有實例。返回檢測到的模板位置和相應的相似度分數。

這些工具函式涵蓋了廣泛的計算機視覺任務,包括物體檢測、分割、圖像分類、文本識別、圖像描述生成等,以及一些輔助功能如圖像加載、保存和可視化

🚧AI Agents That Matter

有些 AI Agent 的 benchmark 表現好,是因為不計推論成本跑出來的,不是真的實用!

上個月普林斯頓大學有篇 paper: AI Agents That Matter 就在講:  追求最大準確性可能會導致無限制的成本,因此很多 AI Agent 排行榜並沒有實用意義,因為沒有考慮推論成本。(作者早先也寫了一篇 Blog: AI leaderboards are no longer useful. It’s time to switch to Pareto curves)

例如同一個題目,反覆呼叫 LLM 並進行多數投票,可以在 GSM-8K、MATH、Chess 和 MMLU 等基準測試中,顯著提高準確性。(編按: 例如前一陣子的論文 More Agents Is All You Need 或 Mixture-of-Agents 這兩篇的作法),我們應該要同時最佳化準確性和成本,找到最佳平衡點。

作者用簡單的基本策略 Retry, Warming, Escalation,就可以打臉一些複雜的代理架構,不但更準還更便宜。Retry 就是錯了重試一次,Warming 也是重試但溫度加 0.5、Escalation 則是錯了就換一個更厲害的模型。  

作者建議之後發明新 Agent 架構的人,應該要包括這些基本策略當作 baseline 基準。附圖就是評測 HumanEval,發現基本策略效果就跟複雜的 LATS, LDB, Reflexion 一樣好,但是成本更便宜

另一個案例是: 使用 RAG 或是用模型長上下文來做 QA,也是最近常見的討論。例如 NovelQA 是個專門 benchmark 模型在超過 200k tokens 的 QA 能力,而作者用 RAG 的方式做,準確率其實跟用模型長上下文差不多,但是成本只有一半。

開發模型的上游科學家,當然主要在乎模型本身的評測表現。但是作為下游使用模型的工程師,我更在乎的系統組合出來後的準確性與成本的平衡。

結論: 身為一個工程師,沒有考慮成本的 AI Agent 架構是沒有意義的。

🧑‍🍳家常軟體和草根開發者

大語言模型將帶來 “家常軟體和草根開發者” 的黃金新時代! 看了一場 Local-First Conf 的演講,講者 Maggie 提出了一個有意義的觀點:

– 家常軟體(home-cooked software):   給自己、朋友和家人使用的小應用程式,沒有要創業,而是出於對周圍人的關心和愛,幫助他們解決小問題,就像他為他們做了一頓家常菜一樣。
– 草根開發者(barefoot developers): 扎根於社區,了解周圍人們的需求和問題。他們有領域專業、具備技術敏感度、善於解決問題,但沒有要成為全職程式設計師。

生成式 AI 時代降低了寫程式門檻,之後將會有更多 “草根”開發者,做出更多 “家常軟體”!
講者也預期專業開發人員的數量在未來幾年將會增長,而草根開發者的數量更將會指數增長! 

Claude Artifacts 的 system prompt

Claude app 新推出的 Artifacts 功能真的是超讚很好用的介面設計,可以很方便預覽輸出結果 (可看我的 react 示範影片)。身為 LLM hacker,當然是要把 system prompt 弄出來研究研究,<del>看看人家是怎麼下 prompt 做出來的</del> 徹底學會 Artifacts 這個功能的用法,光這個 prompt 可就耗費了 5k tokens 膩,包括: 

* 定義了 Artifacts 是什麼、什麼時候不要用、如何用
* 定義 Artifacts 的輸出 XML 結構包括 ant_thinking 和 ant_artifact,後者定義這是什麼 type 的文件,有支援 code, markdown, html, svg 跟 react
* ant_thinking 這個 CoT 過程,主要用來判斷 用戶的問題是否適合用 Artifacts,以及如果要用,這是新的 Artifacts 還是延續的修改
* 每份 Artifacts 會有自己的 ID,如果是延續的修改,就會用相同的 ID 以保持連續性
* 很多 examples 範例…..

—-

最後推薦一個可以與 OpenAI 技術團隊直接合作的難得職缺: HelperAI 正在尋找AI全端工程師,打造下一個世代的商機媒合AI Agent!

HelperAI 是YC、三星、富蘭克林投資的AI Agent公司,正在開發「AI商機媒合」平台,目標幫助全球數千萬中小企業打造AI代理人進行商機媒合,實現「Autonomous Company」的願景!詳情請見 Yourator 職缺。 

– ihower

發佈留言

發表迴響