這篇文章是給對於你已經開始使用所謂的 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
hello world
回覆刪除