大語言模型是由大量的資料訓練而成,但並非所有事情語言模型都能夠精確回答,當語言模型遇到不理解或不清楚的問題時,模型沒有資料可以進行回覆便有可能會「一本正經胡說八道」,這個狀況在學術上稱為「幻覺(Hallucinations)」,為了解決這樣的狀況,現在已經發展出很多因應幻覺的技術,雖然還在發展階段,但是已經可以大幅降低模型幻覺的情形,這些技術包含RAG、CoT、ToT、React 等技術。
除了透過上一章提到prompt的基本結構,在prompt engineering中我們也可以透過讓模型思考來達到更精確的答案。
CoT(Chain-of-Thought) 是十分常見讓模型去思考的方式,如果問題比較複雜或比較繁瑣,可以將大任務拆解成小任務,讓模型「一步一步(step by step)」去思考或執行。
舉例來說:
沒有CoT
9.9和9.11哪一個比較大?
模型不理解小數點的判讀方式,所以回答錯誤:
9.11比9.9大。
在十進制數字系統中,9.11表示9加上11/100(或0.11),而9.9表示9加上9/10(或0.9)。
計算如下:
9.11 = 9 + 0.11 = 9.11
9.9 = 9 + 0.9 = 9.90
因此,9.11大於9.9,差值為0.21。
需要我進一步解釋嗎?
使用CoT
小數點左邊的數字表示整數部分,例如:3.1416 中的 3 是整數部分。小數點右邊的數字表示小數部分,例如:3.1416 中的 1416 是小數部分,表示分數的形式。小數點後的第一位是十分位(1/10),第二位是百分位(1/100),第三位是千分位(1/1000),以此類推。
請一步一步思考9.9和9.11哪一個比較大?
模型了解小數點的判讀方式,回答正確:
讓我們來一步一步思考9.9和9.11哪一個比較大:
1. 首先,我們看整數部分:
兩個數字的整數部分都是9,所以我們需要比較小數部分。
2. 比較小數部分:
- 9.9的小數部分是9
- 9.11的小數部分是11
3. 分析小數部分:
- 9.9 = 9 + 9/10 = 9 + 0.9
- 9.11 = 9 + 1/10 + 1/100 = 9 + 0.10 + 0.01 = 9 + 0.11
4. 比較0.9和0.11:
0.11 比 0.9 小,因為0.11只有11個百分之一,而0.9有90個百分之一。
5. 結論:
因為9.9的小數部分大於9.11的小數部分,所以9.9比9.11大。
因此,9.9比9.11大。
基於CoT的架構,也有衍伸出Tree of Thoughts(ToT)的架構,解決了CoT只有單一思路可能會因為一個想法錯誤而導致全部推理錯誤的狀況。
ToT和CoT一樣會先將較大的問題分解為更小的子任務,讓模型逐步處理。ToT的運作機制會使用搜尋演算法(ex. 廣度優先搜尋、深度優先搜尋等)來系統性地探索思路樹,從而找到最佳解決方案。
舉例來說:
沒有CoT
9.9和9.11哪一個比較大?
模型不理解小數點的判讀方式,所以回答錯誤:
9.11比9.9大。
在十進制數字系統中,9.11表示9加上11/100(或0.11),而9.9表示9加上9/10(或0.9)。
計算如下:
9.11 = 9 + 0.11 = 9.11
9.9 = 9 + 0.9 = 9.90
因此,9.11大於9.9,差值為0.21。
需要我進一步解釋嗎?
使用CoT
小數點左邊的數字表示整數部分,例如:3.1416 中的 3 是整數部分。小數點右邊的數字表示小數部分,例如:3.1416 中的 1416 是小數部分,表示分數的形式。小數點後的第一位是十分位(1/10),第二位是百分位(1/100),第三位是千分位(1/1000),以此類推。
請一步一步思考9.9和9.11哪一個比較大?
模型了解小數點的判讀方式,回答正確:
讓我們來一步一步思考9.9和9.11哪一個比較大:
1. 首先,我們看整數部分:
兩個數字的整數部分都是9,所以我們需要比較小數部分。
2. 比較小數部分:
- 9.9的小數部分是9
- 9.11的小數部分是11
3. 分析小數部分:
- 9.9 = 9 + 9/10 = 9 + 0.9
- 9.11 = 9 + 1/10 + 1/100 = 9 + 0.10 + 0.01 = 9 + 0.11
4. 比較0.9和0.11:
0.11 比 0.9 小,因為0.11只有11個百分之一,而0.9有90個百分之一。
5. 結論:
因為9.9的小數部分大於9.11的小數部分,所以9.9比9.11大。
因此,9.9比9.11大。
基於CoT的架構,也有衍伸出Tree of Thoughts(ToT)的架構,解決了CoT只有單一思路可能會因為一個想法錯誤而導致全部推理錯誤的狀況。
ToT和CoT一樣會先將較大的問題分解為更小的子任務,讓模型逐步處理。ToT的運作機制會使用搜尋演算法(ex. 廣度優先搜尋、深度優先搜尋等)來系統性地探索思路樹,從而找到最佳解決方案。
RAG(Retrieval-Augmented Generation)是一種結合語言模型和資料檢索技術的方法,當我們需要有一個特定領域知識的專家時就很適合使用RAG,因為我們可以投入很多資料讓模型進行檢索,而不用再訓練模型,就能讓語言模型回答資料的內容給使用者。
提到RAG就必須要提到「Embedding」,Embedding的技術是將文字具有的特徵轉換為向量的形式。
舉例來說:
花是繽紛的、有些長在草地上、季節性的、很漂亮等,這些和花相關的特性就是文字特徵,Embedding model 會將這些文字特徵轉換為數字散佈在多維空間中,也就是所謂的向量。
將RAG的流程拆分為兩階段,第一階段我們需要先建置知識庫,第二階段則是從使用者提問到檢索回應的過程:
建置知識庫
提問與回應
除了上述的方法以外,也有一些最佳化prompt的框架工具和套件可以使用,這邊分享TextGrad,可以參考:
本文內容基於個人學習、交流與實踐經驗,並非專門研究生成式 AI 或領域專家。若有任何問題或內容上的錯誤或建議,誠摯歡迎友善交流與指正,讓我們共同探討與成長。感謝您的閱讀與支持!