知识库2

好,我用最清晰的方式,把整个知识库架构从头到尾讲一遍,配合 Mermaid 图,让你一次看懂全貌。
 
---
 
一、整体架构全景图
 
```mermaid
flowchart TB
    subgraph User["👤 用户层"]
        U[用户提问]
    end
 
    subgraph OpenCode["🤖 OpenCode 层"]
        OA[OpenCode Agent<br/>理解意图/决策]
        SK[Skill 技能<br/>定义检索流程]
        MCP[MCP Server<br/>工具注册与调用]
    end
 
    subgraph Knowledge["📚 知识库核心层"]
        direction TB
        Parser[Parser 解析器<br/>解析各类文件]
        DB[(PostgreSQL<br/>主存储 + 索引)]
        FS[文件系统<br/>原始文件存储]
        Cache[缓存文件<br/>加速启动]
    end
 
    subgraph Sources["📁 数据源层"]
        Bug[🐛 Bug 报告<br/>MD + 图片]
        Spec[📄 Spec 文档<br/>PDF + 图片]
        Firm[⚙️ 固件代码<br/>源码 + 二进制]
        Other[➕ 其他数据源<br/>日志/测试用例]
    end
 
    U --> OA
    OA --> SK
    SK --> MCP
    MCP --> DB
    MCP --> Cache
    DB --> FS
    Parser --> FS
    Parser --> DB
    FS --> Bug
    FS --> Spec
    FS --> Firm
    FS --> Other
```
 
---
 
二、分层详解
 
第一层:数据源层(原始材料)
 
```mermaid
flowchart LR
    subgraph S1["🐛 Bug 源"]
        B1[report.md<br/>标题/根因/方案]
        B2[images/<br/>VT图/截图]
    end
    
    subgraph S2["📄 Spec 源"]
        S1_pdf[auth-spec.pdf<br/>规范文档]
        S2_pdf[payment-spec.pdf<br/>接口规范]
    end
    
    subgraph S3["⚙️ 固件源"]
        F1[token.c<br/>源码文件]
        F2[firmware.bin<br/>二进制固件]
    end
    
    subgraph S4["📂 其他源"]
        O1[日志文件]
        O2[测试用例]
    end
```
 
作用:存放所有原始知识材料,是知识库的“原材料仓库”。
 
关键点:
 
· Bug 报告是 Markdown 格式,包含 Frontmatter 元数据和正文
· Spec 是 PDF 格式,包含规范条文和图表
· 固件包括源码(.c/.h)和二进制(.bin/.elf)
· 每种数据源都有自己的目录结构
 
---
 
第二层:解析器层(翻译官)
 
```mermaid
flowchart TB
    subgraph P["解析器工厂"]
        BP[Bug Parser<br/>解析 MD]
        SP[Spec Parser<br/>解析 PDF]
        FP[Firmware Parser<br/>解析源码/二进制]
        OP[其他 Parser<br/>扩展用]
    end
    
    subgraph O["统一输出格式"]
        O1[source_type: bug/spec/firmware]
        O2[title, content, summary]
        O3[module, version, severity]
        O4[error_codes, keywords, log_pattern]
        O5[root_cause, solution]
        O6[metadata JSONB]
        O7[attachments]
    end
    
    BP --> O
    SP --> O
    FP --> O
    OP --> O
```
 
作用:把各种格式的原始文件,翻译成统一的结构化数据。
 
关键点:
 
· 每种数据源有独立的 Parser
· 所有 Parser 输出相同的格式(统一知识条目)
· Bug Parser 提取 Frontmatter + 正文章节
· Spec Parser 提取 PDF 全文 + 图片
· Firmware Parser 提取函数、调用关系、错误字符串
 
---
 
第三层:存储层(PostgreSQL + 文件系统 + 缓存)
 
