# 提示詞 A：寫出檢索程式並驗證

整段複製，貼到 Claude Code 或 Codex。用法見講義第 7、8 節。

```text
請在這個資料夾建立一個最小的文獻 RAG 檢索程式，供我做研究使用。

【資料】
- books/ 底下每個子資料夾是一本書，全文在 cleaned_*.md。
- 每頁以「### PDF 第 N 頁」開頭；檔案開頭到「## 全書正文」之前是中繼資料，不要索引。
- 多數中文書是簡體字，我會用臺灣繁體中文提問；也有英文書。

【要做的事】
1. 讀檔時保留每個片段的書名與 PDF 頁碼。
2. 前處理：接回 PDF 的硬換行；用 OpenCC 的 s2tw 把簡體轉成臺灣繁體。
3. 切分：遞迴切分，目標 500 字元，分隔符號依序為段落、換行、。！？、英文句點、逗號；不加重疊。
4. 索引：BM25（中文用字元二元組，英文用單字）加上 intfloat/multilingual-e5-small 向量
   （查詢加 "query: "、片段加 "passage: " 前綴），兩者以 RRF 合併。
5. 向量存成檔案，第二次執行不必重算。
6. 指令列用法：python search.py "問題"，印出前 5 名，每筆附書名、PDF 頁碼與前 200 字。
7. 另寫 build_prompt()：把前 5 名組成附 [編號] 來源的提示詞，要求模型只能依摘錄回答，
   摘錄不足時說明缺什麼。

【驗證】
- 先只用 2 本書跑通，再跑全部。
- 寫 tests/test_search.py，至少包含：
  (1) 隨機抽 3 個片段，確認原檔中標示的那一頁確實含有這段文字；
  (2) 以下黃金問題的答案頁出現在前 5 名：
      「溯因分析和歸納法、演繹法有什麼不同？」
        → data-analysis-to-theory-breakthrough，PDF 第 3、4、14–16 頁
      「寫論文時應該怎麼分配時間？」
        → graduate-thesis-writing-time-management，PDF 第 44–45 頁
- 用一題書中沒有的問題（例如「2026 年台積電營收是多少？」）產生提示詞，
  確認提示詞會要求模型說找不到依據。

【限制】
- 不要修改 books/ 裡的任何檔案。
- 先提出計畫讓我確認，再開始寫程式；需要安裝套件或下載模型時先告訴我。
- 完成後回報：建立了哪些檔案、完整的測試輸出、跑全部書花了多久、已知限制。
```
