白話文手把手帶你科普 GenAI 的 LLM、Prompt、RAG、Fine-Tuning、Function Calling、Workflow、Agentic、Multimodal

文長慎入 ~ 這是一篇希望更白話的讓更多非CS/EE領域的人更容易理解近一年多來很夯的大模型相關 (持續補更新) ~ 最近 (~ 2024/08/11止) 陸續有緣的辛苦不同地方或單位的前輩、高層們願意撥空跟我幹話閒聊 ( 誰?我想這不是本篇重點 ! XD ),發現有不少人都曾經意外 Google 到這,還清一色的不覺得這裡太多幹話;或許,因為現在實在很多人或公司跟單位一見面 (或者辦個產品發表,邀你來吃吃喝喝見個面 XD) 就都會先嘴(很正經的糊說八道幹話甚至出書的)說自己有在做GenAI或者是在搞大模型 (怎麼判斷呢?先問問對方有幾張什麼類型的GPU吧 !!! 講得出型號是基礎,跟誰買?多少錢?再問問電源是多大 (GPU+雙備援少說都得準備近2000W了 ?),然後可以再問其它硬體規格 (RAM 跟硬碟空間多大,最後再問一下準備了多少什麼格式的數據;那些套殼 GCP Vertex AI 或者 AWS Bedrock 甚至只是 Azure Open AI 想要污辱你智商的完全不該被歸類為有在做 )。

雖然網路上陸續有不少教學,但大多數人/公司/單位仍舊是對 GenAI很感興趣,但不知道可以幹麼?或者是不知道該幹麼?也或許是不知道該怎嘛幹?就再來篇一路走來入門踩坑的大補帖 ? PS:這只是一篇個人陸續踩坑過的心得匯整,沒有任何影射不要自己對號入座;但是還是得說,真想要做這方面,還是先做好心理準備的先解決:高層的玻璃心、GPU、數據;認真覺得在找不到可以實際落地且能變現的應用前,就先別再想著要去微調或者自己預訓練一個多厲害的大模型了,不管是從數據或者是硬體,非常可能都不是我們有辦法負擔的 ! 雖然我們有護國神山?

PS:Llama 3.1 405 在一個包含16384 塊Nvidia H100 80GB GPU 叢集上訓練了整整54 天。如果以每小時每張卡3 美金的H100 租賃成本,加上CPU、記憶體、磁碟、網路等硬體資源每小時預計5 美金的成本來算,這次訓練就需要1 億美金的硬體成本。也可以參考:探索Meta Llama 3模型訓練的硬體基礎架構全貌 或者 The Llama 3 Herd of Models 或者 Building Meta’s GenAI Infrastructure

整合深度學習基礎功能(如語音處理、自然語言處理及圖像處理等)及生成式AI的的平台
LLM、Prompt、RAG、Fine-Tuning、Function Call、Workflow、Agent / Agentic、Multimodal





  • 大語言模型 (Large Language Model):關於LLM已經陸續累積了一些內容,EX: 簡介 (這是最一開始單純蒐集各種模型的介紹跟連結,已經好一陣子沒更新 XD)、什麼是大語言模型,它是什麼?想要嗎?(這篇也差不多是一些介紹,寫的時間大概就是 LLAMA2 前後吧,剛好就是大模型四處開源的亂七八糟的時候)、那些大型語言模型要踩的坑 (這篇寫的時間比較接近 LLAMA 3 前後,包含了一些開源套件的安裝使用,像是 ollama (這兩天又瞄到了所謂的 torchchat) 等等)。不過,再繼續往下看之前,建議先看看意外被我握過手跟在101的85樓同桌過的這個圖靈獎大神講的 !

    有個蠻詳細的各種領域使用介紹:An Awesome Collection for LLM in Chinese到底那幾個模型比較適合那些應用,估計就得各位看到這篇的施主自己體驗了,有機會也會持續在這分享自己的體驗就是 ! 比如說以下幾項:
    AI 固然正在顛覆全球的產業,但簡立峰認為,「我們高估了今天,低估了明天。」人類以為 AI 影響百工百業,其實還沒有,它迄今影響的,仍是那些全球最有競爭力的公司。其他企業由於沒有從 AI 賺到錢,也無法投資太多,只有那些全球最有競爭力的領先公司「養得起 AI」,一旦下一階段新的應用崛起,「那些公司」也許就將贏者全拿。
    這時再回頭看看很多金融業很愛關注的 Gartner 的報告曾經提過的 The Hype Cycle圖,一定對所謂的雲端運算、大數據、區塊鍊甚至是元宇宙一點都不陌生吧 ? 仔細看,是不是覺得這一波 GenAI 好像快要泡沫了?
    最後,附上跟一位晚餐只吃草的孽緣朋友意外聊到的 " 蔣公小時候看到魚逆游而上的故事,到底是什麼魚? " LLM 會怎樣回答你想問的問題的效果。
    還有前幾天很夯的,9.11跟9.9那個比較大的問題





  • Multimodal (多模態)Multimodal AI 系統可以處理/理解和生成如文本、圖像、音頻和視頻等多種類型的數據。多模態 LLM 能夠理解和生成跨多種感官模式的信息,使其能夠執行更複雜和綜合的任務。Multimodal 能力則打破了單一數據類型的限制這部份我想直接看 DEMO 是最快的 ?

    https://github.com/OpenBMB/MiniCPM-V




  • Prompt (提示):Prompt 是輸入給 LLM 的文本指令或上下文。它指導模型生成特定類型的輸出或執行特定任務。好的 prompt 設計可以顯著提高 LLM 的性能和準確性。

    Prompt 和 RAG 提高了模型利用知識的能力,其實如果不會寫,就直接問LLM該怎寫吧 !

    可以參考一下這篇:向AI機器人下Prompt的五個小技巧
    ,蠻清楚的幾點說明

  • 如果AI 總是回答錯的答案,或是出現幻覺 (正經的跟你講幹話),你可以寫「請不要回答不在你資料裡的內容 or 若我問的問題不在你的資料內,你可以回答『我不知道』。」 
  • 想要回答的文字有特定語言風格 答:你先輸入想要相似的一段文字段落+「使用相同的語言風格撰寫一段關於xxxx的新段落。」 
  • 想要的內容太複雜,你腦中一團混亂,不知道該怎麼下手 答:你可以輸入「你想問的事」透過以下六步驟去問看看,定義主題、關聯影響、收集實例、探討對策、分析趨勢、總結 
  • 想要AI 以特定的單詞、短語或句子作為開頭 答:你可以輸入「我提供了一段段落的開頭:‘大型語言模型如 ChatGPT 可以通過提供即時、準確的客戶查詢回應來革新客戶服務。’根據提供的文字完成它。保持流暢一致。」 
  • 想要AI照某些格式去回應 答:可以如下方文字,將你想要的內容分成關鍵詞、規則、提示與指示 範例: 你是文章寫作助理,寫作內容包含 關鍵詞:AI聊天機器人、下Prompt 教學、chatgpt 規則:文章應包括標題、前言、兩個主體段落(分別述說下Prompt 技巧、應用案例),以及結論。 提示:確保使用淺顯易懂的語言,語言是繁體中文,目標受眾為非專業大眾。 指示:請在文章中提供至少一個具體的例子來支持你的論點。




  • RAG (Retrieval-Augmented Generation, 檢索增強生成):RAG 是一種結合了信息檢索和文本生成的技術 (給大模型它原本資料集中沒有的知識,比如截止模型訓練時使用的數據之後的更為實時的數據,或者是一些沒有公開的內部數據及特殊領域的垂直應用等)。允許 LLM 在生成回應時訪問和利用外部知識庫,而提高回答的準確性和信息量。這對於需要最新或專業知識的任務特別有用 (大家最容易聯想到的估計是所謂的客服了?)。

    那些檢索增強生成 (Retrieval-Augmented Generation, RAG) 要踩的坑:這篇裡勉強把自己踩過的匯整了一下,也包含了 chunk 等等的介紹;另外要注意的還有爬蟲工具:Crawl4AI ! 下方三個則是一些比較重直領域相關應用的 DEMO Case 了 !

    Insurance FAQ - High Entropy Alloys FAQCryptocurrency Exchange FAQ

    然而提到了 RAG,那就不能忽略文檔處理 (將文檔轉換為 embedding 向量,或者是指使用 GraphRAG構建文檔間的圖結構);接著再將用戶查詢轉換為 embedding 向量做查詢處理; 然後使用向量相似度做初步檢索找到最相關的文檔。如果在 GraphRAG 中,可能還包括圖遍歷來找到相關信息。 重排序:對初步檢索結果進行 rerank,提高相關性。至於 mem0:https://github.com/mem0ai/mem0 那就又是另外一篇故事了 !

  • Embedding (嵌入):Embedding 是將文本、圖像或其他類型的數據轉換為密集的數值向量的過程。在 RAG 中,embedding 主要用於將文檔或文檔片段轉換為向量形式,以便存儲在向量數據庫中。將用戶查詢轉換為向量,以便與文檔向量進行相似度比較。優點:能夠捕捉語義信息,使得相似的文本在向量空間中距離較近。支持高效的相似度搜索,如使用餘弦相似度或歐氏距離。使得高效的相似度搜索成為可能。最後附上一些目前感覺效果不錯的數據處理或OCR工具:PDFlux (閉源)unstructuredomniparsepdftextOmniParseropenocrPDF-Extract-KitMinerU

  • 在兩階段檢索系統中,主要分成兩個步驟:第一步驟是用嵌入模型(Embedding Model)快速篩選出一組可能相關的文件;第二步驟則是用重新排序器(Reranker)來更精確地排序這些文件。雖然嵌入模型已經能夠提供初步的篩選結果,但它在面對複雜的查詢時,無法完全抓住查詢和文件之間的細微差異,因為它只能給出一個較為籠統的結果。相比之下,重新排序器能更好地分析每個文件的內容,提供更準確的排序結果。簡單來說,嵌入模型幫助你先找到可能有用的文件,而重新排序器則確保你找到的文件是最符合你需求的。嵌入模型適合快速從海量資料中找出一批相關性較高的候選文件,而重新排序器則負責進一步精挑細選,將這些候選文件按相關性進行排序。這樣的搭配既保證了檢索速度,也提高了結果的精確度。
     
  • Rerank (重排序):Rerank 是在初步檢索結果的基礎上,對候選文檔進行更精確排序的過程。它通常包括: 使用更複雜的模型或算法對初步檢索的文檔進行二次評分。考慮更多因素,如文檔與查詢的語義相關性,而不僅僅是向量相似度。優點: 提高檢索結果的相關性和準確性。 可以引入更高級的上下文理解和推理。確保最相關的信息被優先考慮。

  • GraphRAG:RAG 的變體,它將圖結構引入到檢索過程中。主要特點包括: 將文檔和其中的實體、關係表示為圖結構。 在檢索時不僅考慮文本相似度,還考慮實體間的關係和連接。 可以進行多跳推理,找到間接相關的信息。優點: 能夠捕捉和利用文檔間的複雜關係。支持更深入和全面的信息檢索。能夠處理更複雜的信息網絡和推理任務。



  • 2023/08 公司添購 RTX 6000 Ada 48 GB * 2 和 A 100 80GB * 4
    2024/05 公司添購RTX 6000 Ada 48 GB * 8 * 2



  • Fine-Tuning (微調)Fine-Tuning 使模型能夠適應特定領域,是在預訓練的 LLM 基礎上,使用特定領域的數據集進行進一步訓練的過程。這可以使模型更好地適應特定任務或領域,提高其在目標應用中的性能。優點在於只需對基礎模型進行小幅修改,就能實現特定需求的滿足,這不僅提高了效率,還顯著降低了成本,相較於從頭訓練新模型,更加經濟實用。大神李沐的創業一年人間三年的文章中也證實了微調客製化模型的成本為GPT系列成本的十分之一。也就是說LLM雖然強大,但特定領域表現還是容易不佳。透過微調,可以使模型更適應特定領域的需求和特徵。想必看到這的施主們會想說,RAG (Retrieval-Augmented Generation) 與微調 (Fine-tuning) 到底那個比較好跟要用那個呢 ?

    首先,由於訓練數據範圍有限所導致的知識更新困難的問題,用 RAG 不會被限制基於訓練數據,而微調是對預訓練模型進行特定任務的再訓練,難以應對新的或動態變化的資訊,所以就看你是想解決可能需要的即時檢索到最新資訊的需求,或者是增強其在該任務上的表現。

    另外要再注意的就是關於幻覺 (也就是大家一定都碰過大模型一本正經的跟你說幹話的場景?) 這一塊,理論上 RAG 是可以根據檢索到的實際證據來達到有效降低的,而微調是針對特定任務或領域的資料,模型對該領域知識的理解會更加精確。所以,動態知識檢索與減少幻覺方面,RAG具有顯著優勢,微調則更適合於針對特定任務進行專精優化的情況;那麼就又面臨到另個問題了,RAG 的數據可以依賴 embedding 來動態增加,只要 chunk 也都切得好,那微調 (Fine-tuning) 呢?

    Crafting Efficient Fine-Tuning Strategies for Large Language Models:這篇我想就解決了資料效率和超參數最佳化的重要性;在小規模資料集上進行微調,模型效能也很優異,而當持續增加樣本數時,模型表現趨於飽和,進一步增加資料對提升效果的邊際貢獻變小。內容陸續提到,快速初始改進:使用約200個樣本(相當於約100個網頁),模型的準確率從70%顯著提升至88%;收益遞減:在達到1,000個樣本後,準確率提升的速度開始放緩;大約在6,500個樣本時,模型達到最大性能,這表明存在一個"最佳點"。LLaMA-Factory QuickStart 就是目前比較好用的工具了,因為本文頃向白話文科普,這邊就先不多加說明。







  • Function Calling (函數調用)Function Calling 允許 LLM 識別使用者的語義,轉化其為結構化的指領,瞭解何時需要調用預定義的函數,並且模型會接收到具體的函數調用指令並執行,返回結果來完成單一、明確的特定任務。這使得 LLM 可以與外部工具和 API 交互,擴展了如數據處理、計算或資訊檢索等能力範圍。可以看一下上面截圖包含成本 (Cost)、平均延遲 (Average Latency)、AST 摘要 (AST Summary)、Exec 摘要 (Exec Summary) 的排名:Berkeley Function-Calling Leaderboard 。

    Function Calling 擴展了模型的功能範圍;更白話一點來說,Function Call 就像是你要用手機拍照時,你會點相機 APP來打開相機,然後拍完還能做一些進一步的編輯等;相機就是你預先定義好的函數,而打開並使用的過程就是 Function Call 啦;比較著重於表示模型呼叫函數的行為,是整個流程中的一個具體步驟或操作。



    Agentic 特性使模型更具自主性;
    Llama-Agentic-SystemAgentic components of the Llama Stack APIs




  • Agentic / Agent (代理性)Agentic / Agent AI 通常是指結合多個工具和策略來自主地做出決策、規劃行動完成一系列任務的 AI 系統。在 LLM 上下文中,這可能涉及模型能夠理解複雜指令、制定計劃,並按步驟執行以完成目標。看或聽到這邊的施主,一定會突然覺得這跟前面的 Function Call 到底差在那裡 ? 白話一點來說,Agent 能自主完成多步驟的任務,具有一定的決策能力和靈活性;主要解決像是規劃任務、或進行複雜的對話等更高階的任務。


  • 比較主流的 Agent 框架可能是這幾個:LangChainLangGraph,另外還有 CrewAI、AutoGen 已經在其它文章有介紹過。

    咦 ? 如果前面都能理解,還有興趣的,請洽TonTon@TWMAN.ORG ?