```mermaid
flowchart TB
    subgraph FS["💾 文件系统"]
        F1[bugs/<br/>原始 MD + 图片]
        F2[specs/<br/>原始 PDF]
        F3[firmware/<br/>源码 + 二进制]
        F4[.skills/<br/>Skill 定义]
        F5[.metadata/<br/>缓存文件]
        F6[cache/<br/>PDF 解析缓存]
    end
    
    subgraph DB["🗄️ PostgreSQL"]
        D1[(knowledge_entries<br/>主表:所有条目元数据)]
        D2[(knowledge_embeddings<br/>向量表:语义指纹)]
        D3[(knowledge_attachments<br/>附件表:图片元数据)]
        D4[(knowledge_relations<br/>关联表:知识图谱)]
        D5[(data_sources<br/>配置表:数据源管理)]
    end
    
    F1 -.->|解析后写入| D1
    F2 -.->|解析后写入| D1
    F3 -.->|解析后写入| D1
    D1 -->|生成向量| D2
    D1 -->|关联图片| D3
    D1 -->|建立关系| D4
    D5 -->|配置 Parser| D1
    D1 -.->|导出快照| F5
```
 
作用:持久化存储所有知识和索引,是知识库的“记忆中枢”。
 
PostgreSQL 五张表详解:
 
表名 存储内容 作用
knowledge_entries 所有条目的元数据(标题、内容、根因、方案) 主表,所有查询的入口
knowledge_embeddings 768维向量(语义指纹) 语义检索的核心
knowledge_attachments 图片路径 + OCR 文字 + 描述 让 AI 能“看懂”图片
knowledge_relations 条目间的关联关系 知识图谱,跨源关联
data_sources 数据源配置(Parser 模块名) 系统启动时加载
 
文件系统目录:
 
目录 内容 作用
bugs/ MD + 图片 人可读的 Bug 报告
specs/ PDF 文件 原始规范文档
firmware/ 源码 + 二进制 固件代码
.skills/ SKILL.md 告诉 OpenCode 怎么处理
.metadata/ index.json + embeddings.npy 加速 MCP Server 启动
cache/ PDF 解析缓存 避免重复解析 PDF
 
---
 
第四层:检索层(粗索引体系)
 
```mermaid
flowchart TB
    subgraph Index["🔍 粗索引体系"]
        direction TB
        K[关键词索引<br/>GIN 索引]
        E[错误码索引<br/>GIN 索引]
        F[全文检索索引<br/>GIN 索引]
        V[向量索引<br/>IVFFlat 索引]
        C[缓存文件<br/>JSON + NumPy]
    end
    
    subgraph Query["📝 查询方式"]
        Q1["错误码精确匹配<br/>WHERE 'ETIMEDOUT' = ANY(error_codes)"]
        Q2["关键词模糊匹配<br/>WHERE keywords && ARRAY['timeout']"]
        Q3["全文搜索<br/>WHERE search_document @@ 'timeout'"]
        Q4["语义相似度<br/>ORDER BY embedding <=> query_vec"]
        Q5["内存计算<br/>从缓存加载后直接算"]
    end
    
    K --> Q2
    E --> Q1
    F --> Q3
    V --> Q4
    C --> Q5
```
 
作用:提供多种快速检索入口,让查询在毫秒级完成。
 
粗索引的五种实现:
 
索引类型 存储位置 技术 查询场景
关键词索引 PostgreSQL GIN 用户输入 "timeout redis"
错误码索引 PostgreSQL GIN 日志包含 "ETIMEDOUT"
全文索引 PostgreSQL GIN 用户输入 "连接超时"
向量索引 PostgreSQL IVFFlat "语义上相似的内容"
缓存文件 .metadata/ JSON + NumPy MCP Server 启动加速
 
---
 
第五层:OpenCode 接入层(Skill + MCP)
 
