---
title: "EdgeQuake：PostgreSQL GraphRAG 与 MCP 智能体记忆"
canonical: https://wavect.io/zh/blog/edgequake-postgresql-graphrag-mcp-agent-memory/
language: zh
description: "评估 EdgeQuake v0.34.0 的 PostgreSQL GraphRAG 与 MCP 智能体记忆：工作区权限、本地模型角色、部署核查，以及 LightRAG 基准测试的缓存与样本条件。"
image: "https://wavect.io/img/blog/headers/header_edgequake-postgresql-graphrag-mcp-agent-memory.png"
author: ["Kevin Riedl"]
published: "2026-10-12"
updated: "2026-10-12"
reviewed: "2026-10-12"
---

# EdgeQuake：用 PostgreSQL GraphRAG 构建 MCP 智能体记忆

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

12 分钟 阅读 · 2026年10月12日 最近审核 2026年10月12日

[**下一篇**](/zh/blog/graph-engineering-ai-agents/)

要点速览

EdgeQuake 结合 Rust、PostgreSQL、pgvector 和 Apache AGE，检索文档及其关系。MCP 工具返回证据，由宿主智能体组织答案。评估 v0.34.0 时，需要检查工作区权限、索引完成状态和每个模型角色，包括回退配置。公开的 LightRAG 准确率对比未得出明确优胜者；82 ms 的热缓存结果使用了 LLM 与嵌入缓存，冷查询延迟则相近。v0.34.0 新增可视化导览，schema 仍为 169。

**EdgeQuake 是用 Rust 编写的 GraphRAG 服务端，将文档检索与知识图谱整合在 PostgreSQL 中。**借助 MCP，智能体在不同对话中都能从中检索证据。它尤其值得用于答案分散在多份文档中的问题，例如：某个产品使用的组件，受哪份供应商协议约束？

