返回首頁

RAG 新手完整教學:從資料整理到錯誤排查

發布時間:2026-10-28 19:38
YouTube 影片重點整理

RAG 新手完整教學:從資料整理到錯誤排查

📺 Gary Chen⏱ 21:01🗓 2026-10-28🌐 zh🔗 https://youtu.be/YM-6-QhGHgI

影片以「巴菲特數位分身」為例,說明 RAG 的核心不是把整包資料交給模型,而是先找出與問題相關的少量資料,再讓模型根據這些資料回答。內容依序拆解 R(資料整理與檢索)、A(重排並組成小抄)、G(依小抄生成答案),最後提供從資料、檢索、重排到模型端的排錯順序。

01

RAG 解決的是「資料太多,不能每次全塞給模型」

00:00

影片以巴菲特資料為例:直接把大量文件當附件交給模型,會遇到 context window 上限;即使勉強塞得下,每個新問題仍得重新讀取,因而變慢且成本升高。

RAG 的做法是先找出真正有關的少數段落,再交給 AI 回答,讓回答以特定資料為主要依據。

02

R、A、G 是一條資料流

03:51

R(Retrieval)負責檢索;A(Augmented)把找到的內容與問題組合;G(Generation)根據這些內容生成答案。影片用「先查資料再回答」概括這個流程。

在實作視角中,R 又可分為先整理書架(資料準備)與再找書(查詢時檢索)。

03

資料清洗、切塊與 metadata 是 R 的基礎

04:52

清洗的目標是提高資訊密度與確保語意獨立:去除轉檔雜訊、寒暄與無意義口語,並補足代名詞、說話者和問答脈絡。影片提到可先用確定性的腳本做物理清理,再以較便宜的小模型做語意整理。

切塊時,固定字數方法易於控制成本,但可能把一句話或問答切斷;若資料有標題或問答結構,依自然結構切塊可讓單一 chunk 保有完整語境。

每個 chunk 也要有 metadata,例如年份、來源或權限標籤,以支援條件過濾與存取控制。

04

混合搜尋同時處理精確名詞與概念相似性

11:07

關鍵字搜尋擅長特定人名、公司代號和專有名詞;語意搜尋用 embedding 把文字轉成向量,適合找到字面不同但意思相近的內容。

影片建議將兩者並行作為 hybrid search,先取得候選 chunk;此時仍只是初篩,尚未直接交給模型作答。

05

A 階段把候選資料濃縮成可用的小抄

14:31

初步檢索回來的候選中可能混有半相關內容。影片將 reranking 放在 A 的理解架構裡:讓較仔細的模型逐一比對問題與候選資料,將真正有用的內容排到前面。

之後挑選少量高相關 chunk,連同 metadata、問題及「只能依資料回答,資料沒有就說不知道」等指示,組成最終提示。

06

G 階段與排錯順序

16:06

G 是把小抄交給語言模型生成答案。影片指出,知識庫問答不一定需要最昂貴的模型;若回答不一致或過度延伸,可先降低 temperature。

若答案錯誤,先檢查資料是否切壞或辨識錯,再檢查檢索是否漏掉正確資料、reranking 是否未把它送進前幾名,最後才檢查 system prompt 與模型本身。

RAG 的核心,是在有限的上下文裡,把最正確、最有密度的資料交到 AI 眼前。

重點時間戳索引

  1. 00:00RAG 適用於讓 AI 以經認證的個人或企業資料為主要依據回答;把全部資料直接塞進上下文會受限於容量、速度與成本。
  2. 03:51RAG 可理解為「先查資料再回答」:R 是檢索相關段落,A 是把段落與問題組合,G 是根據這些內容生成答案。
  3. 04:52資料準備先清除雜訊並補足脈絡,再切成可獨立理解的知識卡;固定長度切塊容易切斷語意,依標題或問答結構切塊可保留上下文。
  4. 11:07每張知識卡需附 metadata,讓系統可依年份、來源或權限等條件先篩選;檢索可結合關鍵字搜尋與語意搜尋,兼顧專有名詞與概念相近性。
  5. 14:31初步找回的候選資料仍可能含雜訊,需用 reranking 重新排序,再挑出少量最相關的內容,連同來源與回答限制組成最終提示。
  6. 16:06G 階段把整理好的提示交給模型產生答案;影片建議知識庫問答不一定要用最昂貴模型,並可降低 temperature 以減少隨機性與幻覺。
  7. 17:46答錯時依資料流逐段排查:先查資料是否切壞或辨識錯,再查檢索是否漏找、重排是否未把正確資料送進提示,最後才檢查提示與模型能力。

關鍵字

RAG知識庫檢索Hybrid SearchRerankingContext Engineering

⚠️ 未確認 / 無法核對項目

  • 逐字稿由 Whisper 轉寫;英文術語與少數專有名詞已依語境校正,但原始逐字稿保留轉寫內容供核對。

🎙️ ASR 漂字對照表

RAC/Rack→RAG
小超→小抄
護程盒→護城河
Stayless→stateless
gevenite flash→Gemini Flash
Cloud Code→Claude Code
📎 原始內容(查證 / AI 追查用,非閱讀主文,點擊展開)
逐字稿全文
1
00:00:00,000 --> 00:00:02,160
不管你平常有沒有在深入研究AI

2
00:00:02,160 --> 00:00:03,700
你很可能都動過這個念頭

3
00:00:03,700 --> 00:00:05,100
能不能幫自己或團隊

4
00:00:05,100 --> 00:00:06,700
做一個隨問隨答的第二大腦

5
00:00:06,700 --> 00:00:07,940
或是幫你的AI agent

6
00:00:07,940 --> 00:00:09,800
接上一整個專屬的知識庫

7
00:00:10,240 --> 00:00:11,500
只要你想做這件事

8
00:00:11,500 --> 00:00:13,500
就一定會碰上RAG這個觀念

9
00:00:14,000 --> 00:00:15,640
如果你平常就很關注AI

10
00:00:15,640 --> 00:00:16,700
可能會覺得奇怪

11
00:00:16,700 --> 00:00:17,800
都2026年了

12
00:00:17,800 --> 00:00:19,000
為什麼還在講RAG

13
00:00:19,400 --> 00:00:21,200
但對於在意公司資料隱私的人

14
00:00:21,200 --> 00:00:23,200
或是想打造個人知識庫的人來說

15
00:00:23,200 --> 00:00:24,160
RAG的價值在於

16
00:00:24,160 --> 00:00:26,500
你可以只為給模型你自己認證過的資料

17
00:00:26,500 --> 00:00:28,700
讓他盡可能從這些資料裡回答問題

18
00:00:28,700 --> 00:00:31,000
而不是像通用的ChatGPT一樣

19
00:00:31,000 --> 00:00:33,000
給出每個人都拿得到的答案

20
00:00:33,400 --> 00:00:35,500
如果你累積了幾十年的產業經驗

21
00:00:35,500 --> 00:00:38,000
想讓這些知識在公司內部流通傳承

22
00:00:38,000 --> 00:00:40,200
或者你有建立個人知識庫的習慣

23
00:00:40,200 --> 00:00:41,900
希望你的agent在回答時

24
00:00:41,900 --> 00:00:44,000
以你的知識庫作為最主要的依據

25
00:00:44,000 --> 00:00:45,900
就會用到RAG這個技術

26
00:00:45,900 --> 00:00:47,500
所以今天這支影片

27
00:00:47,500 --> 00:00:48,700
就算你是RAG小白

28
00:00:48,700 --> 00:00:50,200
我也會帶你搞懂這個技術

29
00:00:50,200 --> 00:00:51,500
讓你知道RAG是什麼

30
00:00:51,500 --> 00:00:53,400
如果你已經有在實作自己的RAG

31
00:00:53,400 --> 00:00:55,700
我也會分享實作時最容易踩到的坑

32
00:00:55,700 --> 00:00:58,400
以及該怎麼一步一步把一個RAG做對

33
00:00:58,400 --> 00:00:59,100
做好

34
00:00:59,100 --> 00:01:00,400
那我們直接開始

35
00:01:00,900 --> 00:01:03,200
那我們一樣用一個生活化的例子來介紹RAG

36
00:01:03,200 --> 00:01:04,600
這樣可能會比較好理解

37
00:01:04,600 --> 00:01:06,200
假設你是一位價值投資人

38
00:01:06,200 --> 00:01:07,400
而巴菲特是你的偶像

39
00:01:07,400 --> 00:01:09,900
你想要把他投資的整套方法論都學過來

