---
tags: [chapter, ch01, deep-research, RAG]
status: 完成
confidence: high
sources:
  - ../repo-analysis/local-deep-research.md
last_updated: 2026-06-11
---

# Chapter 1：Local Deep Research 與實驗室知識庫

> **一句話**：deep research 是把你做文獻回顧的迴圈——search → read → synthesize → cite——自動化；RAG 是讓 AI「開書考」你的文件庫。學會這兩個概念，工具換了照樣會用。

## 這章要解決的問題

手動文獻回顧的流程是：搜尋 → 略讀 → 覺得有戲的精讀 → 順著它的引用再搜 → 整理筆記、標出處。這個迴圈每轉一圈要半天，而且**不可重現**——三個月後你想不起來「當初為什麼漏掉那篇」。

另一個問題在實驗室內部：知識散落在 PDF、簡報、學長姐的週報和已經畢業的人的腦袋裡。新生問「我們以前算 NiFe 表面用哪個 U 值」，答案存在某個資料夾深處，但沒有人記得是哪個。

第三個問題是你大概已經踩過的坑：直接問聊天機器人，它會**編造看起來很像真的引用**——期刊名是真的、作者像真的、DOI 是假的。沒有檢索基礎的生成，引用不可信。

Local Deep Research（LDR）這類工具同時回應三件事：自動化的研究迴圈、可檢索的私有文件庫、以及**每句話帶出處**的回答方式。

## 給化學系學生的直覺說法

**Deep research = 把你的文獻迴圈寫成程式。** 給它一個問題，它先拆成幾個子問題（像你會先列「要查哪幾個面向」），對每個子問題查多個搜尋引擎（arXiv、PubMed、Semantic Scholar……），讀完結果後**根據讀到的內容生成下一輪問題**（像你順著引用鏈往下挖），最後彙整成一篇帶引用的報告。LDR 裡控制這個迴圈的兩個參數就叫 `iterations`（轉幾圈）和 `questions_per_iteration`（每圈拆幾個子問題）。

**RAG = 開書考。** 大語言模型（LLM）本身並不「記得」你上傳的論文——它的參數在訓練完就凍結了。RAG（Retrieval-Augmented Generation，檢索增強生成）的做法是：考試的時候，先由一個檢索系統把你文件庫裡**最相關的幾段**翻出來、放在 LLM 面前，再讓它作答。所以 AI 答得好不好，一半取決於「翻書翻得準不準」。

**Embedding = 把文字映射到 descriptor 空間。** 檢索怎麼知道哪段相關？它把每段文字轉成一個高維向量（embedding），語意相近的段落向量距離近。你完全可以用化學的方式理解它：就像把幾千個吸附結構映射到特徵空間、用距離找相似結構——只是這裡的「結構」是文字段落。

## 核心概念

### 1. 迭代式搜尋迴圈（agentic / iterative search）

```text
研究問題
  → 拆成 N 個子問題
  → 多引擎並行搜尋、抓取、閱讀
  → 彙整目前所知，找出「還不知道什麼」
  → 生成下一輪子問題（迴圈 × iterations）
  → 輸出帶引用的報告
```

每一步都可能出錯：拆題拆歪、搜尋引擎漏掉關鍵文獻、彙整時過度概括。**迴圈自動化了，品質驗收沒有。**

### 2. RAG pipeline 四步

文件 →（a）**切塊（chunking）**：LDR 預設每塊 1000 字元、相鄰塊重疊 200 字元——塊太大檢索不精準、太小語境被切碎，重疊是為了不把關鍵句切在邊界上 →（b）**embedding**：每塊轉成向量（LDR 預設 `all-MiniLM-L6-v2`，384 維、CPU 可跑）→（c）**檢索**：把問題也轉成向量，算 cosine 相似度取 top-k →（d）**生成**：top-k 段落＋你的問題一起塞給 LLM 作答。

配套互動 demo [`interactive/rag-pipeline.html`](../../interactive/rag-pipeline.html) 讓你親手拉 chunk size、看 embedding 散點、跑一次 top-k 檢索——五分鐘建立完整圖像。

### 3. 本地 vs 雲端：你的「算力 vs 隱私」老問題

| | 全本地（Ollama LLM＋本地檢索） | 雲端 API（OpenAI/Anthropic） |
|---|---|---|
| 資料去向 | 不離開你的電腦 | 上傳到服務商 |
| 成本 | 電費；需一張好 GPU（官方 benchmark 用 RTX 3090 跑 27B 模型） | 按用量計費，無 GPU 需求 |
| 品質 | 取決於本地模型大小 | 通常較高 |
| 適合 | 未發表資料、機密計畫 | 公開文獻調研、課堂 |

這個取捨你其實很熟：跟「自己工作站跑 VASP vs 上國網中心」是同一道題。

### 4. 引用的可信度紀律

deep research 給的引用是「**檢索到的來源**」，不是「保證正確的依據」。兩種典型錯誤：來源存在但 AI 解讀錯了；來源相關但不支持那句話。所以規矩是：**進你論文或組會簡報的每一條引用，抽查原文**。這跟「不看收斂就不信 OUTCAR」是同一種科學素養。

