跳到主要內容

RAG 和 Prompt 原理超簡單解說!想知道 AI 怎麼找答案看這篇

這篇文章是給對於你已經開始使用所謂的 ChatGPT / Claude / Gemini 之類的 AI 服務,甚至是 Siri (嘿丟,他也是一種 AI 應用服務喔)

簡單來說是非技術人員, PM,小白,想要趕快惡補的人,直接花十分鐘可以看完的一篇科普業配文章。

或者是概念僅止於,AI 這東西會幻想,會有誤差,會對於生活有些幫助但沒有幫助的人們,做個簡單又不是太簡單的介紹,希望用一個非常入門的方式讓你們有個了解。

當然,這篇文章目的很簡單,就是引流,如果你身邊有已經對於 Web 技術開發的人員,歡迎報名分享給他,年末出國不如學一技在身,參加今年我們舉辦最後一場 RAG 實作工作坊,報名連結https://exma.kktix.cc/events/ai-for-dev-course-rag-2

注意:接下來每個大段落結束都會有一段工商導入,但文章絕對精彩,請注意!



為了讓各位容易想像,我們將整個世界的資訊,先濃縮到這本『西遊記』的世界觀當中,我們整個世界都在這個『西遊記』,而大型語言模型我們用『書精靈』來描述。

PS. 我們先預設各位,應該都有聽過,西遊記!如果沒有聽過西遊記的,請右轉出去,謝謝!

先來談談向量

在《西遊記》的世界裡,我們可以把向量想像成一種「內容座標」,讓系統知道每個角色、場景、法術等的「位置」和「距離」。向量幫助語言模型知道不同內容之間的關聯程度。

向量就像內容的「距離」和「位置」

比方說,唐三藏的「位置」(向量)會接近「佛經」和「取經」的概念,因為他一路上都是為了取經而前進。孫悟空的向量位置則會更靠近「金箍棒」和「七十二變」這些概念,因為這些是他的特徵。

相似內容靠得更近:像「佛經」和「取經」會靠近唐三藏的向量,因為它們彼此有很強的關聯。 相差較大內容會離得較遠:像「取經」和「妖怪」「妖怪的寶藏」就距離比較遠,因為妖怪的寶藏和取經的目標關聯性不大。

是誰決定的這些位置?

簡單來說,這些位置和關係是模型自己學出來的。語言模型會閱讀大量的資料和這世界觀的資訊,觀察哪些詞語經常一起出現,根據「共同出現的頻率」來決定它們的關係,並且自動生成向量。例如:

  • 如果模型看到「唐三藏」總是和「取經」一起出現,它就會讓「唐三藏」的向量靠近「取經」。
  • 反之,如果模型發現「妖怪的寶藏」和唐三藏沒有太大關聯,這些向量就會距離較遠。

當我們心中先具備向量,距離的觀念!

接著暫停一下,各位記得要分享這篇文章給更多人!
還有記得付費報名活動,https://exma.kktix.cc/events/ai-for-dev-course-rag-2

接著我們討論一下 Prompt

接著用《西遊記》解釋 Prompt Engineering 的作用,Prompt Engineering 就是學會如何問問題,讓「你」這位主宰者更好地理解得到想要的答案格式或細節。

舉例:問唐三藏的背景

假設你問書精靈「告訴我唐三藏的故事」,精靈可能給你一個非常簡單的回答:「唐三藏是去取經的和尚。」這雖然正確,但並不完整。

如果使用 Prompt Engineering 提供更多指導:

  • 你可以問:「請告訴我唐三藏一路上取經的歷程,包括他的徒弟和遇到的妖怪。」
  • 書精靈的回答就會更詳細,比如說:「唐三藏是去西天取經的和尚,他一路上遇到很多妖怪,有孫悟空、豬八戒和沙悟淨陪伴他,他們一起克服了重重困難。」

通過 Prompt Engineering,我們可以引導精靈給出更符合需求的答案,避免過於簡單或模糊的回答。