40
00:01:10,400 --> 00:01:11,900
過去你只能看看他的書

41
00:01:11,900 --> 00:01:12,900
聽聽他的訪談

42
00:01:12,900 --> 00:01:15,200
自己慢慢領悟巴菲特的投資邏輯

43
00:01:15,200 --> 00:01:16,600
但現在有了AI

44
00:01:16,600 --> 00:01:18,300
你開始幻想自己是否有能力

45
00:01:18,300 --> 00:01:19,400
讓手邊的這個AI

46
00:01:19,400 --> 00:01:21,100
變成巴菲特的數位分身

47
00:01:21,100 --> 00:01:23,100
這樣我之後在做任何投資決策

48
00:01:23,100 --> 00:01:24,700
或是看不懂一家公司的時候

49
00:01:24,700 --> 00:01:25,700
就可以直接問他了

50
00:01:26,200 --> 00:01:28,200
那麼第一步你會怎麼做

51
00:01:28,200 --> 00:01:30,100
你學過怎麼寫好一份提示詞

52
00:01:30,100 --> 00:01:32,100
所以你明白定義角色的重要性

53
00:01:32,100 --> 00:01:33,800
所以你直接打開了ChatGPT

54
00:01:33,800 --> 00:01:36,000
跟他說請扮演古神巴菲特

55
00:01:36,000 --> 00:01:38,100
並用他的思維回答我以下的問題

56
00:01:39,000 --> 00:01:40,300
剛開始效果還不錯

57
00:01:40,300 --> 00:01:42,300
畢竟大語言模型本來就學過很多

58
00:01:42,300 --> 00:01:44,400
巴菲特的經典名言和投資原則

59
00:01:44,400 --> 00:01:46,400
問什麼護城河 安全編輯

60
00:01:46,400 --> 00:01:47,800
他都能講得頭頭是道

61
00:01:48,400 --> 00:01:50,000
但聊著聊著你就會發現

62
00:01:50,000 --> 00:01:51,500
只要你問得稍微深一點

63
00:01:51,500 --> 00:01:52,100
細一點

64
00:01:52,100 --> 00:01:53,700
模型就開始出現幻覺

65
00:01:53,700 --> 00:01:55,600
有時候會一本正經的胡說八道

66
00:01:55,600 --> 00:01:57,600
給出完全錯誤的年份或數字

67
00:01:57,600 --> 00:02:00,500
甚至引用了巴菲特從來沒有說過的話

68
00:02:00,500 --> 00:02:01,500
這時候你就想

69
00:02:01,500 --> 00:02:03,800
那我乾脆把巴菲特所有的資料全部載下來

70
00:02:03,800 --> 00:02:05,800
當作檔案附件直接喂給AI

71
00:02:05,800 --> 00:02:07,200
讓AI看著資料回答

72
00:02:07,200 --> 00:02:08,100
總不會錯了吧

73
00:02:08,500 --> 00:02:09,100
於是

74
00:02:09,100 --> 00:02:11,000
你把巴菲特60年的股東信

75
00:02:11,000 --> 00:02:12,700
30幾年的股東會逐字稿

76
00:02:12,700 --> 00:02:13,800
全部下載下來

77
00:02:13,800 --> 00:02:15,000
打包成一個大檔案

78
00:02:15,000 --> 00:02:17,200
然後拖進對話框並按下送出

79
00:02:17,600 --> 00:02:18,700
結果下一秒

80
00:02:18,700 --> 00:02:20,400
畫面立刻跳出一行紅字

81
00:02:20,400 --> 00:02:22,200
跟你說檔案內容超過上限

82
00:02:22,200 --> 00:02:23,800
請縮減資料後再試

83
00:02:24,300 --> 00:02:25,500
這是你撞到的第一個牆

84
00:02:25,500 --> 00:02:28,200
Context Window也就是模型在一次對話裡

85
00:02:28,200 --> 00:02:29,800
能容納的記憶上限

86
00:02:29,800 --> 00:02:30,900
你的問題

87
00:02:30,900 --> 00:02:32,200
你貼給他的資料

88
00:02:32,200 --> 00:02:33,700
再加上他要回答的字數

89
00:02:33,700 --> 00:02:35,400
全部都要算在這個上限裡

90
00:02:35,400 --> 00:02:38,000
如果今天巴菲特只寫過薄薄一本書

91
00:02:38,000 --> 00:02:39,800
你整包丟進去確實沒問題

92
00:02:39,800 --> 00:02:40,900
簡單又省事

93
00:02:40,900 --> 00:02:42,300
你甚至不需要學RAC

94
00:02:42,300 --> 00:02:43,700
但巴菲特的資料量

95
00:02:43,700 --> 00:02:45,500
光是英文單字就有幾百萬字

96
00:02:45,500 --> 00:02:47,000
換算成AI的計算單位

97
00:02:47,000 --> 00:02:48,500
Token也是高達兩三百萬

98
00:02:48,500 --> 00:02:50,700
現在主流模型就算胃口再大

99
00:02:50,700 --> 00:02:52,700
上限頂多也就一百萬Token左右

100
00:02:52,700 --> 00:02:53,700
而你手上的資料

101
00:02:53,700 --> 00:02:55,300
足足是他的兩到三倍

102
00:02:55,300 --> 00:02:57,700
而且這還不只是Token太多

103
00:02:57,700 --> 00:02:58,700
塞不下的問題

104
00:02:58,700 --> 00:03:00,400
就算你退一步

105
00:03:00,400 --> 00:03:03,000
把資料砍到剛好塞得進模型的上下文

106
00:03:03,000 --> 00:03:05,200
也會立刻碰上另外兩個現實問題

107
00:03:05,200 --> 00:03:06,900
那就是回答又慢又貴

108
00:03:06,900 --> 00:03:08,100
為什麼

109
00:03:08,100 --> 00:03:10,400
因為大語言模型本質上是Stayless的

110
00:03:10,400 --> 00:03:12,600
也就是根本不會記住你未給他的檔案

111
00:03:12,600 --> 00:03:14,000
你每問一個新問題

112
00:03:14,000 --> 00:03:16,400
這一整大包資料就要重頭重新讀一遍

113
00:03:16,400 --> 00:03:17,100
你問10題

114
00:03:17,100 --> 00:03:18,300
他就重讀10次

115
00:03:18,300 --> 00:03:21,100
所以你每問一句他都要重新消化幾十萬字

116
00:03:21,100 --> 00:03:22,000
慢得要死

117
00:03:22,000 --> 00:03:24,000
頂級模型每讀一次上百萬Token

118
00:03:24,000 --> 00:03:25,400
就要幾塊甚至20美金

119
00:03:25,400 --> 00:03:26,600
隨便問個10題

120
00:03:26,600 --> 00:03:27,900
你的額度就扛不住了

121
00:03:27,900 --> 00:03:29,000
資料越多

122
00:03:29,000 --> 00:03:29,900
你就等得越久

123
00:03:29,900 --> 00:03:30,700
花得越多

124
00:03:30,700 --> 00:03:32,500
繞了一圈你會發現

125
00:03:32,500 --> 00:03:34,100
問題的盲點到底在哪裡

126
00:03:34,100 --> 00:03:35,600
就是我們每一次

127
00:03:35,600 --> 00:03:37,400
都逼AI把全部的資料

128
00:03:37,400 --> 00:03:38,400
從頭啃一遍

129
00:03:38,400 --> 00:03:40,000
可是你想想看

130
00:03:40,000 --> 00:03:42,000
你問巴菲特怎麼看待護城河

131
00:03:42,000 --> 00:03:43,200
真正用得上的內容

132
00:03:43,200 --> 00:03:44,800
往往就只有那兩三段而已

133
00:03:44,800 --> 00:03:46,600
那我們何不換個思路

134
00:03:46,600 --> 00:03:49,200
先把真正用得上的那兩三段找出來

135
00:03:49,200 --> 00:03:51,000
只交給AI讀不就好了

136
00:03:51,000 --> 00:03:52,300
這個做法

137
00:03:52,300 --> 00:03:53,100
就是RAG

138
00:03:53,100 --> 00:03:56,500
它其實完全符合我們人類自己查資料的直覺

139
00:03:56,500 --> 00:03:58,600
你想知道巴菲特怎麼講護城河

140
00:03:58,600 --> 00:04:01,600
你絕不可能把60年的信從第一封讀到最後一封

141
00:04:01,600 --> 00:04:03,300
你一定會打開搜尋框