## 和 DFT / 材料 / 催化的關係

LDR 完全不做計算，它在計算工作流的上下游各服務一次：

- **上游（開題）**：「2024 年以來 NiFe 系 OER 的 DFT 文獻，整理出常用 functional、U 值與 slab 設定」——這類問題用 `arxiv` + `semantic_scholar` 引擎跑 detailed report，半小時拿到帶引用的草圖，再人工精讀關鍵的五篇。
- **下游（寫作與傳承）**：把實驗室的 PDF 庫與 wiki 接成可檢索的知識庫，新生的「U 值問題」變成一次檢索。本課程的教師備註（[teacher-notes/ch01.md](../teacher-notes/ch01.md)）附了把 chem-kb 風格的 markdown wiki 接進 LDR 的完整步驟與兩個已知限制（不能直接指向資料夾；Obsidian `[[wikilink]]` 連結結構會丟失）。

## 最小數學

只有一條：cosine 相似度。兩個向量 $\mathbf{a}, \mathbf{b}$ 的夾角餘弦

$$\cos\theta = \frac{\mathbf{a}\cdot\mathbf{b}}{\lVert\mathbf{a}\rVert\,\lVert\mathbf{b}\rVert} \in [-1, 1]$$

越接近 1 表示語意越近。它只看方向不看長度——所以長文件不會僅因為「字多」就佔便宜。

## 最小 code

**Level 1（pseudo-code）**

```text
report = deep_research(question)
  loop iterations:
    subqs   = split(question, context)
    results = search(engines, subqs)      # arxiv / pubmed / 本地 collection
    context = synthesize(context, results)
  return write_report(context, citations)
```

**Level 2（minimal Python，LDR v1.7.0）**

```python
from local_deep_research.api import quick_summary

result = quick_summary(
    query="HER 在高熵合金表面的 DFT 計算，常用哪些 descriptor？",
    search_tool="arxiv",          # 換成你的 collection 名稱即可查私有文件庫
    programmatic_mode=True,
)
print(result["summary"])
```

**Level 3（real repo pointer）**

- 安裝：`pip install local-deep-research`（**Python ≥3.12**），啟動 web UI：`python -m local_deep_research.web.app` → http://localhost:5000
- 混合搜尋（web＋本地文件）範例：`examples/api_usage/programmatic/hybrid_search_example.py`
- 知識庫設定文件：repo 的 `docs/library-and-rag.md`；本課程整理版見 [repo-analysis/local-deep-research.md](../repo-analysis/local-deep-research.md)

## 常見誤解

- **「LLM 讀過我上傳的所有 PDF。」** 沒有。每次回答它只看到檢索出的 top-k 片段。問題問法不同、檢索結果不同、答案就不同。
- **「有引用＝內容正確。」** 引用只保證來源存在。解讀對不對，抽查才知道。
- **「全本地一定比較差。」** 取決於模型與題目；LDR 官方 benchmark（SimpleQA 約 95.7%）本身就是全本地配置跑出來的。
- **「embedding 隨便選都一樣。」** 換 embedding 必須整庫重建索引；而且預設模型以英文為主，**中文 wiki 的檢索品質要實測**，不能想當然。

## 小練習

1. 同一個研究問題（例如「ΔG_H 接近 0 為什麼是 HER 活性指標？」）分別丟給：(a) 一般聊天機器人、(b) deep research 流程。比較兩者的引用：幾條真的存在？幾條支持它的論述？
2. 為你的實驗室設計知識庫結構：要建幾個 collection（論文／wiki／計算 SOP？）、誰負責更新、多久重建一次索引。寫成半頁提案。
3. 抽查練習：從本章 demo 跑出的報告任挑兩條引用，回原文驗證，記錄「支持／部分支持／不支持」。

## 延伸閱讀

- [repo-analysis/local-deep-research.md](../repo-analysis/local-deep-research.md)：完整 repo 分析，含版本、安裝坑、與 chem-kb 整合的限制
- LDR 官方文件：`docs/library-and-rag.md`（RAG 設定）、`docs/search-engines.md`（哪個引擎查什麼）

## 我學完後應該能說出什麼

- 「deep research 是 search→read→synthesize→cite 的自動迴圈；最容易出錯的是拆題與彙整這兩步。」
- 「RAG 的四步：切塊、embedding、cosine 檢索、生成——所以 AI 沒有『記得』我的文件，是每次現翻。」
- 「我會為實驗室建知識庫，而且知道它的兩個限制與引用抽查的紀律。」

---

### 本章配套

- 互動 demo：[`interactive/rag-pipeline.html`](../../interactive/rag-pipeline.html)
- notebook：[`notebooks/deep-research-demo.ipynb`](../../notebooks/deep-research-demo.ipynb)（mock 檢索器，零安裝可跑）
- 投影片：[`slides/ch01-deep-research.html`](../../slides/ch01-deep-research.html)
- 教師備註（含 chem-kb 實裝指南）：[`docs/teacher-notes/ch01.md`](../teacher-notes/ch01.md)
- 練習題（含詳解）：[`exercises/ch01.md`](../../exercises/ch01.md)