Prompt Engineering:是否一定要有角色的概念?

在 Prompt Engineering 中,並不一定要有角色的概念,但「角色」可以幫助模型更好地理解語境,特別是在故事背景下。

是否一定要有角色?

簡單概要的說,看情境,並沒有絕對,以下舉例

  • 不一定要有角色:有時我們的問題並不需要特定角色,比如「請描述西天取經的目的」。這樣的問題並不涉及具體角色,而是針對背景或情節。

  • 當涉及角色時,角色設定可以更清楚引導模型:比如問「你身為孫悟空,請詳細說明動機和為什麼保護唐三藏?」時,加入「孫悟空」和「唐三藏」的角色背景,可以幫助模型理解我們的期望,使回答更具體、貼合角色個性。

    因此,這也是為什麼網路上會蒐集許多好的 Prompt 樣板 (Prompt template) 和常見模式 (prompt mode) 用《西遊記》角度,有許多不同的角色,不同的情境準備起來,當你想要以『專家角度』,『角色角度』,『故事章節帶入』等,就會有不同用法,就可以省去回憶思考的時間,快速得到精確的答案。

    接下來讓我們談談課程中會提到的其中兩種 prompt, (當然課程中會提到更多,又再次工商置入成功,耶) https://exma.kktix.cc/events/ai-for-dev-course-rag-2

    Few-Shot Prompt 的《西遊記》

    Few-Shot Prompt 就是給書精靈提供一些範例或樣本,讓書精靈更清楚我們希望他怎麼回答。

例子:介紹人物的需求

假設我們想要書精靈幫我們介紹《西遊記》中的角色特徵,並希望回答有特定格式。如果我們直接問「請介紹孫悟空、豬八戒和沙悟淨」,書精靈可能會給出很簡單的答案。

使用 Few-Shot Prompt 給出結果

範例一

你可以先給他幾個範例:

prompt:
請參考以下輸出範例,
範例 1:「孫悟空是具有七十二變能力的猴子,擅長使用金箍棒,性格直率、勇敢。」
範例 2:「豬八戒原本是天蓬元帥,擅長使九齒釘耙,性格懶散但也有責任心。」
請問問精靈:「請按照這個格式介紹沙悟淨生平。」

書精靈的回答就會更符合需求,可能會回答:「沙悟淨是原天宮的捲簾大將,擅長使用降妖杖,性格沉穩、忠誠。」

範例二

假設我們想讓書精靈描述每一個冒險情節的「地點」、「遇到的妖怪」和「解決方式」。

範例 1:「白骨精之戰:地點是在荒野,妖怪是白骨精,解決方式是孫悟空用火眼金睛識破並打敗了妖怪。」
範例 2:「紅孩兒之戰:地點是在火焰山,妖怪是紅孩兒,解決方式是孫悟空請來觀音菩薩將紅孩兒收服。」
請問:「請用同樣的格式描述金角大王和銀角大王的故事。」


書精靈產出: 

「金角大王和銀角大王之戰:地點是在平頂山蓮花洞,妖怪是金角大王和銀角大王,解決方式是孫悟空巧妙地騙回寶物,最終制服了妖怪。」

這樣模型就知道我們希望的回答應該包括「地點」、「妖怪」、「解決方式」,並按此格式提供答案。

這樣通過 Few-Shot Prompt,精靈知道我們想要的答案格式,給出的回答會更一致。

Chain of Thought 西遊記

Chain of Thought 是讓模型一步一步說出他的思考過程,適合複雜問題。或者讓他進行一個反思,驗證的過程。

情境 1:唐三藏為什麼會堅持取經?

假設你問書精靈:「唐三藏一路上遇到那麼多妖怪,為什麼他還堅持去西天取經呢?」

這個問題有點複雜,如果書精靈直接回答「因為他有毅力」,這樣的答案肯定是大家經常遇到的答案,但肯定是無法完全理解唐三藏的想法。