142
00:04:03,300 --> 00:04:04,300
輸入護城河

143
00:04:04,300 --> 00:04:06,800
把那幾段翻出來讀完再整理出答案

144
00:04:06,800 --> 00:04:09,600
RAG只是讓AI也照這個方式做事而已

145
00:04:09,600 --> 00:04:11,400
RAG這三個字母

146
00:04:11,400 --> 00:04:13,100
正好對應這三個動作

147
00:04:13,100 --> 00:04:14,500
R是Retrieval

148
00:04:14,500 --> 00:04:15,100
檢索

149
00:04:15,100 --> 00:04:16,200
也就是打開搜尋

150
00:04:16,200 --> 00:04:17,600
把相關段落找出來

151
00:04:17,600 --> 00:04:19,000
A是Augmented

152
00:04:19,000 --> 00:04:19,500
增強

153
00:04:19,500 --> 00:04:21,700
把找到的段落跟你的問題拼在一起

154
00:04:21,700 --> 00:04:23,000
攤在AI眼前

155
00:04:23,000 --> 00:04:24,200
G是Generation

156
00:04:24,200 --> 00:04:24,800
生成

157
00:04:24,800 --> 00:04:27,000
讓AI看著這幾段精準寫出答案

158
00:04:27,000 --> 00:04:29,600
中文翻成檢索增強生成

159
00:04:29,600 --> 00:04:30,900
聽起來像學術論文

160
00:04:30,900 --> 00:04:32,300
但說穿了就一句話

161
00:04:32,300 --> 00:04:33,900
先查資料再回答

162
00:04:33,900 --> 00:04:35,300
既然RAG的本質是

163
00:04:35,300 --> 00:04:36,700
先查資料再回答

164
00:04:36,700 --> 00:04:38,900
那我們真的要動手做一個巴菲特的RAG

165
00:04:38,900 --> 00:04:40,000
整個流程就直接照

166
00:04:40,000 --> 00:04:41,800
RAG這三個字母走

167
00:04:41,800 --> 00:04:43,100
R是把資料整理好

168
00:04:43,100 --> 00:04:44,100
建好鎖印

169
00:04:44,100 --> 00:04:45,100
讓系統找得到

170
00:04:45,100 --> 00:04:46,400
A是從找到的東西裡

171
00:04:46,400 --> 00:04:47,700
挑出最好的幾張

172
00:04:47,700 --> 00:04:49,600
拼成一份乾淨的小鈔遞給AI

173
00:04:49,600 --> 00:04:50,800
G是調教AI

174
00:04:50,800 --> 00:04:53,100
讓他看著小鈔把答案寫對

175
00:04:53,100 --> 00:04:54,300
這三步裡最長

176
00:04:54,300 --> 00:04:55,500
也最容易被忽略的

177
00:04:55,500 --> 00:04:56,600
就是R

178
00:04:56,600 --> 00:04:58,000
而R又分成兩半

179
00:04:58,000 --> 00:04:59,500
前半是把書架整理好

180
00:04:59,500 --> 00:05:00,000
後半才


1
00:05:00,000 --> 00:05:01,280
甚至去書架上找書

2
00:05:01,800 --> 00:05:04,360
很多人做RAC第一步就跳去調向量資料庫

3
00:05:04,360 --> 00:05:05,880
或是寫檢索演算法

4
00:05:05,880 --> 00:05:07,420
但後面很多AI找不到答案

5
00:05:07,420 --> 00:05:08,700
或者回答鬼打牆的問題

6
00:05:08,700 --> 00:05:11,000
九成以上的根源通通都在資料本身

7
00:05:11,000 --> 00:05:13,320
也就是整理書架的這前半段

8
00:05:14,080 --> 00:05:15,360
回到我們手上的東西

9
00:05:15,360 --> 00:05:17,660
你現在有巴菲特60年的股東信

10
00:05:17,660 --> 00:05:19,200
30幾年的股東會逐字稿

11
00:05:19,200 --> 00:05:20,740
整整一大包純文字

12
00:05:21,000 --> 00:05:23,560
如果要讓它變成AI可以查閱的專屬知識庫

13
00:05:23,560 --> 00:05:24,840
下一步應該怎麼做

14
00:05:25,080 --> 00:05:26,620
答案就是清洗資料

15
00:05:26,620 --> 00:05:29,180
但清洗資料不是單純的順手改改錯字

16
00:05:29,180 --> 00:05:32,260
文本清洗的兩個核心目標是拉高資訊密度

17
00:05:32,260 --> 00:05:33,780
以及確保語意獨立

18
00:05:33,780 --> 00:05:35,060
接下來我們一個一個講

19
00:05:35,580 --> 00:05:37,120
第一是拉高資訊密度

20
00:05:37,120 --> 00:05:38,900
你抓下來的逐字稿和檔案

21
00:05:38,900 --> 00:05:40,960
裡面充滿了大量檢索不需要的雜訊

22
00:05:40,960 --> 00:05:43,260
像是PDF轉檔留下的夜首夜尾

23
00:05:43,260 --> 00:05:44,280
主持人的寒暄

24
00:05:44,280 --> 00:05:45,060
現場笑聲

25
00:05:45,060 --> 00:05:47,360
或是請下一位股東到3號麥克風提問

26
00:05:47,360 --> 00:05:48,380
這種過場廢話

27
00:05:48,380 --> 00:05:49,660
如果不把這些清掉

28
00:05:49,660 --> 00:05:51,460
AI到時候就很容易撈出垃圾

29
00:05:51,460 --> 00:05:53,500
白白浪費模型的上下文空間

30
00:05:54,020 --> 00:05:55,540
第二是確保語意完整

31
00:05:55,540 --> 00:05:57,340
口語對話通常非常破碎

32
00:05:57,340 --> 00:05:59,140
巴菲特講話常常省略主詞

33
00:05:59,140 --> 00:06:00,940
或者蒙格在旁邊插一句話

34
00:06:01,440 --> 00:06:03,240
如果你沒有把這段話是誰說的

35
00:06:03,240 --> 00:06:05,280
他到底在回答哪個問題整理清楚

36
00:06:05,280 --> 00:06:07,080
這段文字一旦被單獨抽出來

37
00:06:07,080 --> 00:06:08,860
AI根本看不懂前因後果

38
00:06:08,860 --> 00:06:09,900
甚至會張冠禮帶

39
00:06:10,660 --> 00:06:11,940
清洗的真正目的

40
00:06:11,940 --> 00:06:14,500
就是把原本混亂破碎的原始素材

41
00:06:14,500 --> 00:06:17,580
整理成每一段都自帶完整脈絡的高濃度知識

42
00:06:18,080 --> 00:06:20,640
那面對幾十萬上百萬字的逐字稿

43
00:06:20,640 --> 00:06:22,440
具體在工程上到底該怎麼洗

44
00:06:22,440 --> 00:06:24,480
你總不可能人工一行一行去修吧

45
00:06:24,740 --> 00:06:26,780
目前業界最成熟的best practice

46
00:06:26,780 --> 00:06:28,840
其實是一套自動化的兩階段管線

47
00:06:29,600 --> 00:06:32,420
第一階段用deterministic的腳本做物理掃除

48
00:06:32,940 --> 00:06:33,960
把SRT時間戳

49
00:06:34,220 --> 00:06:34,720
格式亂碼

50
00:06:34,980 --> 00:06:35,760
現場笑聲

51
00:06:36,000 --> 00:06:36,260
以及

52
00:06:36,520 --> 00:06:37,040
嗯啊

53
00:06:37,040 --> 00:06:37,280
那個

54
00:06:37,540 --> 00:06:38,820
這種無意義的口語墜字

55
00:06:39,080 --> 00:06:39,840
全部自動剔除

56
00:06:40,620 --> 00:06:42,920
第二階段交給便宜又快速的小模型

57
00:06:43,180 --> 00:06:44,460
像是GPT mini系列

58
00:06:44,720 --> 00:06:45,740
幫你做語意整理

59
00:06:46,500 --> 00:06:47,520
這裡最關鍵的一步

60
00:06:47,780 --> 00:06:49,060
叫做代名詞還原

61
00:06:49,320 --> 00:06:50,340
口語聊天常常說

62
00:06:50,340 --> 00:06:51,360
它那時候很便宜

63
00:06:51,620 --> 00:06:52,900
那家公司護程盒很深

64
00:06:53,160 --> 00:06:54,700
小模型會根據上下文脈絡

65
00:06:54,960 --> 00:06:56,480
自動把它替換回可口可樂