```mermaid
flowchart TB
    subgraph OC["OpenCode 调用链路"]
        U[用户提问]
        A[Agent 理解意图]
        S[选择 Skill]
        T[调用 MCP Tool]
        R[返回结果]
    end
    
    subgraph Skill["Skill 定义"]
        S1[bug-analyzer<br/>处理 Bug 报告]
        S2[spec-analyzer<br/>处理 Spec 文档]
        S3[firmware-analyzer<br/>处理固件代码]
        S4[universal-search<br/>跨源检索]
    end
    
    subgraph MCP["MCP Server 工具"]
        M1[search_knowledge<br/>统一检索入口]
        M2[get_detail<br/>获取完整详情]
        M3[关联查询<br/>知识图谱]
    end
    
    U --> A
    A --> S
    S --> T
    T --> M1
    M1 --> DB
    M1 --> Cache
    DB --> R
    R --> U
```
 
作用:让 OpenCode 能够调用知识库,实现“提问→检索→回答”的闭环。
 
调用关系:
 
组件 作用 调用方式
Skill 定义检索流程和顺序 Agent 根据用户意图自动选择
MCP Tool 暴露具体检索能力 Skill 内部调用 search_knowledge
MCP Server 连接 PostgreSQL 和缓存 执行 SQL 查询,返回结构化结果
OpenCode Agent 理解用户意图,调度 Skill 用户提问触发
 
---
 
三、完整数据流(从写入到检索)
 
```mermaid
flowchart LR
    subgraph Write["📝 写入流程"]
        W1[新文件<br/>MD/PDF/源码]
        W2[Parser 解析<br/>提取结构化数据]
        W3[写入 PostgreSQL<br/>主表 + 向量表]
        W4[导出缓存<br/>.metadata/]
    end
    
    subgraph Read["🔍 检索流程"]
        R1[用户提问<br/>"连接超时"]
        R2[OpenCode Agent<br/>理解意图]
        R3[选择 Skill<br/>bug-analyzer]
        R4[调用 MCP Tool<br/>search_knowledge]
        R5[查询 PostgreSQL<br/>向量 + 关键词]
        R6[返回匹配结果<br/>BUG-001 根因+方案]
    end
    
    W1 --> W2 --> W3 --> W4
    R1 --> R2 --> R3 --> R4 --> R5 --> R6
```
 
---
 
四、各组件调用关系总结
 
```mermaid
flowchart TB
    subgraph Legend["调用关系说明"]
        L1["──▶ 数据流"]
        L2["─ ─▶ 配置/导出"]
        L3["◀──▶ 双向交互"]
    end
    
    subgraph Main["核心组件"]
        U[用户]
        OC[OpenCode Agent]
        SK[Skill]
        MC[MCP Server]
        DB[(PostgreSQL)]
        FS[文件系统]
        CA[缓存文件]
        PA[Parser 解析器]
        SRC[数据源文件]
    end
    
    U -->|提问| OC
    OC -->|加载| SK
    SK -->|调用工具| MC
    MC -->|SQL查询| DB
    MC -->|读取| CA
    DB <-->|读写| FS
    PA -->|写入| DB
    PA -->|读取| SRC
    PA -->|生成| CA
    DB -.->|导出| CA
    SRC -->|存储| FS
```
 
---
 
五、架构的核心设计原则
 
原则 说明
读/写分离 写入走 Parser → PostgreSQL,读取走 MCP → PostgreSQL/缓存
统一模型 所有数据源存入同一张表,通过 source_type 区分
分层索引 关键词索引 + 全文索引 + 向量索引 + 缓存文件,多路召回
解耦设计 文件系统存原始文件,PostgreSQL 存元数据,互不依赖
可扩展性 新增数据源只需写新 Parser + 新 Skill,核心架构不变
加速策略 热数据(向量)存 PostgreSQL,热启动(缓存)存 .metadata/
 
---
 
六、一句话总结整个架构
 
文件系统存原始材料,Parser 翻译成统一格式,PostgreSQL 建立多层索引(关键词+全文+向量),缓存文件加速启动,MCP Server 暴露检索工具,OpenCode 通过 Skill 调用并返回结果。
 
这样整个知识库就形成了 “原始文件 → 解析 → 索引 → 检索 → 回答” 的完整闭环。😊
posted @ 2026-06-29 14:29  朵朵奇fa  阅读(7)  评论(0)    收藏  举报