---
title: 'LightRAG + OpenClaw + qmd：打造有記憶的本地 AI 助理'
url: 'https://www.dbyellow.com/blog/2026-04-lightrag-openclaw'
markdown: 'https://www.dbyellow.com/blog/2026-04-lightrag-openclaw.md'
lang: zh-tw
date: '2026-04-21'
description: 'Table of Contents 前言 三個工具，各有所長 OpenClaw：Agent 框架 …'
taxonomy:
  category:
    - 技術
  tag:
    - LightRAG
    - OpenClaw
    - qmd
    - RAG
    - 知識圖譜
    - 本地部署
    - AI
  archives_month:
    - apr_2026
  archives_year:
    - '2026'
---

# LightRAG + OpenClaw + qmd：打造有記憶的本地 AI 助理

#### Table of Contents

- [前言](#)
- [三個工具，各有所長](#-1)
    - [OpenClaw：Agent 框架](#openclaw-agent)
    - [qmd：本地混合檢索](#qmd)
    - [LightRAG：圖譜增強推理](#lightrag)
- [架構設計](#-2)
- [實作程式碼](#-3)
    - [1. qmd 初始化（Node.js）](#1-qmd-node-js)
    - [2. qmd 查詢（混合檢索）](#2-qmd)
    - [3. LightRAG 初始化](#3-lightrag)
    - [4. 三合一查詢流程](#4)
- [為什麼是三合一？](#-4)
- [OpenClaw Skill 整合](#openclaw-skill)
- [限制與下一步](#-5)
- [結語](#-6)

## 前言

多數 AI 助理的回答是「瞬時」的——你問，它答，會話結束後什麼都不記得。對於需要長期累積上下文的工作場景，這個限制是根本性的瓶頸。

本文提出一套 **三合一架構**：以 OpenClaw 為 Agent 框架，qmd 為本地混合檢索層，LightRAG 為圖譜推理引擎。三者各司其職，構成一個具備**持久記憶、混合檢索、圖譜推理**的本地 AI 助理。

---

## 三個工具，各有所長

### OpenClaw：Agent 框架

OpenClaw 是本地 AI Agent 執行框架，提供工作階段管理、工具調度、多層記憶（MEMORY.md、Wiki Vault、Vector Store）與豐富的內建工具。

它的限制是：**記憶檢索以向量相似為主**，缺乏結構化的關係推理能力。

### qmd：本地混合檢索

[qmd](https://github.com/tobi/qmd)（Query Markup Documents）是專為 Markdown 知識庫設計的本地檢索引擎，核心特點：

- **BM25 關鍵字檢索** + **向量語意檢索** + **LLM re-ranking** 三合一
- 索引儲存在本地 SQLite，不上雲
- 支援 structured query syntax，可指定搜尋範圍與條件
- 有現成的 OpenClaw Skill（`qmd-external`），開箱即用

### LightRAG：圖譜增強推理

LightRAG 採用**向量 + 知識圖譜雙通道**架構，入庫時自動：

- 抽取實體（Entity）與關係（Relation）
- 建立圖譜索引

查詢時同時走圖譜路徑，支援多跳推理，例如「某公司CEO任期內的併購決策」這類複雜查詢。

---

## 架構設計

```
┌─────────────────────────────────────────────┐
│              OpenClaw Agent                 │
│  (工作階段管理 / 工具調度 / 回應生成)         │
└──────────────┬──────────────────────────────┘
               │
        ┌──────┴──────┐
        ▼             ▼
  ┌──────────┐  ┌──────────────┐
  │   qmd    │  │  LightRAG    │
  │ (混合檢索)│  │  (圖譜推理)  │
  └────┬─────┘  └──────┬───────┘
       │               │
       ▼               ▼
  快速關鍵字/     實體關係圖譜
  語意相似匹配    (多跳推理)
       │               │
       └───────┬───────┘
               ▼
        融合結果注入 prompt
        (context 加持)
```

**工作流程：**

1. **寫入階段**：OpenClaw session 結束時，自動抽取關鍵事實

    - `qmd`：寫入 Markdown notes（適用於非結構化筆記、日誌）
    - `LightRAG`：寫入知識圖譜（適用於實體關係抽取）
2. **查詢階段**：用戶提問時

    - 先走 `qmd` BM25 + 向量混合檢索，取最相關的 Markdown 段落
    - 再走 `LightRAG` 圖譜查詢，取相關實體與關係路徑
    - 最後將兩者結果融合，注入 prompt
3. **融合策略**：

    - 如果 qmd 和 LightRAG 結果有交集，提高該節點的上下文權重
    - 如果結果衝突，以 LightRAG 圖譜為準（結構化優先於非結構化）

---

## 實作程式碼

### 1. qmd 初始化（Node.js）

```javascript
import { QMD } from "qmd";

const qmd = new QMD({
  dataDir: "./qmd_data",    // SQLite 索引存放位置
  model: "./models/bert.gguf" // 本地 embedding 模型（可選）
});

// 將 OpenClaw session 內容寫入 qmd
await qmd.index([
  {
    id: "note_20260421_001",
    text: "Mark 在 2026-04-21 發表了 LightRAG + OpenClaw + qmd 文章",
    tags: ["blog", "openclaw", "lightrag"]
  },
  {
    id: "note_20260421_002",
    text: "文章放在 dbyellow.com/blog，使用 grav-blog skill 管理發布",
    tags: ["blog", "grav", "dbyellow"]
  }
]);
```

### 2. qmd 查詢（混合檢索）

```javascript
// 查詢「Mark 最近討論過哪些技術主題」
const results = await qmd.query({
  query: "Mark openclaw lightrag 文章",
  type: "hybrid",     // BM25 + vector 混合
  limit: 5,
  rerank: true        // LLM re-ranking
});

console.log(results[0].text);  // 最相關的段落
```

### 3. LightRAG 初始化

```python
from lightrag import LightRAG, QueryParam

rag = LightRAG(
    working_dir="./lightrag_data",
    llm_model="gpt-4o-mini",
    embedding_model="text-embedding-3-small",
)

rag.insert_chunks(
    texts=[
        "Mark → 發表文章 → LightRAG + OpenClaw + qmd (時間: 2026-04-21)",
        "Mark → 使用工具 → OpenClaw, grav-blog skill, qmd, LightRAG",
        "Mark → 部落格 → dbyellow.com/blog (Grav CMS)",
    ]
)
```

### 4. 三合一查詢流程

```python
async def unified_query(user_query: str):
    # Step 1: qmd 混合檢索
    qmd_results = await qmd.query({query: user_query, type: "hybrid", limit: 5})

    # Step 2: LightRAG 圖譜查詢
    graph_results = rag.query(user_query, param=QueryParam(mode="hybrid", top_k=5))

    # Step 3: 結果融合
    fused_context = deduplicate_and_merge(qmd_results, graph_results)

    # Step 4: 注入 prompt
    prompt = f"""你是 Mark 的 AI 助理。以下是相關背景：

{fused_context}

Mark 的問題：{user_query}
"""
    return await llm.complete(prompt)

def deduplicate_and_merge(qmd_results, graph_results):
    """去除重疊，合併上下文"""
    seen = set()
    merged = []

    # LightRAG 結果優先（結構化）
    for r in graph_results:
        if r["text"] not in seen:
            seen.add(r["text"])
            merged.append(f"[圖譜] {r['text']}")

    # qmd 結果补充（非結構化）
    for r in qmd_results:
        if r["text"] not in seen:
            seen.add(r["text"])
            merged.append(f"[筆記] {r['text']}")

    return "\n".join(merged)
```

---

## 為什麼是三合一？

| 維度 | qmd 單獨使用 | LightRAG 單獨使用 | 三合一（本方案） |
|---|---|---|---|
| 關鍵字檢索 | ✅ BM25 精準 | ❌ 依赖 embedding | ✅ qmd 提供 |
| 圖譜推理 | ❌ 無 | ✅ 雙通道支援 | ✅ LightRAG 提供 |
| 非結構化筆記 | ✅ 原生支援 | ⚠️ 需轉換 | ✅ qmd 原生支援 |
| Agent 框架 | ❌ 無 | ❌ 無 | ✅ OpenClaw 提供 |
| 多跳查詢 | ❌ | ✅ | ✅ |
| OpenClaw 整合 | ✅ 有 Skill | ⚠️ 需自整合 | ✅ 最佳 |

qmd 的強項是**快速、精準的本地關鍵字/語意檢索**，但缺乏圖譜推理能力。LightRAG 的強項是**圖譜推理**，但對非結構化筆記的管理不如 qmd 直覺。三者互補，剛好填滿彼此的空白。

---

## OpenClaw Skill 整合

qmd 已有現成的 OpenClaw Skill：`qmd-external`。

在 OpenClaw 中啟用方式：

```
/skill install qmd-external
```

之後就可以在對話中直接呼叫：

```
/qmd search "Mark blog articles 2026"
```

整合 LightRAG 部分則需要透過 OpenClaw 的 `memory_search` / `sessions_history` 工具，在 session 結尾自動寫入。

---

## 限制與下一步

**目前限制：**

1. **雙系統同步成本**：每次 session 結尾同時寫入 qmd 和 LightRAG，約 1-2 秒延遲
2. **模型本地化**：qmd 的 LLM re-ranking 若想完全本地，需要 GGUF 模型支援
3. **圖譜膨脹**：LightRAG 長期使用需定期 `rag.gc()` 清理孤島節點

**下一步計畫：**

- 將 `qmd-external` Skill 改造成支援雙寫（同時寫入 qmd + LightRAG）
- 研究 OpenClaw 的 `memory_search` 作為第三層快取的可能性
- 評估將 qmd 的 BM25 結果作為 LightRAG 查詢前預過濾層的可行性

---

## 結語

qmd 處理**文件級別**的精準檢索，LightRAG 處理**關係級別**的圖譜推理，OpenClaw 處理**工作流級別**的 Agent 調度。三者分層，各司其職，構成一個真正「有記憶」的本地 AI 助理。

對於需要長期記憶、跨 session 累積上下文，又不願把資料送上雲的使用場景，這套架構值得一試。

---

*相關連結：[qmd GitHub](https://github.com/tobi/qmd) / [LightRAG GitHub](https://github.com/hkuds/lightrag) / [OpenClaw 官方文件](https://docs.openclaw.ai) / [qmd-external Skill](https://github.com/openclaw/skills/tree/main/skills/levineam/qmd-external)*

---

## Navigation

- Parent: [部落格](https://www.dbyellow.com/index.md)
- Previous: [OpenAI 瞟竊者風暴：馬斯克索償 1,340 億美元的背叛與戰爭](https://www.dbyellow.com/blog/2026-04-openai-plagiator.md)
- Next: [霍爾木茲海峽，一條改寫2026春天的能源命脈](https://www.dbyellow.com/blog/2026-04-iran-strait-energy-crisis.md)