66
00:06:56,480 --> 00:06:59,300
同時它會把現場混在一起的多人講話

67
00:06:59,560 --> 00:07:00,580
標清楚誰是發問者

68
00:07:00,840 --> 00:07:01,340
誰是回答者

69
00:07:01,600 --> 00:07:03,140
整理成乾淨的一問一答

70
00:07:03,900 --> 00:07:05,180
這一步關鍵的原因是

71
00:07:05,440 --> 00:07:07,240
就算這段話之後被單獨切開

72
00:07:07,480 --> 00:07:08,760
它依然自帶完整的脈絡

73
00:07:09,020 --> 00:07:10,040
AI隨時抽出來看

74
00:07:10,300 --> 00:07:11,840
都完全讀得懂它在講什麼

75
00:07:12,600 --> 00:07:13,640
資料清洗完之後呢

76
00:07:13,880 --> 00:07:15,160
因為RAG的核心目標是

77
00:07:15,420 --> 00:07:17,220
精準投為AI所需要的資訊

78
00:07:17,480 --> 00:07:18,500
當你問一個問題時

79
00:07:18,760 --> 00:07:21,320
系統只要挑出最關鍵的那兩三段給AI就夠了

80
00:07:21,320 --> 00:07:23,360
而不是又把幾十萬字整包塞進去

81
00:07:23,620 --> 00:07:25,920
不然那樣又會回到前面又慢又貴的噩夢

82
00:07:26,440 --> 00:07:26,700
所以

83
00:07:26,960 --> 00:07:28,740
我們必須把這份龐大的檔案

84
00:07:29,000 --> 00:07:30,280
拆解成一個一個獨立

85
00:07:30,540 --> 00:07:31,820
好搜尋的知識卡片

86
00:07:32,320 --> 00:07:34,640
這個步驟在技術上就叫做chunking

87
00:07:34,880 --> 00:07:35,660
中文叫切塊

88
00:07:35,920 --> 00:07:37,440
切出來的每一塊就叫一個chunk

89
00:07:37,960 --> 00:07:39,760
常見的chunking策略通常有兩種

90
00:07:40,780 --> 00:07:42,320
第一種是固定字數切塊

91
00:07:42,820 --> 00:07:44,620
顧名思義就像拿彼此量長度一樣

92
00:07:44,880 --> 00:07:45,900
不管話說完了沒

93
00:07:46,160 --> 00:07:47,680
沒滿500字就無情切一刀

94
00:07:48,720 --> 00:07:50,760
這個方法最大的優勢就是簡單通用

95
00:07:50,760 --> 00:07:51,520
不需要動腦

96
00:07:52,300 --> 00:07:53,580
不管你會給他什麼格式的文件

97
00:07:53,840 --> 00:07:55,360
完全不需要花時間分析結構

98
00:07:55,620 --> 00:07:56,900
幾行程式碼就能快速切完

99
00:07:57,420 --> 00:07:58,700
而且每個chunk的大小都一樣

100
00:07:58,960 --> 00:08:00,240
非常好控制token的成本

101
00:08:01,000 --> 00:08:01,760
但他的問題

102
00:08:02,020 --> 00:08:03,560
就是完全無視與意邊界

103
00:08:04,080 --> 00:08:04,840
一刀切下去

104
00:08:05,100 --> 00:08:06,120
很容易剛好把一句話

105
00:08:06,380 --> 00:08:08,680
或是把問題和回答硬生生砍成兩半

106
00:08:09,200 --> 00:08:10,720
單獨拿出來看根本不知所云

107
00:08:11,760 --> 00:08:13,540
拿巴菲特的股東會逐字稿來說

108
00:08:13,800 --> 00:08:14,560
假設有股東問

109
00:08:14,820 --> 00:08:16,360
你當年為什麼買可口可樂

110
00:08:16,620 --> 00:08:17,900
巴菲特回答了400多字

111
00:08:18,160 --> 00:08:19,680
講到一半剛好滿500字

112
00:08:19,680 --> 00:08:20,960
刀就落下來了

113
00:08:21,480 --> 00:08:23,000
結果前一張卡片的結尾是

114
00:08:23,260 --> 00:08:24,800
我們當時看到最大的優勢是

115
00:08:25,320 --> 00:08:26,340
後一張卡片的開頭是

116
00:08:26,600 --> 00:08:27,620
它可以年年漲價

117
00:08:27,880 --> 00:08:28,900
消費者還是照買

118
00:08:29,400 --> 00:08:30,680
後面這張卡單獨拿出來

119
00:08:30,940 --> 00:08:31,960
根本不知道它是誰

120
00:08:32,220 --> 00:08:33,760
你之後搜可口可樂護城河

121
00:08:34,020 --> 00:08:35,560
這張最關鍵的卡片就撈不到了

122
00:08:36,580 --> 00:08:36,840
所以

123
00:08:37,080 --> 00:08:38,120
為了彌補硬切的缺點

124
00:08:38,360 --> 00:08:40,420
大家通常會設定一點重疊區間

125
00:08:40,680 --> 00:08:41,440
也就是overlap

126
00:08:42,200 --> 00:08:42,980
設定重疊的目的

127
00:08:43,240 --> 00:08:44,260
就是為了防止關鍵句子

128
00:08:44,520 --> 00:08:45,280
剛好落在刀口上

129
00:08:45,540 --> 00:08:46,820
讓後一張卡片的開頭

130
00:08:46,820 --> 00:08:48,860
多包含前一張卡的最後幾十個字

131
00:08:49,120 --> 00:08:49,640
買個保險

132
00:08:49,900 --> 00:08:51,680
避免重要的上下文直接斷掉

133
00:08:52,200 --> 00:08:53,480
但這依然治標不治本

134
00:08:53,740 --> 00:08:54,760
這個方法的最大硬傷

135
00:08:55,020 --> 00:08:56,300
依然是羽翼容易被腰斬

136
00:08:57,060 --> 00:08:58,860
第二種策略是按自然結構切塊

137
00:08:59,100 --> 00:09:00,140
這也是比較適合我們手上

138
00:09:00,380 --> 00:09:01,660
巴菲特資料的chunking策略

139
00:09:02,700 --> 00:09:03,200
具體怎麼做

140
00:09:03,460 --> 00:09:04,740
它的資料剛好就分兩種

141
00:09:05,260 --> 00:09:05,760
第一種是

142
00:09:06,020 --> 00:09:06,520
股東信

143
00:09:07,040 --> 00:09:09,080
巴菲特每年都寫得很清楚的小標題

144
00:09:09,340 --> 00:09:11,400
實務上就直接照markdown小標題切

145
00:09:11,640 --> 00:09:12,680
一個標題一張卡片

146
00:09:12,920 --> 00:09:14,460
每一張都是一個完整的投資觀點

147
00:09:15,240 --> 00:09:15,740
第二種是

148
00:09:16,000 --> 00:09:16,760
股東會逐字稿

149
00:09:17,280 --> 00:09:18,820
這本質上是一場問答馬拉松

150
00:09:19,080 --> 00:09:20,860
所以我們可以用每一輪問答為單位

151
00:09:21,120 --> 00:09:22,140
我們可以把股東提問

152
00:09:22,400 --> 00:09:22,920
巴菲特回答

153
00:09:23,160 --> 00:09:24,200
加上蒙格的補充

154
00:09:24,440 --> 00:09:25,480
整組打包成一個chunk

155
00:09:26,500 --> 00:09:27,000
這樣切

156
00:09:27,260 --> 00:09:28,800
問題跟答案永遠綁在一起

157
00:09:29,060 --> 00:09:30,080
上下文也就完整

158
00:09:30,840 --> 00:09:33,160
今天我先講最常見的兩種chunking策略

159
00:09:33,160 --> 00:09:35,720
如果你想深入瞭解更進階的切塊架構

160
00:09:35,980 --> 00:09:37,260
我在GaryAI實在營中

161
00:09:37,520 --> 00:09:38,800
會有一支影片專門講解

162
00:09:39,300 --> 00:09:42,380
有興趣的朋友可以在影片下方資訊欄找到加入連結

163
00:09:43,140 --> 00:09:44,420
那每一個chunk都切好之後

164
00:09:44,680 --> 00:09:46,220
我們就可以直接拿去搜尋了嗎

165
00:09:46,720 --> 00:09:47,240
還不行

166
00:09:47,760 --> 00:09:49,800
如果你直接光靠卡片裡的文字本身

167
00:09:50,060 --> 00:09:51,340
做搜尋依然會翻車