使用 Chain of Thought,書精靈會一步一步解釋自己的思考過程。

書精靈的回答(逐步思考):

  • 第一步:唐三藏的使命

「唐三藏是一位虔誠的和尚,他的目標是去西天取得佛經。他相信這是幫助世人解除痛苦的方法,因為佛經裡的智慧可以教導人們做好事、不傷害他人。」

  • 第二步:佛祖的教導

「在唐三藏出發之前,佛祖告訴他取經之路會很艱難,會有妖怪來阻攔他,因為妖怪不希望佛法普及。但唐三藏還是決定出發,因為他覺得這是他應該做的事情,不能輕易放棄。」

  • 第三步:遇到困難的時候的信念

「每當唐三藏遇到妖怪,他都會想起自己的使命,提醒自己這是對自己信念的考驗,只有堅持下去才能真正完成任務。這時候他的徒弟孫悟空、豬八戒和沙悟淨也會幫助他克服困難。」

  • 總結:為什麼堅持

「所以,唐三藏一路上沒有放棄,因為他有很強的信念,認為只要堅持,最終就能得到佛經,幫助更多的人。」

這樣,書精靈一步一步解釋唐三藏的想法,讓你更容易理解整體的內容和過程,而不會只有一個答案。

情境 2:反思和驗證自己的回答

假設你問書精靈:「孫悟空的七十二變真的無敵嗎?」

書精靈可能會首先回答「是的,七十二變很厲害」。但是,他還會在這個回答之後進行反思,看看是否有其他例子來驗證這個回答。

書精靈的 Chain of Thought:

  • 第一步:七十二變的威力

「孫悟空的七十二變可以讓他變成很多不同的東西,比如動物、樹木、甚至小石頭。這讓他在面對妖怪時有很多方法保護自己和師父。」

  • 第二步:思考限制

「但是,有一些妖怪擁有特殊的能力,能看穿孫悟空的變身,比如紅孩兒就能認出變成昆蟲的孫悟空。這說明七十二變並不是完全無敵,還是有一些例外。」

  • 第三步:結論和驗證

「所以,我的回答應該是,七十二變確實很厲害,但並不是完全無敵,因為有些妖怪有特別的能力可以對付他。」

Chain of Thought 就像是讓書精靈一步一步展開他的思考過程,幫助他在回答時更清楚地解釋每個原因。

當問題複雜時,這樣的回答方式能讓答案更容易理解,而且在有需要時還能進行反思和驗證,讓回答更準確。


Prompt 還有更多串接方式和應用,課程裡面會講更多實際更多 Prompt ,實務上建議參加課程!(但先說必須要有技術底)

RAG of 西遊記

這樣聽下來是不是對於書精靈(語言模型來說)具備了 Prompt 就足夠了呢?

非也,非也!

有時候,即使 prompt 設計得很好,書精靈仍然難以記住《西遊記》中所有的細節。

畢竟你的記憶有限,書精靈也是,記憶是有限的,即便有大量的記憶空間,但資料一次輸入這麼多時,會耗費過多的時間進行等待運算,我們會需要有另外的方式來進行分段的處理。

RAG(Retrieval-Augmented Generation) 是一種「先找後答」的技巧,用來提高模型的回答精確度。RAG 透過兩步驟來完成回答。

RAG 就像是給書精靈一個「檢索咒語」,幫助他先找到和問題相關的段落,再進行回答。

首先檢索相關內容,然後使用這些找到的資料來生成答案。這樣可以幫助模型處理大量資訊,尤其是當問題需要詳細細節或最新資料時,RAG 能有效縮小範圍,避免模型記住所有內容而浪費資源。

  • 檢索(R):書精靈會先從《西遊記》中找出和「天庭派來的妖怪」有關的段落,比如紅孩兒、白骨精等妖怪的背景,並找到它們與天庭的關係。

  • 生成(G):然後精靈根據這些找到的段落生成一個更完整的答案,比如:「在取經路上,孫悟空遇到的妖怪中,紅孩兒等妖怪與天庭有特殊的聯繫。這些妖怪阻撓取經的原因可能涉及天庭內部的鬥爭和試煉設置……」