[v0.34.0 版本](https://github.com/raphaelmansuy/edgequake/releases/tag/v0.34.0) 于 2026年10月11日发布，适合作为评估这套架构的版本基线。如果团队已经在运维 PostgreSQL，将图谱、向量和文档数据放在同一个数据存储中，可以让系统更容易维护。

**核查日期：2026年10月12日。**本文核查了该版本标签下的文档与实现。下文给出的是建议采用的评估步骤；Wavect 尚未运行这套 EdgeQuake 部署，也未独立复现其基准测试。

## EdgeQuake v0.34.0 更新了什么？

**v0.34.0 新增可视化导览，数据库 schema 版本仍为 169。** [该版本的升级说明](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/docs/operations/upgrade-to-0.34.0.md) 指出，查询与存储行为保持不变。它沿用了 8 月已有的准确率评估结果。加密的模型服务连接、工作区隔离和 MCP 等功能，属于产品在此前版本中累积的能力。

了解具体改动，才能安排合适的升级步骤。从 v0.33.0、schema 169 升级时，迁移命令应当没有待执行任务。更早的安装版本需要遵循对应的升级路径。仅凭发布公告，无法判断你的数据库是否已经满足升级条件。

## 当答案藏在关系中，再考虑 GraphRAG

[EdgeQuake 仓库](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/README.md) 介绍了基于 LightRAG 思路的 Rust 检索实现：摄取文档，提取实体与关系，再结合向量和图操作检索所需上下文。PostgreSQL 负责保存数据，pgvector 负责向量检索，Apache AGE 提供图存储与查询能力。

可以先用下面这组完全虚构的文档做评估：

| 文档 | 记录的事实 | 回答需要提供的证据 |
| --- | --- | --- |
| 产品规格书 | Atlas 产品使用组件 C-17。 | 产品与组件的对应关系。 |
| 供应商协议 | 协议 S-24 适用于组件 C-17。 | 组件与协议的对应关系。 |
| 职责登记表 | 采购团队负责协议 S-24。 | 协议与负责团队的对应关系。 |

提问：“哪份协议会影响 Atlas 产品，由谁负责？”有用的回答需要为每一步关联提供正确出处。仅找到一段提到 Atlas 的文字还不够。提取出来的图谱关系也可能出错，因此，接受答案前应核对原文。

向量检索本身也能解决一部分跨文档问题，尤其是在分块合理、允许多轮检索时。应通过实际问题衡量加入图谱是否有帮助。我们的 [智能体图工程指南](/zh/blog/graph-engineering-ai-agents/) 讨论更广泛的架构选择；本文聚焦 EdgeQuake 的部署与运行。

## “一个 PostgreSQL”实际包含哪些组件

**数据集中在一处，运行时仍有多个进程。** [该版本的 Docker Compose 文件](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/docker-compose.quickstart.yml) 定义了 PostgreSQL、Rust API、Web 前端，以及在 API 启动前执行的迁移服务。项目为 PostgreSQL 16、17 和 18 发布了包含所需扩展的镜像。使用常规托管 PostgreSQL 实例时，需要确认它支持兼容的 pgvector 和 Apache AGE。

Rust 服务端是一个二进制程序。前端、可选的身份提供方，以及本地模型服务器，各有自己的运行要求。“一个 PostgreSQL”说明的是检索数据存在哪里；模型托管、备份和升级仍然需要纳入运维预算。

为了便于重复评估，先下载本文核查过的 Compose 文件，并在启动前检查所选镜像：

```
mkdir edgequake-0.34.0
cd edgequake-0.34.0
curl -fsSL \
  https://raw.githubusercontent.com/raphaelmansuy/edgequake/v0.34.0/docker-compose.quickstart.yml \
  -o docker-compose.quickstart.yml
export EDGEQUAKE_VERSION=0.34.0
docker compose -f docker-compose.quickstart.yml config --images
```

将这个版本号保存在部署配置中，否则文件默认使用 `latest`。演示配置将对外发布的端口绑定到回环地址，并关闭身份认证。用作共享知识服务前，应先配置登录。下文的认证部分说明了需要添加的 Compose 覆盖配置。

## MCP 记忆的流程：摄取、等待索引、检索证据

[MCP 集成指南](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/docs/integrations/mcp.md) 给出的网关端点是 `POST /mcp`，别名为 `/api/v1/mcp`。完整流程如下：

1. 通过界面或 REST API 创建工作区，为指定身份授予访问权限。
2. 具有写入权限的调用方通过 `eq_ingest` 提交文本，使用 `eq_upload_*` 工具上传文件。
3. 保存返回的任务标识，并轮询 `eq_task_get` 。任务状态变为 `indexed` 后，文档才可供检索。
4. 先调用 `eq_search` ，再通过 `eq_fetch` 的 `view=toc` 查看现有证据。随后获取所需文本块或引用。
5. 由宿主智能体组织答案，并保留来源引用。开启新对话后，需要再次检索相关证据。

**这些 MCP 工具返回证据，供宿主智能体使用。**独立的答案生成 API 是另一条调用路径。“第二大脑”可以用来概括持久保存、随时可检索的知识，但它并不代表系统会自动记录每次对话，也不能保证每个答案都正确。

只需要检索的连接器，应在 API 进程的环境中设置 `EDGEQUAKE_MCP_PROFILE=query`。默认的 `control` 配置也会开放写入工具，`memory` 是它的别名。采用只读查询配置后，需要通过界面、REST API 或另行配置的服务导入知识。

## 让智能体的权限与目标工作区一致

[API 密钥说明](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/docs/security/authentication/api-keys-and-mcp.md) 区分了 `edgequake:read`、`edgequake:query` 和 `edgequake:write`。密钥的默认权限范围是读取和查询。应为智能体使用专用身份签发密钥，并将该身份的成员权限限制在实际需要的范围内。

按照 [认证快速入门](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/docs/operations/auth-quickstart.md) 启用登录。对于本文核查的 Compose 部署，需要设置 `EDGEQUAKE_AUTH_ENABLED=true`、`EDGEQUAKE_DEV_MODE=false`，保存强度足够且持久不变的 `JWT_SECRET`，配置首次管理员凭据，并通过 Compose 覆盖配置向 API 传入 `EDGEQUAKE_CORS_ORIGINS`。也应在这份 API 覆盖配置中设置 MCP profile；仅在宿主机 shell 中导出变量，这份 Compose 文件不会将其传入容器。项目支持通过 Keycloak/OIDC 实现 SSO，但身份服务的部署与账号生命周期需要单独配置。

**工作区请求头用于选择上下文，访问范围则必须由授权检查来约束。**该版本的 [API 密钥创建类型](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/edgequake/crates/edgequake-api/src/handlers/auth_types.rs) 接受名称、权限范围和可选的有效期，没有工作区标识字段。即使客户端设置了默认工作区，也不能据此认定高权限用户的密钥被限制在该工作区内。

选一个获准访问的工作区和另一个工作区，用同一凭据分别测试。省略工作区请求头、撤销访问权限后，再重复测试。除搜索外，也要检查文档读取和图谱工具。如果需要继承上游系统的文档级访问权限，可参考我们的 [RAG 权限控制指南](/zh/blog/rag-permissions-sharepoint-confluence-drive/) ；单独进行工作区隔离，并不能证明源系统的文档权限已经得到落实。

### 向已启用认证的服务器发送经源码核查的 HTTP 查询

配置好服务器，并为虚构语料完成索引后，通过本地环境变量提供密钥、租户 ID 和工作区 ID。以下诊断请求对照了该版本的 [HTTP 传输校验](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/edgequake/crates/edgequake-api/src/mcp/gateway/validate.rs) 与 [工具参数 schema](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/edgequake/crates/edgequake-api/src/mcp/gateway/tools.rs) 。不要将凭据写入会提交到版本库的客户端配置。

```
curl --fail-with-body -sS http://localhost:8080/mcp \
  -H "Authorization: Bearer $EDGEQUAKE_API_KEY" \
  -H "X-Tenant-ID: $EDGEQUAKE_TENANT_ID" \
  -H "X-Workspace-Id: $EDGEQUAKE_WORKSPACE_ID" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'MCP-Protocol-Version: 2026-07-28' \
  -H 'Mcp-Method: tools/call' \
  -H 'Mcp-Name: eq_search' \
  --data-binary @- <<'JSON'
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "eq_search",
    "arguments": {
      "query": "Which agreement affects Product Atlas, and who owns it?",
      "mode": "hybrid",
      "budget": "standard",
      "limit": 8
    }
  }
}
JSON
```

这条网关诊断请求经过源码核查，尚未在实际运行的服务器上执行。常规 MCP 客户端还会完成初始化握手。远程部署应使用 HTTPS。检查返回的证据句柄和错误，包括 JSON-RPC 的 `error` 与 MCP 的 `isError`；收到 HTTP 响应本身，并不能证明检索成功。

`hybrid` 结合局部与全局图检索。默认的 `mix` 模式加入融合检索与重排序；下文的基准测试使用 Mix。记录评估结果时，应同时记录查询模式。

选用桥接程序前，先检查客户端的传输兼容性。该版本的 [stdio 桥接实现](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/mcp/src/gateway-bridge.ts) 没有发送上述 method/name 请求头，也没有转发配置中的默认租户。这些细节限制了它在本次源码核查中能证明的多租户连接能力。采用通用 `npx` 配置示例前，应核对实际安装的包及其发出的请求。

## 要让数据全程留在本地，逐一检查模型角色

EdgeQuake 支持云端模型服务和本地模型端点。相比查看服务商标识， [工作区模型角色说明](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/docs/providers/roles.md) 更有助于判断数据流向：

| 角色 | 处理的数据 | 需要核对的配置 |
| --- | --- | --- |
| 提取（Extract） | 文档文本与关系。 | 环境变量可能优先于工作区设置。 |
| 关键词与查询（Keyword、Query） | 问题；由服务器生成答案时使用的检索上下文。 | 同时检查两个角色，以及请求级覆盖设置。 |
| 摘要（Summary） | 需要合并的实体描述。 | 在核查版本中，此角色不使用已保存的 Connection。 |
| 嵌入（Embedding） | 需要转换为向量的文本。 | 更换模型或维度后，需要重建已存储的嵌入向量。 |
| 视觉（Vision） | PDF 页面图像。 | 检查上传设置，以及工作区的视觉模型。 |
| 重排序（Reranker，启用时） | 检索到的候选内容与问题。 | 在服务器级别配置。 |

角色文档说明，当已保存的 Connection 无法使用时，系统可能回退到工作区或服务器默认配置。使用 Ollama、LM Studio、MLX 或 llama.cpp 本地部署时，应核对可达端点与实际选中的模型角色。随后模拟本地端点故障，检查请求是否被发送给了其他服务商。

智能体自身使用的模型，也是一个数据去向。本地知识存储可以将原文片段返回给使用云端模型的 MCP 客户端。判断整个流程是否满足本地处理要求时，必须将最后这次模型调用计算在内。

[模型服务安全指南](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/docs/providers/security.md) 说明，已保存的服务商密钥使用 AES-256-GCM 加密，密钥只能写入，不能通过 API 读回。应妥善持久保存 `EDGEQUAKE_SECRETS_KEY`：修改或丢失它，会导致已存储的密钥无法解密。交互式快速入门脚本每次运行都会生成新密钥，除非事先已导出该变量。静态加密保护的是存储中的凭据；配置的模型服务商仍会处理发送给它的请求。

### 先评估 PDF 提取结果，再相信图谱关系

[PDF 处理指南](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/docs/deep-dives/pdf-processing.md) 介绍了文本提取，以及面向扫描页面和复杂版式的视觉处理。用一张实际表格、一个扫描页面，以及一份包含修订后组件编号的文档做测试。评估答案前，先检查提取的内容与来源引用。表格中提错的一行数据，可能在图谱中变成看似可信、实则错误的关系。

## EdgeQuake 与 LightRAG：先看清缓存条件

项目 [公开的基准测试记录](https://github.com/raphaelmansuy/edgequake/blob/v0.34.0/docs/comparisons/eq-vs-lightrag-acc-bench.md) 给出了以下结果。这些数据来自项目方的不同轮次测试，并被沿用至本次发布。

| 指标 | EdgeQuake | LightRAG | 测试条件与解读 |
| --- | --- | --- | --- |
| 答案准确率 | 0.792 | 0.786 | 2026年8月15日，medical-mid，n=200。未得出明确优胜者。 |
| 证据召回率 | 0.932 | 0.949 | 在准确率评估对应的测试中，LightRAG 的证据召回率更高。 |
| 上下文相关性 | 0.471 | 0.510 | 在同一评估中，LightRAG 的上下文相关性更高。 |
| 热缓存查询 p50 | 82 ms | 993 ms | 2026年8月15日，n=200，启用 LLM 与嵌入缓存。 |
| 冷查询 p50 | 4,447 ms | 4,359 ms | 2026年7月23日，n=40，关闭 LLM 缓存。延迟中位数接近。 |

准确率对比使用相同语料、问题、Mix 模式、Mistral Small 和 `mistral-embed`。准确率差值的 95% 置信区间为 [-0.022, +0.034]，包含零。这个结果并不能证明两者的检索质量等同。

热缓存测试中，关键词、嵌入和生成阶段的耗时中位数都记录为零毫秒。因此，82 ms 不能用来说明通过新模型调用回答新问题需要多久。重复查询可能受益于这条缓存路径；首次查询的耗时应单独测量。

## 先在一个工作区完成有针对性的评估

我们建议从一小组获准使用的文档开始，选择需要明确实体关系才能回答的问题。导入前，先约定正确答案必须包含哪些证据。也应加入一个文档无法回答的问题。

- 核验 Atlas 示例中的完整关系链，并检查每一处引用的原文。
- 用选定的图检索模式和较简单的检索基线，分别回答同一组问题。
- 单独记录首次查询延迟、重复查询延迟、摄取耗时和模型成本。
- 使用第二个身份，检查工作区隔离、失效凭据以及被撤销的成员权限。
- 修改一条源事实，重新处理文档，再检查是否仍有冲突或过时的证据。
- 在测试环境中恢复数据库及所需密钥，然后再次检索。

使用 `edgequake doctor` 检查配置与数据库就绪情况，并在启动升级后的 API 前完成明确的迁移步骤。源码核查与进程健康状态为评估提供依据；文档、权限和恢复测试，才能判断这套部署是否适合你的实际工作。

当问题需要跨文档梳理关系，而团队又适合采用 PostgreSQL 运维时，EdgeQuake 值得评估。如果主要需求是在不同 IDE 之间共享编程决策，我们的 [mcp-memory-service 配置指南](/zh/blog/mcp-memory-service-claude-code-cursor/) 更聚焦这个场景。需要在自建知识服务与现成产品之间做选择时，可参考 [定制软件与现成软件选型指南](/zh/software-development-guide/custom-software-vs-off-the-shelf/) 。

## EdgeQuake、PostgreSQL 与 MCP 常见问题

### EdgeQuake 是什么？

EdgeQuake 是一个开源的 Rust GraphRAG 服务端，使用 PostgreSQL、pgvector 和 Apache AGE。它将导入的文档处理成可检索文本，以及包含实体与关系的图谱。MCP 客户端可以从这份持久存储中检索证据。

### EdgeQuake 需要单独部署图数据库吗？

本文核查的 PostgreSQL 部署通过 pgvector 和 Apache AGE，将向量与图谱数据保存在 PostgreSQL 中。完整系统还包括 API、前端和独立执行的迁移服务。本地模型服务器与可选的身份提供方会增加运行组件。

### EdgeQuake 比 LightRAG 更快、更准确吗？

公开的 n=200 准确率对比没有得出统计意义上明确的优胜者。LightRAG 的证据召回率与上下文相关性更高。EdgeQuake 的 82 ms 热缓存延迟中位数使用了 LLM 与嵌入缓存；另一轮 n=40 的冷查询对比显示，两者延迟接近。

### EdgeQuake MCP 能用作只读的智能体记忆吗？

在 API 上设置 EDGEQUAKE_MCP_PROFILE=query，并使用权限范围适当的读取和查询凭据。限制该身份的成员权限，并测试它能否访问其他工作区。新增知识需要通过这个只读查询连接器之外的授权摄取路径导入。

### 本地运行 EdgeQuake，就能让所有数据留在本地吗？

需要检查提取、关键词、摘要、嵌入、视觉、重排序和模型回退配置，也要检查宿主智能体使用的模型。即使 PostgreSQL 与 EdgeQuake 在本地运行，使用云端模型的客户端仍可能收到检索出的原文片段。

### EdgeQuake v0.34.0 有哪些新功能？

2026年10月11日发布的版本新增可视化导览。升级说明指出，schema 仍为 169，查询与存储行为延续 v0.33.0。基准测试数值来自项目方已有的评估，并非针对 v0.34.0 重新开展的测试。

模型与基础设施

## 接下来读什么

模型选择、推理经济性、本地部署、压缩与服务架构。

[从这里开始**在欧盟自托管 LLM：开放权重模型何时才真正划算**](/zh/blog/self-hosting-llms-eu-cost/)

- [Google SAM 现名 Agent Mesh：跨机器调用 MCP 工具](/zh/blog/google-sam-agent-mesh-mcp-tools/)
- [BitNet CPU 推理：2B4T 的实际内存需求与 100B 说法](/zh/blog/bitnet-cpu-llm-ram-requirements/)
- [SuperPenguin：按 PR、客户和功能核算 AI 成本](/zh/blog/superpenguin-ai-roi-cost-per-pr-customer/)
- [Claude Dashboards + Motion：把产品指标做成视频](/zh/blog/claude-dashboards-motion-product-kpi-video/)
- [OpenAI Intelligent UI 与 OpenUI：企业应用如何落地生成式 UI](/zh/blog/openai-intelligent-ui-vs-openui/)

[上一篇文章**Google SAM 现名 Agent Mesh：跨机器调用 MCP 工具**](/zh/blog/google-sam-agent-mesh-mcp-tools/) [下一篇文章**BitNet CPU 推理：2B4T 的实际内存需求与 100B 说法**](/zh/blog/bitnet-cpu-llm-ram-requirements/)

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

12 分钟 阅读 · 2026年10月12日 最近审核 2026年10月12日

[**下一篇**](/zh/blog/graph-engineering-ai-agents/)