168
00:09:52,360 --> 00:09:53,640
因為AI在做搜尋的時候

169
00:09:53,900 --> 00:09:56,460
通常是比對問題和卡片的意思接不接近

170
00:09:57,220 --> 00:09:58,500
如果你聽不太懂的話沒關係

171
00:09:58,760 --> 00:09:59,780
等一下我們會再細講


1
00:10:00,000 --> 00:10:01,880
但讓AI純粹比對意思

2
00:10:01,880 --> 00:10:03,140
會有一個嚴重的盲點

3
00:10:03,140 --> 00:10:04,640
舉個例子

4
00:10:04,640 --> 00:10:06,980
如果使用者問巴菲特在2020年之後

5
00:10:06,980 --> 00:10:07,940
是怎麼談通膨的

6
00:10:07,940 --> 00:10:10,180
如果你這時候純靠內文的語義搜尋

7
00:10:10,180 --> 00:10:11,060
就很容易出問題

8
00:10:11,060 --> 00:10:13,740
因爲模型比較看得懂通膨這個概念

9
00:10:13,740 --> 00:10:16,740
他對2020年之後這種時間邊界非常不敏感

10
00:10:16,740 --> 00:10:19,960
很可能把1980年代講的非常精彩的通膨段落

11
00:10:19,960 --> 00:10:21,060
直接撈出來交差

12
00:10:21,060 --> 00:10:24,240
這就是爲什麼每張卡片都必須附上metadata

13
00:10:24,240 --> 00:10:25,500
中文叫原資料

14
00:10:25,500 --> 00:10:27,940
metadata其實就是這個段落的標籤

15
00:10:27,940 --> 00:10:29,460
以這個例子來說

16
00:10:29,460 --> 00:10:32,040
我會在metadata裏面放上發生的年份

17
00:10:32,040 --> 00:10:33,040
出自哪一封信

18
00:10:33,040 --> 00:10:34,540
或是影片的時間戳記

19
00:10:34,540 --> 00:10:36,320
有了這些標籤

20
00:10:36,320 --> 00:10:38,260
當用戶問帶有條件的問題時

21
00:10:38,260 --> 00:10:41,040
系統就能先利用metadata做精準的條件過濾

22
00:10:41,040 --> 00:10:43,240
先把時間範圍鎖定再去找內容

23
00:10:43,240 --> 00:10:44,720
這樣一方面比較準確

24
00:10:44,720 --> 00:10:46,100
另一方面又比較快

25
00:10:46,100 --> 00:10:48,460
如果你在做的是公司知識庫

26
00:10:48,460 --> 00:10:49,460
這點更是關鍵

27
00:10:49,460 --> 00:10:52,380
有些敏感資訊不能讓所有人隨意存取

28
00:10:52,380 --> 00:10:54,780
這時候你就能利用metadata在程式端

29
00:10:54,780 --> 00:10:56,640
先做一層確定性的權限過濾

30
00:10:56,640 --> 00:10:58,700
確保不會有人看到它不該看的資料

31
00:10:58,700 --> 00:11:01,700
現在你手上終於有幾萬張切好

32
00:11:01,700 --> 00:11:03,460
且貼好標籤的知識卡片了

33
00:11:03,460 --> 00:11:04,920
R的前半段整理書架

34
00:11:04,920 --> 00:11:06,180
到這裏也告一個段落

35
00:11:06,180 --> 00:11:08,600
接下來是R的後半段

36
00:11:08,600 --> 00:11:09,240
找書

37
00:11:09,240 --> 00:11:10,860
也就是說用戶提問的時候

38
00:11:10,860 --> 00:11:12,340
我們要怎麼讓AI去撈出

39
00:11:12,340 --> 00:11:13,640
最相關的資訊來回答

40
00:11:13,640 --> 00:11:15,060
在RAG裏

41
00:11:15,060 --> 00:11:16,820
AI具體到底是用什麼方式

42
00:11:16,820 --> 00:11:18,360
去搜尋這幾萬張卡片的

43
00:11:18,360 --> 00:11:19,840
其實主要就兩種做法

44
00:11:19,840 --> 00:11:21,300
第一種做法

45
00:11:21,300 --> 00:11:23,120
是大家最熟悉的關鍵字搜尋

46
00:11:23,120 --> 00:11:24,560
英文是keyword search

47
00:11:24,560 --> 00:11:26,700
這就像你在文件裏按Ctrl F

48
00:11:26,700 --> 00:11:27,960
直接比對你輸入的字

49
00:11:27,960 --> 00:11:29,080
有沒有出現在卡片裏

50
00:11:29,080 --> 00:11:31,020
這種方法在抓特定人名

51
00:11:31,020 --> 00:11:31,740
公司代號

52
00:11:31,740 --> 00:11:33,340
或是專有名詞時非常準

53
00:11:33,340 --> 00:11:34,900
但它的致命傷

54
00:11:34,900 --> 00:11:36,300
就是完全不懂同一詞

55
00:11:36,300 --> 00:11:37,920
比方說巴菲特講話

56
00:11:37,920 --> 00:11:39,640
不可能每次都照你的劇本走

57
00:11:39,640 --> 00:11:41,860
以護城河這個常見的名詞來說

58
00:11:41,860 --> 00:11:43,700
它可能會用不同的方式表達

59
00:11:43,700 --> 00:11:45,500
像是長期的競爭優勢

60
00:11:45,500 --> 00:11:47,140
或者別人很難搶走的生意

61
00:11:47,140 --> 00:11:49,100
這時候如果你輸入護城河

62
00:11:49,100 --> 00:11:49,880
然後去搜尋

63
00:11:49,880 --> 00:11:51,420
這些含金量極高的段落

64
00:11:51,420 --> 00:11:52,480
就會被全部漏掉

65
00:11:52,480 --> 00:11:54,340
所以就有了第二種做法

66
00:11:54,340 --> 00:11:55,360
叫做語意搜尋

67
00:11:55,360 --> 00:11:56,780
英文是semantic search

68
00:11:56,780 --> 00:11:58,820
它不看字面有沒有完全吻合

69
00:11:58,820 --> 00:12:00,660
而是去看背後的意思一不一樣

70
00:12:00,660 --> 00:12:02,420
對於技術小白來說

71
00:12:02,420 --> 00:12:03,240
你可能會好奇

72
00:12:03,240 --> 00:12:04,660
語意搜尋到底是怎麼知道

73
00:12:04,660 --> 00:12:05,900
兩句話意思相近的

74
00:12:05,900 --> 00:12:07,700
最簡單的理解方式就是

75
00:12:07,700 --> 00:12:08,740
這背後靠的是一種

76
00:12:08,740 --> 00:12:09,880
叫做embedding的模型

77
00:12:09,880 --> 00:12:12,160
它會把每一張卡片的文字

78
00:12:12,160 --> 00:12:13,620
換算成一串數字

79
00:12:13,620 --> 00:12:15,160
而這串數字就叫向量

80
00:12:15,160 --> 00:12:15,660
vector

81
00:12:15,660 --> 00:12:17,940
你可以把向量想象成

82
00:12:17,940 --> 00:12:19,120
語意地圖上的座標

83
00:12:19,120 --> 00:12:21,020
比如說護城河三個字

84
00:12:21,020 --> 00:12:22,700
會被換算成一組數字座標

85
00:12:22,700 --> 00:12:24,320
這組座標在數學上

86
00:12:24,320 --> 00:12:25,820
會跟長期的競爭優勢

87
00:12:25,820 --> 00:12:26,760
這個語意上

88
00:12:26,760 --> 00:12:28,500
跟護城河比較相似的區塊

89
00:12:28,500 --> 00:12:29,280
靠得非常近

90
00:12:29,280 --> 00:12:30,660
而跟晚餐是什麼

91
00:12:30,660 --> 00:12:31,740
這種和護城河

92
00:12:31,740 --> 00:12:32,800
沒什麼關聯的名詞

93
00:12:32,800 --> 00:12:33,560
距離遙遠

94
00:12:33,560 --> 00:12:35,080
有了向量之後

95
00:12:35,080 --> 00:12:36,340
系統就可以把你的問題

96
00:12:36,340 --> 00:12:37,420
也換算成一個座標

97
00:12:37,420 --> 00:12:38,960
接着去計算問題座標

98
00:12:38,960 --> 00:12:40,300
跟資料庫裏每張卡片

99
00:12:40,300 --> 00:12:41,880
在數學上的距離