例子:使用 RAG

假設你問了一個比較複雜的問題:

「孫悟空在取經路上遇到的妖怪中,有哪些是天庭派來的?為什麼這些妖怪要阻撓取經?」


這個問題涉及到不同妖怪的背景,以及它們與天庭的關係,這些內容分散在《西遊記》的許多章節裡。如果僅靠 prompt,書精靈可能很難給出一個詳細且準確的回答。

這樣一來,精靈就能更準確地回答,包含更多細節,並且回答過程更條理分明。

什麼情況下特別需要 RAG?

問題涉及大量細節時:比如問

「孫悟空在取經路上遇到的每個妖怪的背景和來歷」

這樣的問題涉及太多細節,RAG 能幫助書精靈找到和每個妖怪有關的段落,再進行回答。

《西遊記》的內容這麼多,假設今天西遊記又出了 100 多集:即使 prompt 很好,精靈記住所有內容也很難。RAG 可以讓他在回答前,先找到最相關的段落,只讀取這些段落來回答問題。

需要準確性時:如果問題很細緻,比如

「哪個妖怪與天庭的關係最密切?」

這種問題需要非常準確的答案,RAG 可以幫助精靈找到書中最相關的描述,避免誤解或遺漏。

想像你問模型:「唐三藏在取經路上遇到的妖怪有哪些?」RAG 系統會先在《西遊記》中找出與妖怪有關的段落,並整理出紅孩兒、白骨精等妖怪的相關資訊,然後模型才根據這些資訊回答,確保答案完整且準確。

簡單來說,RAG 就像一位智慧的助手,先快速查找《西遊記》裡的相關資料,再根據找到的內容回答問題,這樣讓回應更準確又省時。

總結後記

簡單來說,這是一篇很初探的文章,讓大家知道語言模型到底是怎麼跟所謂文字,資料,相似資訊扯上邊,在這個框架下,Prompting 和 RAG 的結合是一種協同方式,

Prompting 指導模型如何回答,確保回答的格式和風格符合需求。RAG 幫助模型從海量資料中找到與問題最相關的片段,讓生成的答案更具體、更準確。

其中,為什麼這些概念和實作的過程會這麼重要?這些一切的一切,都是讓機器知道人類期望的目的和達到人類預期的產出。

同時我們也更知道語言模型在資料的生成與探索和索引的方式,懂更多的探索方式,我們才能真正真正善用 AI ,成為 AI 應用真正的主人。

最後呼籲,記得分享文章!

技術人,記得報名,信用卡是用來刷的,放著總是會爆!
(課程報名有賺有賠,參加之前請詳細查看公開說明書 wwww)
https://exma.kktix.cc/events/ai-for-dev-course-rag-2

留言

張貼留言

這個網誌中的熱門文章

