← blog 架构与系统 · 2026-04-21

enterprise RAG architecture

企业知识库 RAG 服务的整体架构:FastAPI 混合检索管线、数据模型、三级缓存策略与集中配置说明。

3 min read

System Overview

graph TD
    Client["API Client"] -->|HTTP| Server

    subgraph Server["FastAPI Server (uvicorn, port 8080)"]
        H["/health"]
        R["/retrieve /retrieve/by-skill /retrieve/by-module"]
        HR["HybridRetriever (L1 QueryResultCache)"]
        R --> HR
    end

    HR --> BM25["BM25Retriever (in-memory) L3 Cache"]
    HR --> EMB["DashScope Embedding + Vector Search (pgvector)"]
    HR --> RER["DashScope Reranker"]
    BM25 --> PG[(PostgreSQL + pgvector L2 Storage)]
    EMB --> PG
    RER --> PG

Retrieval Pipeline

by-skill 流程

graph TD
    Q["Query: Token管理"] --> L1["1. L1 Cache Check (query + top_k → result)"]
    L1 -->|hit| RET["return cached result"]
    L1 -->|miss| EXP["2. Query Expansion (SKILL_POINT_SYNONYMS) → [Token管理, Token, JWT, AccessToken, ...]"]
    EXP --> BM["BM25 (in-memory) L3 Cache"]
    EXP --> DEN["Dense Vector Search search_similar_chunks (pgvector)"]
    BM --> RRF["3. RRF Fusion (k=60) score = Σ 1/(k + rank)"]
    DEN --> RRF
    RRF --> RER["4. DashScope Rerank qwen-rerank model"]
    RER --> CACHE["5. Cache result (TTL 5min) return top_k results"]

by-module 流程

graph TD
    Q["Query: 用户认证"] --> L1["1. L1 Cache Check"]
    L1 -->|miss| SBM["2. search_by_module() (pgvector) → PostgreSQL WHERE module = ?"]
    SBM --> RER["3. DashScope Rerank"]
    RER --> CACHE["4. Cache + return"]

Data Models

Chunk (storage)

数据库存储的文档块。

字段类型说明
contentstring块文本内容
chunk_indexint块序号
levelint标题层级 (2=##, 3=###)
parent_headingstring父标题
heading_pathstring完整路径
sourcestring来源文档名
modulestring模块名
skill_pointslist[string]技能点列表
score_pointslist[string]评分要点
embeddingvector(1536)块级向量
bm25_scorefloatBM25 分数

RetrievedDocument (API response)

API 返回的检索结果。

content: str                    # 块文本内容
metadata: dict                  # 元数据
score: float                    # 相似度分数

Caching Strategy

层级组件缓存内容TTL说明
L1QueryResultCache完整检索结果5min相同 query 直接返回
L2PostgreSQL + pgvector向量 + BM25 数据持久化数据库层
L3BM25Retriever (in-memory)BM25 倒排索引进程内API 启动时从 DB 加载

Configuration

所有参数集中在 config.toml:

[retrieval]
top_k = 5               # 默认返回文档数
rerank_pool_size = 15   # Reranking 候选池大小

[matching]
module_match_threshold = 0.7  # 模块识别相似度阈值

[rrf]
k = 60                  # RRF 融合参数

[dashscope]
api_key = "${DASHSCOPE_API_KEY}"      # 环境变量
embedding_model = "text-embedding-v3"
reranker_model = "qwen-rerank"

[database]
url = "${ENTERPRISE_KB_DATABASE_URL}"  # 环境变量

Document Format

Markdown 文档需包含 YAML front-matter:

---
skill_points:
  - 用户登录
  - Token管理
module: 用户认证
score_points:
  - 基本: 是否理解登录流程原理
---
# 用户认证模块

## 功能规范

### 1. 登录流程
...

Front-matter 字段

字段类型说明
skill_pointslist[string]关联的技能点列表
modulestring所属模块名(唯一)
score_pointslist[string]评分要点

CLI Index Builder

# 全量重建
uv run python scripts/build_index.py --source ./enterprise-kb/

# 增量更新(目前为提示模式)
uv run python scripts/build_index.py --source ./enterprise-kb/ --incremental

Git Hook

将 hooks/post-commit 复制到 .git/hooks/post-commit 即可在每次提交后自动增量更新索引。

Sources

No external sources for this entry.

Related