100
00:12:41,880 --> 00:12:43,320
距離最近的那幾張卡片

101
00:12:43,320 --> 00:12:44,840
就是意思最接近的內容

102
00:12:44,840 --> 00:12:46,500
抓出來餵給AI之後

103
00:12:46,500 --> 00:12:47,740
他就能精準回答

104
00:12:47,740 --> 00:12:49,620
聽起來很完美對吧

105
00:12:49,620 --> 00:12:50,920
但純用語意搜尋

106
00:12:50,920 --> 00:12:52,200
其實藏着一個巨大的坑

107
00:12:52,200 --> 00:12:53,780
他記住的是宏觀大意

108
00:12:53,780 --> 00:12:55,660
很容易把專有名詞忽略掉

109
00:12:55,660 --> 00:12:57,240
比如你問

110
00:12:57,240 --> 00:12:59,040
巴菲特爲什麼買喜事糖果

111
00:12:59,040 --> 00:13:00,620
系統用語意去找

112
00:13:00,620 --> 00:13:01,520
找回來的卡片

113
00:13:01,520 --> 00:13:02,800
可能全都在講可口可樂

114
00:13:02,800 --> 00:13:03,900
或者講好品牌

115
00:13:03,900 --> 00:13:04,800
有漲價的權利

116
00:13:04,800 --> 00:13:05,920
這些概念很像

117
00:13:05,920 --> 00:13:07,660
但都沒有提到喜事糖果本身

118
00:13:07,660 --> 00:13:09,620
那這時候AI回答出來

119
00:13:09,620 --> 00:13:10,820
就會直接答非所問

120
00:13:10,820 --> 00:13:11,960
甚至開始瞎掰

121
00:13:11,960 --> 00:13:13,400
硬把可口可樂的邏輯

122
00:13:13,400 --> 00:13:14,400
套到喜事頭上

123
00:13:14,400 --> 00:13:16,080
這是因爲專有名詞

124
00:13:16,080 --> 00:13:17,140
放進一整段話裏

125
00:13:17,140 --> 00:13:18,900
很容易被整體的大意稀釋掉

126
00:13:18,900 --> 00:13:20,960
所以這兩種檢索方法

127
00:13:20,960 --> 00:13:22,440
一個擅長抓精確字面

128
00:13:22,440 --> 00:13:23,880
一個擅長抓抽象意思

129
00:13:23,880 --> 00:13:24,900
在實物上

130
00:13:24,900 --> 00:13:27,060
成熟的RAG通常是兩者並行使用

131
00:13:27,060 --> 00:13:28,360
這就叫做混合搜尋

132
00:13:28,360 --> 00:13:29,580
也就是Hybrid Search

133
00:13:29,580 --> 00:13:31,200
那這些切好的卡片

134
00:13:31,200 --> 00:13:32,300
以及我們上面說

135
00:13:32,300 --> 00:13:34,140
通過Embedding模型生成出來的

136
00:13:34,140 --> 00:13:34,820
向量座標

137
00:13:34,820 --> 00:13:36,120
還有剛纔講的Metadata

138
00:13:36,120 --> 00:13:37,460
這時候會存進一個

139
00:13:37,460 --> 00:13:38,860
支援向量搜尋的資料庫

140
00:13:38,860 --> 00:13:40,500
向量資料庫支援開發者

141
00:13:40,500 --> 00:13:42,180
把這些文字向量和標籤

142
00:13:42,180 --> 00:13:43,640
分門別類存進去

143
00:13:44,400 --> 00:13:46,160
這個過程就叫做Indexing

144
00:13:46,160 --> 00:13:47,600
中文叫做建立索引

145
00:13:47,600 --> 00:13:49,960
當使用者一個問題問進來

146
00:13:49,960 --> 00:13:51,560
AI就可以透過Hybrid Search

147
00:13:51,560 --> 00:13:53,720
去這個支援向量搜尋的資料庫裏

148
00:13:53,720 --> 00:13:55,060
找相對應的資料卡片

149
00:13:55,060 --> 00:13:57,340
我們直接用巴菲特來模擬一次

150
00:13:57,340 --> 00:13:58,940
假設你問巴菲特

151
00:13:58,940 --> 00:14:00,120
爲什麼買下喜事糖果

152
00:14:00,120 --> 00:14:01,280
它的護城盒在哪裏

153
00:14:01,280 --> 00:14:03,320
系統這時候會兵分兩路

154
00:14:03,320 --> 00:14:04,880
一路是關鍵字搜尋

155
00:14:04,880 --> 00:14:06,360
它死咬着喜事糖果

156
00:14:06,360 --> 00:14:07,140
這個專有名詞

157
00:14:07,140 --> 00:14:09,140
把所有真的出現喜事的卡片

158
00:14:09,140 --> 00:14:10,100
精準撈出來

159
00:14:10,100 --> 00:14:11,200
但這些卡片裏

160
00:14:11,200 --> 00:14:12,740
可能沒有深談護城盒的理論

161
00:14:12,740 --> 00:14:14,200
另一路是語意搜尋

162
00:14:14,200 --> 00:14:16,600
它去抓收購邏輯和護城盒的意思

163
00:14:16,600 --> 00:14:18,160
撈出一堆談定價權

164
00:14:18,160 --> 00:14:19,260
品牌優勢的卡片

165
00:14:19,260 --> 00:14:22,340
接着系統把兩邊找到的名單合併

166
00:14:22,340 --> 00:14:24,820
挑出比方說前20張候選的Chunk

167
00:14:24,820 --> 00:14:25,980
走到這一步時

168
00:14:25,980 --> 00:14:27,520
RAG的R就告一段落了

169
00:14:27,520 --> 00:14:29,100
因爲我們已經把回答這個問題

170
00:14:29,100 --> 00:14:30,480
所需要的資料都抓回來了

171
00:14:30,480 --> 00:14:33,580
而下一步就是進到RAG的A Augmented

172
00:14:33,580 --> 00:14:35,160
這一步的工作只有一個

173
00:14:35,160 --> 00:14:37,520
決定到底要把什麼東西放在AI眼前

174
00:14:37,520 --> 00:14:40,040
你這時候可以直接把這20個Chunk

175
00:14:40,040 --> 00:14:41,540
全部一股腦丟給AI嗎

176
00:14:41,540 --> 00:14:42,320
最好不要

177
00:14:42,320 --> 00:14:44,520
因爲第一階段粗撈出來的名單

178
00:14:44,520 --> 00:14:46,580
裏面摻雜了許多半相關的雜訊

179
00:14:46,580 --> 00:14:47,900
如果硬塞給模型

180
00:14:47,900 --> 00:14:49,460
不僅資訊密度被稀釋

181
00:14:49,460 --> 00:14:51,240
模型還很容易被雜訊帶偏

182
00:14:51,240 --> 00:14:52,120
產生幻覺

183
00:14:52,120 --> 00:14:54,160
如果我們要讓回答更完美

184
00:14:54,160 --> 00:14:56,400
就必須把資料的密度再提煉出來

185
00:14:56,400 --> 00:14:58,540
所以A Augmented的第一道工序

186
00:14:58,540 --> 00:14:59,980
是用一個讀得更


1
00:15:00,000 --> 00:15:00,660
仔細的模型

2
00:15:00,660 --> 00:15:03,360
把這20張卡片跟問題一張一張對着讀

3
00:15:03,360 --> 00:15:04,500
重新排一次名

4
00:15:04,500 --> 00:15:06,500
把真正有用的卡片頂到前面

5
00:15:06,500 --> 00:15:08,260
這也就是大家常聽到的Reranking

6
00:15:08,260 --> 00:15:09,140
重新排序

7
00:15:09,140 --> 00:15:10,720
嚴格講的話

8
00:15:10,720 --> 00:15:12,960
Reranking在教科書裏算R的最後一步

9
00:15:12,960 --> 00:15:14,340
但我把它放在A的部分

10
00:15:14,340 --> 00:15:15,840
是因爲我覺得這樣比較好理解

11
00:15:15,840 --> 00:15:17,700
畢竟Reranking的工作不是去找

12
00:15:17,700 --> 00:15:20,680
而是決定哪幾張卡片有資格進到AI眼前

13
00:15:20,680 --> 00:15:23,100
這對我來說比較像是A在做的事

14
00:15:23,100 --> 00:15:25,460
而它到底屬於哪一個字母的階段

15
00:15:25,460 --> 00:15:26,420
其實也沒那麼重要

16
00:15:26,420 --> 00:15:28,840
重要的是能夠理解Rack是如何運作的