npm 還可以看影片,沒想到真的有人這麼做

 還真的有人做這件事情, 庆余年2剛上線,有一位小哥竟然利用 npm 包的機制,將整套高清視頻都搬上來了。 https://x.com/fengmk2/status/1791498406923215020 圖片來源, https://x.com/fengmk2/status/1791498406923215020/photo/1 此 Package 出處 https://www.npmjs.com/package/lyq2?activeTab=versions 截圖留念, 機制說明 NPM(Node Package Manager)是一個流行的 JavaScript 軟件包管理器,用於管理和分發 Node.js 應用的依賴。它允許開發者將自己的代碼打包成「包」,並上傳到 NPM 的公共註冊表,供其他開發者下載和使用。這個過程通常包括以下步驟: 創建 NPM 包 :開發者將自己的代碼和相關文件打包成一個 NPM 包。 上傳到註冊表 :將包上傳到 NPM 的公共註冊表。 下載和使用 :其他開發者可以通過 NPM 命令行工具下載並安裝這些包。 這位小哥利用這一機制,可能是通過將整套高清視頻文件打包成 NPM 包並上傳到公共註冊表。其他人只需通過簡單的 NPM 命令即可下載這些視頻文件。 影響 版權問題 :這種行為涉及明顯的版權侵犯。高清視頻通常受到版權保護,未經授權的分發和下載都是非法的。 NPM 註冊表的可靠性 :這類內容的出現可能會損害 NPM 註冊表的可靠性和聲譽。NPM 註冊表是開發者分享和使用代碼的重要平台,如果充斥著這些不合法的內容,會影響其公信力。 潛在的安全風險 :將視頻文件偽裝成 NPM 包可能會帶來潛在的安全風險。下載這些包的用戶可能會無意中下載到惡意軟件或其他有害內容。 技術濫用 :這一行為展示了技術的濫用,原本為了方便開發者分享和使用代碼的機制,被用來分發非法內容,會對整個開發者社區造成負面影響。 歡迎留言給我,讓我們得到更多討論,一起回饋更多可能。 如果對於技術架構或者技術開發有相關需要顧問教育訓練服務或專案開發,聯絡方式如下,或者是與皇漢科技 EXMA-Square 進行聯繫。 FB: https://www.facebook.com/clonncd/ Twitter: https://twitter.com/clonncd 熱血漢誌: htt

從易經八卦到 AI 應用:用 LLM 自動化數據整理的工程探險

從 2023 年開始,在去年 為何技術老人這樣想那樣做? 的那場分享之前,就開始探索管理的更多可能性,以及探索更深層的奧秘,宇宙的二進位,生活中的陰與陽,到透過朋友深入探索 8 進位和 64 進位的玄學領域。 一開始只是想將自己體驗進行工程的還原,先是以為透過 ai 可以很快(偷懶)就可以解決掉資訊整理的問題,這邊有些踩雷的過程,以及對於整體實作的紀錄,分享給大家。 人生,原本以為很輕鬆的事情,最後都會不太容易 原本目標是希望將網路上許多的八卦資訊,以及六十四卦象內容,透過 AI 將資料進行彙整,就資料進行整合以及釐清就花了些時間 (汗) 以下且聽我慢慢道來 ... . 思緒步驟 大概步驟會是這樣,首先進行基礎八卦資訊搜集,大概由乾掛到坤卦,這些都可以在網路上容易取得,(這邊採用的是先天八卦順序) https://chatgpt.com/share/672083ea-4000-8010-ae50-3e120d845244 接著進入重點, 64 卦目前並沒有太多工程項目可以進行整合資料,因此主要透過 ChatGPT 產生資訊,以及透過 wiki 進行先達到快速效果。 https://chatgpt.com/share/67208416-c210-8010-9d43-a8c7235a1b03 緊接著,就會得到一串很像是 64 掛的內容, 不看不知道,一看嚇一跳,取得資料中會包含錯誤資訊,對應錯誤的上下卦,但畢竟是電腦,有錯很正常,這才是我認識的 ChatGPT (這邊也有試過 Claude 也有相同問題)。 校正回歸 此時經驗就非常重要,透過 AI 協助我們進行資料編寫比對,但不是單純的比對,而是要先想清楚自己的目標是什麼。 64 卦,兩兩相對。 64 卦,每個卦象不重複。 基礎於一開始 『懶』的狀態 , 首先直覺性的,是將比對錯誤的 json 直接丟入,原本預計透過 chain of thought 的方式,讓 llm 進行重複確認,但 ... 測試發現,需要透過 llm 產出原生資料越大時,隱藏的重複錯誤性會隨之提高。 llm 不轉,我轉 因此,這邊的解法朝向糾錯為主。 首先回到目的性,我們需要得到的結果是 完整的 64 卦象 取得對應的正確上下卦位置。 當我們有這樣明