17
00:15:28,840 --> 00:15:30,380
排好名之後

18
00:15:30,380 --> 00:15:33,400
augmented這個階段最重要的就是把小超拼起來

19
00:15:33,400 --> 00:15:35,660
你可能會取前三到五張卡片

20
00:15:35,660 --> 00:15:37,180
連同卡片的metadata

21
00:15:37,180 --> 00:15:38,880
像是年份出處

22
00:15:38,880 --> 00:15:40,920
再加上你的問題還有一段指示

23
00:15:40,920 --> 00:15:43,880
像是隻能根據下面這幾段資料回答

24
00:15:43,880 --> 00:15:45,220
資料裏沒有的就說不知道

25
00:15:45,220 --> 00:15:48,060
全部組成一份最終的提示詞交給AI

26
00:15:48,060 --> 00:15:49,460
走到這裏

27
00:15:49,460 --> 00:15:50,800
我們快速回顧一下

28
00:15:50,800 --> 00:15:52,160
在retrieval這一段

29
00:15:52,160 --> 00:15:54,920
我們把巴菲特60年份的雜亂資料清洗乾淨

30
00:15:54,920 --> 00:15:55,820
切成卡片

31
00:15:55,820 --> 00:15:56,580
貼上標籤

32
00:15:56,580 --> 00:15:58,220
存進向量資料庫件索印

33
00:15:58,220 --> 00:16:00,800
再用hybrid search把20張候選撈回來

34
00:16:00,800 --> 00:16:02,100
而在augmented的階段

35
00:16:02,100 --> 00:16:04,180
我們用re-ranking挑出最準的幾張

36
00:16:04,180 --> 00:16:05,940
拼成一份乾淨的小超

37
00:16:05,940 --> 00:16:08,420
接着就要進入rack的最後一段

38
00:16:08,420 --> 00:16:09,840
g generation

39
00:16:09,840 --> 00:16:10,920
也就是生成

40
00:16:10,920 --> 00:16:12,440
讓AI看着這份小超

41
00:16:12,440 --> 00:16:13,220
寫出答案

42
00:16:13,220 --> 00:16:15,960
g在系統上其實是最單純的一步

43
00:16:15,960 --> 00:16:17,820
a把小超拼好之後

44
00:16:17,820 --> 00:16:20,300
g就是把這份提示詞送給大語言模型

45
00:16:20,300 --> 00:16:21,160
拿回答案

46
00:16:21,160 --> 00:16:23,100
程式上就是一次API呼叫

47
00:16:23,100 --> 00:16:25,580
你真正要決定的事情其實不多

48
00:16:25,580 --> 00:16:27,160
首先是用哪個模型

49
00:16:27,160 --> 00:16:29,300
知識庫問答不需要最貴的那一個

50
00:16:29,300 --> 00:16:31,380
中低階模型配上一份好小超

51
00:16:31,380 --> 00:16:32,100
通常就夠

52
00:16:32,100 --> 00:16:33,300
我自己蠻喜歡

53
00:16:33,300 --> 00:16:34,380
gevenite flash系列

54
00:16:34,380 --> 00:16:35,580
又快又便宜

55
00:16:35,580 --> 00:16:37,680
再來是在回答時的策略

56
00:16:37,680 --> 00:16:39,500
比方說要不要讓它附上出處

57
00:16:39,500 --> 00:16:40,500
用什麼語氣等

58
00:16:40,500 --> 00:16:42,040
而這些東西其實大多數

59
00:16:42,040 --> 00:16:43,420
就是用提示詞在控制

60
00:16:43,420 --> 00:16:45,460
我在實物上發現

61
00:16:45,460 --> 00:16:47,420
很多團隊的知識庫會遇到一個狀況

62
00:16:47,420 --> 00:16:48,800
同一個問題問兩次

63
00:16:48,800 --> 00:16:49,660
答案不一樣

64
00:16:49,660 --> 00:16:50,900
甚至還會自己加系

65
00:16:50,900 --> 00:16:51,640
開始腦補

66
00:16:51,640 --> 00:16:54,020
這時候你可以先去檢查

67
00:16:54,020 --> 00:16:55,020
你的模型temperature

68
00:16:55,020 --> 00:16:56,120
是不是設太高了

69
00:16:56,120 --> 00:16:57,800
temperature簡單來說

70
00:16:57,800 --> 00:16:59,320
就是控制AI隨機性

71
00:16:59,320 --> 00:17:00,420
跟創造力的旋鈕

72
00:17:00,420 --> 00:17:01,740
溫度設得越高

73
00:17:01,740 --> 00:17:03,240
AI就越想放飛自我

74
00:17:03,240 --> 00:17:04,640
用詞也會越多樣化

75
00:17:04,640 --> 00:17:05,560
而溫度越低

76
00:17:05,560 --> 00:17:06,460
它就越保守

77
00:17:06,460 --> 00:17:08,160
每次都只挑幾率最高

78
00:17:08,160 --> 00:17:08,980
最確定的字

79
00:17:08,980 --> 00:17:11,180
一般AI工具的預設溫度

80
00:17:11,180 --> 00:17:12,340
通常是0.7左右

81
00:17:12,340 --> 00:17:13,480
那是拿來寫文案

82
00:17:13,480 --> 00:17:14,600
激發靈感用的

83
00:17:14,600 --> 00:17:16,000
但在嚴肅的知識庫裏

84
00:17:16,000 --> 00:17:17,680
創造力往往就等於幻覺

85
00:17:17,680 --> 00:17:18,840
要解決這個問題

86
00:17:18,840 --> 00:17:20,720
就直接把temperature往下調就好

87
00:17:20,720 --> 00:17:22,020
走到這裏

88
00:17:22,020 --> 00:17:22,640
恭喜你

89
00:17:22,640 --> 00:17:24,020
你手上就已經擁有一個

90
00:17:24,020 --> 00:17:25,100
完整的RAG系統了

91
00:17:25,100 --> 00:17:26,980
現在你只要問一個問題

92
00:17:26,980 --> 00:17:28,080
R會在後臺

93
00:17:28,080 --> 00:17:29,800
把最相關的資料卡片撈出來

94
00:17:29,800 --> 00:17:31,220
A 把它們排好名

95
00:17:31,220 --> 00:17:32,240
拼成一份小抄

96
00:17:32,240 --> 00:17:35,160
G 再用你剛剛做條temperature的AI大腦

97
00:17:35,160 --> 00:17:36,840
生成出最後的嚴謹回答

98
00:17:36,840 --> 00:17:39,020
不過AI再怎麼說

99
00:17:39,020 --> 00:17:40,300
還是non-deterministic的

100
00:17:40,300 --> 00:17:40,960
也就是說

101
00:17:40,960 --> 00:17:42,320
每次都有一定的隨機性

102
00:17:42,320 --> 00:17:43,580
所以實際使用時

103
00:17:43,580 --> 00:17:44,420
一定還是有機會

104
00:17:44,420 --> 00:17:45,660
遇到分身答錯的時候

105
00:17:45,660 --> 00:17:47,540
這時候不要立刻就判斷

106
00:17:47,540 --> 00:17:48,520
是AI不夠聰明

107
00:17:48,520 --> 00:17:50,180
馬上換一個更貴的大模型

108
00:17:50,180 --> 00:17:51,640
因爲只要你搞懂了

109
00:17:51,640 --> 00:17:52,660
前面這一整套邏輯

110
00:17:52,660 --> 00:17:54,100
你就可以順着這個邏輯

111
00:17:54,100 --> 00:17:55,580
非常科學地去做排查

112
00:17:55,580 --> 00:17:57,140
譬如說你問他

113
00:17:57,140 --> 00:17:58,880
巴菲特哪一年買下喜事糖果

114
00:17:58,880 --> 00:18:00,620
正確答案是1972年

115
00:18:00,620 --> 00:18:02,520
分身卻回答1980年代

116
00:18:02,520 --> 00:18:04,380
順着RAG

117
00:18:04,380 --> 00:18:05,740
由前到後這樣查

118
00:18:05,740 --> 00:18:07,940
第一步看R的前半

119
00:18:07,940 --> 00:18:08,640
資料端

120
00:18:08,640 --> 00:18:10,720
講1972年收購的那段原文

121
00:18:10,720 --> 00:18:11,920
當初切chunk時

122
00:18:11,920 --> 00:18:13,080
有沒有被腰斬切壞

123
00:18:13,080 --> 00:18:14,720
或是字幕辨識錯字了

124
00:18:14,720 --> 00:18:16,600
如果小超一開始就印壞了

125
00:18:16,600 --> 00:18:17,760
AI當然不可能答對

126
00:18:17,760 --> 00:18:19,560
這時候的解決策略

127
00:18:19,560 --> 00:18:21,300
是回頭修復資料源

128
00:18:21,300 --> 00:18:22,800
或是調整切塊規則

129
00:18:22,800 --> 00:18:24,000
確保這段事實

130
00:18:24,000 --> 00:18:25,640
完整保留在一張卡片裏

131
00:18:25,640 --> 00:18:27,780
第二步看R的後半

132
00:18:27,780 --> 00:18:28,460
檢索端

133
00:18:28,460 --> 00:18:29,760
資料庫裏有這張卡片

134
00:18:29,760 --> 00:18:31,640
但第一輪出到候選名單時

135
00:18:31,640 --> 00:18:32,900
是不是把它給漏掉了

136
00:18:32,900 --> 00:18:33,980
這代表原始資料

137
00:18:33,980 --> 00:18:34,900
根本沒被找出來

138
00:18:34,900 --> 00:18:36,540
這時候的解決策略

139
00:18:36,540 --> 00:18:38,280
可能就是把Hybrid Search裏的

140
00:18:38,280 --> 00:18:39,400
關鍵字權重拉高

141
00:18:39,400 --> 00:18:40,620
或是把海選數量

142
00:18:40,620 --> 00:18:42,100
從20張放寬到50張

143
00:18:42,100 --> 00:18:43,940
把初撈的網子撒得更大一點

144
00:18:43,940 --> 00:18:45,700
第三步看A

145
00:18:45,700 --> 00:18:46,480
小超端

146
00:18:46,480 --> 00:18:47,420
卡片撈出來了

147
00:18:47,420 --> 00:18:48,380
但Reranking時

148
00:18:48,380 --> 00:18:49,720
是不是被排在第十幾名

149
00:18:49,720 --> 00:18:51,800
根本沒幾進送給AI的前三名

150
00:18:51,800 --> 00:18:53,120
這代表小超找到了

151
00:18:53,120 --> 00:18:54,240
但沒遞到他手裏

152
00:18:54,240 --> 00:18:55,540
這時候的解決策略

153
00:18:55,540 --> 00:18:57,520
可能是換一個更好的Reranking模型

154
00:18:57,520 --> 00:18:59,100
或是把送給AI的名額

155
00:18:59,100 --> 00:19:00,060
放寬到前五張

156
00:19:00,060 --> 00:19:01,980
讓正確小超能順利遞交

157
00:19:01,980 --> 00:19:03,480
第四步

158
00:19:03,480 --> 00:19:04,200
纔看G

159
00:19:04,200 --> 00:19:04,920
模型端

160
00:19:04,920 --> 00:19:06,660
如果寫着1972年的卡片

161
00:19:06,660 --> 00:19:08,300
明明端端正正放在他眼前

162
00:19:08,300 --> 00:19:09,380
他卻還是講錯

163
00:19:09,380 --> 00:19:10,980
這代表小超就在眼前

164
00:19:10,980 --> 00:19:12,020
他卻看花了眼

165
00:19:12,020 --> 00:19:13,560
這時候的解決策略

166
00:19:13,560 --> 00:19:15,200
才輪到去檢查System Prompt

167
00:19:15,200 --> 00:19:17,360
比如要求他先引用卡片中的年份

168
00:19:17,360 --> 00:19:17,880
再回答

169
00:19:17,880 --> 00:19:19,300
如果他依然理解錯誤

170
00:19:19,300 --> 00:19:21,240
這時才考慮升級更強的大模型

171
00:19:21,240 --> 00:19:23,160
實物上八成以上的翻車

172
00:19:23,160 --> 00:19:24,340
全都在前三步

173
00:19:24,340 --> 00:19:25,420
也就是R跟A

174
00:19:25,420 --> 00:19:26,540
根本輪不到模型

175
00:19:26,540 --> 00:19:28,240
背後的原因也很簡單

176
00:19:28,240 --> 00:19:29,740
有在用AI的人都知道

177
00:19:29,740 --> 00:19:32,020
當你把實則資訊放到AI眼前

178
00:19:32,020 --> 00:19:33,780
然後請他根據這實則資訊

179
00:19:33,780 --> 00:19:34,660
去回答你的問題

180
00:19:34,660 --> 00:19:36,000
他回答正確的幾率

181
00:19:36,000 --> 00:19:37,560
講道理是非常非常高的

182
00:19:37,560 --> 00:19:39,420
RAG也可以這樣去理解

183
00:19:39,420 --> 00:19:40,900
如果你有把正確的

184
00:19:40,900 --> 00:19:42,040
且真正關鍵的資訊

185
00:19:42,040 --> 00:19:42,980
擺到AI眼前

186
00:19:42,980 --> 00:19:44,280
其實那樣的資訊量

187
00:19:44,280 --> 00:19:46,060
並不足以讓他開始出現幻覺

188
00:19:46,060 --> 00:19:47,800
所以當回答不如預期時

189
00:19:47,800 --> 00:19:49,500
記得要按照RAG的資料

190
00:19:49,500 --> 00:19:50,680
流動管線去做排查

191
00:19:50,680 --> 00:19:51,740
纔不會亂槍打鳥

192
00:19:52,280 --> 00:19:54,340
就算你只是平常隨便玩完

193
00:19:54,340 --> 00:19:55,460
Codecode或Codex

194
00:19:55,460 --> 00:19:57,000
也沒有要幫自己或企業

195
00:19:57,000 --> 00:19:57,900
架一套RAG系統

196
00:19:59,740 --> 00:19:59,980
到AI


1
00:20:00,000 --> 00:20:03,580
畢竟RAG本質上其實就是在做一件事

2
00:20:03,580 --> 00:20:05,060
如何在有限的視窗裏

3
00:20:05,060 --> 00:20:08,020
把最高密度最正確的資料端到AI眼前

4
00:20:08,020 --> 00:20:10,000
確保它的回答是有機可循的

5
00:20:10,000 --> 00:20:12,000
搞懂RAG的原理之後

6
00:20:12,000 --> 00:20:13,980
當Cloud Code改成試碼改到迷路

7
00:20:13,980 --> 00:20:15,080
開始詭達強時

8
00:20:15,080 --> 00:20:16,940
你會知道該立刻清理上下文

9
00:20:16,940 --> 00:20:18,540
只精準指定核心檔案

10
00:20:18,540 --> 00:20:20,480
不讓多餘雜訊稀釋它的注意力

11
00:20:20,480 --> 00:20:22,300
當你在丟了幾十頁的報告

12
00:20:22,300 --> 00:20:23,760
卻被AI答非所問時

13
00:20:23,760 --> 00:20:25,860
你一眼就知道是格式被切碎了

14
00:20:25,860 --> 00:20:27,840
懂得改位帶有清楚小標題的markdown

15
00:20:27,840 --> 00:20:28,800
讓它精準抓取

16
00:20:28,800 --> 00:20:31,300
你不再是隻能期待AI別胡說八道

17
00:20:31,300 --> 00:20:32,440
看運氣的抽卡玩家

18
00:20:32,440 --> 00:20:35,160
而是能主動控制資料品質的context engineer

19
00:20:35,160 --> 00:20:37,580
RAG不只是一項工程技術

20
00:20:37,580 --> 00:20:38,980
背後的邏輯更是一套

21
00:20:38,980 --> 00:20:41,780
如何與AI高校協作的context engineering思維

22
00:20:41,780 --> 00:20:43,700
如果你正在學習AI

23
00:20:43,700 --> 00:20:44,980
想看更多實戰內容

24
00:20:44,980 --> 00:20:46,780
也希望有一羣能一起討論的夥伴

25
00:20:46,780 --> 00:20:48,500
或是直接跟我一對一問答

26
00:20:48,500 --> 00:20:50,520
歡迎加入我們的Gary AI實戰營

27
00:20:50,520 --> 00:20:52,680
連結我會放在影片下方的資訊欄

28
00:20:52,680 --> 00:20:54,780
那以上就是今天的內容

29
00:20:54,780 --> 00:20:56,500
喜歡的話記得幫我按贊

30
00:20:56,500 --> 00:20:57,600
追蹤加分享

31
00:20:57,600 --> 00:20:59,560
這是我持續創作下去的動力

32
00:20:59,560 --> 00:21:00,460
我們下次見