algonotes_rag/docs/ARCHITECTURE.md

8.3 KiB
Raw Permalink Blame History

🏗️ AlgoNotes RAG 架构文档

📁 项目目录结构

algonotes_rag/
├── .env                          # 环境变量(不提交 Git
├── .env.example                  # 环境变量模板
├── .gitignore
├── .python-version               # Python 版本锁定
├── LICENSE                       # MIT 许可
├── pyproject.toml                # 项目元数据 + 依赖uv 管理)
├── README.md                     # 项目介绍与快速开始
├── config.toml                   # 主配置文件TOML + ${VAR} 语法)
│
├── docs/                         # 文档
│   ├── ARCHITECTURE.md           # 架构说明(宏观)
│   ├── CONFIG.md                 # 配置说明
│   ├── ROADMAP.md                # 项目路线图
│   ├── STORE.md                  # 三层存储详解(文件/关系/向量)
│   ├── RAG.md                    # RAG 查询管线详解
│   ├── cli/                      # CLI 命令行工具文档
│   │   ├── README.md             # CLI 概览
│   │   ├── ingest.md             # 导入命令(增)
│   │   ├── update.md             # 更新命令(改)
│   │   ├── delete.md             # 删除命令(删)
│   │   └── query.md              # 查询命令(查)
│   └── mcp/                      # MCP Server 文档
│       ├── README.md             # MCP 概览
│       ├── ingest.md             # 导入工具
│       ├── update.md             # 更新工具
│       ├── delete.md             # 删除工具
│       ├── search.md             # 搜索工具
│       ├── metadata.md           # 元数据工具
│       └── export.md             # 导出工具
│
├── logs/                         # 日志输出目录(自动生成)
│
├── data/                         # 数据存储(自动生成)
│   ├── files/                    # 原始笔记文件(.md 保存于此)
│   ├── sql_db/                   # 关系型数据库SQLite记录笔记索引信息
│   └── chroma_db/                # Chroma 向量库持久化
│
├── prompts/                      # LLM Prompt 模板
│   ├── agent_system.md           # RAG Agent 系统提示词
│   ├── clean.md                  # 文本清洗模板
│   └── tagger.md                 # 标签提取模板
│
├── src/                          # 核心源码
│   ├── __init__.py
│   │
│   ├── config.py                 # Pydantic 配置模型 + 环境变量替换
│   ├── logger.py                 # 日志系统JSON Lines 格式)
│   │
│   ├── ingestion/                # 数据摄入管线
│   │   ├── __init__.py
│   │   ├── loader.py             # 文档加载Web / 本地文件)
│   │   ├── cleaner.py            # LLM 清洗网页文本
│   │   ├── splitter.py           # 分块策略(标题 + 递归)
│   │   └── tagger.py             # 给文档打标签,存储在 sql 中
│   │
│   ├── store/                    # 三层存储
│   │   ├── __init__.py
│   │   ├── sql/                  # SQL schema 与查询模板
│   │   │   ├── schema.sql        # 笔记元数据表 DDL
│   │   │   └── queries.sql       # 命名 SQL 查询模板(参考用)
│   │   ├── file_store.py         # 文件层:原始 .md 笔记的保存与读取
│   │   ├── sql_store.py          # 关系层:笔记索引、关键词、上传时间等
│   │   ├── vector_store.py       # 向量层Chroma 向量库封装
│   │   └── vector_metadata.py    # Metadata 规范与校验
│   │
│   ├── rag/                      # RAG 查询管线
│   │   ├── __init__.py
│   │   ├── agent.py              # RAG Agent含查询理解 Prompt + 工具编排)
│   │   ├── retriever.py          # 内部工具:检索器(向量 + SQL
│   │   └── generation.py         # 内部工具:重排序 + 答案生成 + 溯源引用
│   │
│   ├── api/                      # API 客户端层
│   │   ├── __init__.py
│   │   ├── llm_client.py         # LLM 客户端封装
│   │   ├── embedding_client.py   # Embedding 客户端封装
│   │   └── reranker_client.py    # Reranker 客户端封装
│   │
│   └── mcp/                      # MCP 服务器层
│       ├── __init__.py
│       ├── __main__.py           # python -m src.mcp 入口
│       ├── server.py             # MCP Server 核心(组件初始化)
│       └── tools.py              # 工具实现(薄包装层)
│
├── scripts/                      # CLI 入口脚本
│   ├── cli.py                    # algonotes 统一入口
│   ├── ingest.py                 # 导入笔记
│   ├── update.py                 # 更新笔记
│   ├── delete.py                 # 删除笔记
│   ├── query.py                  # 查询笔记
│   ├── rag.py                    # RAG 问答
│   └── chat.py                   # 交互式问答

🔧 模块依赖关系

graph TD
    subgraph frontend[前端入口]
        cli[cli.py<br/>统一入口]
        rag[rag.py]
        chat[chat.py]
        mcp_server[MCPServer<br/>server.py]
        mcp_tools[MCP Tools<br/>tools.py]
        mcp_server --> mcp_tools
    end

    subgraph ingestion[src/ingestion]
        loader[loader.py]
        cleaner[cleaner.py]
        splitter[splitter.py]
        loader --> cleaner --> splitter
    end

    subgraph rag[src/rag]
        rag_agent[agent.py<br/>RAG Agent<br/>内嵌查询理解 Prompt]
        retriever[retriever.py<br/>内部工具]
        generation[generation.py<br/>内部工具]
        rag_agent --> retriever
        rag_agent --> generation
    end

    subgraph store[src/store]
        fs[file_store.py<br/>原始 .md 文件]
        ss[sql_store.py<br/>笔记索引]
        vs[vector_store.py<br/>Chroma 向量]
    end

    subgraph data[data/]
        df[data/files/]
        ds[data/sql_db/]
        dc[data/chroma_db/]
    end

    subgraph api[src/api]
        llm[llm_client.py]
        emb[embedding_client.py]
        rrk[reranker_client.py]
    end

    config[src/config.py + config.toml]

    cli --> ingestion
    cli --> rag
    chat --> rag
    mcp_tools --> ingestion
    mcp_tools --> rag
    ingestion --> store
    rag --> store
    fs --> df
    ss --> ds
    vs --> dc
    store --> api
    api --> config

📦 各模块职责

模块 文件 职责
配置管理 config.toml + src/config.py Pydantic 模型校验,${VAR} 语法引用环境变量
日志系统 src/logger.py JSON Lines 格式,必含 timestamp/level/logger/message,可选 latency_ms/tokens
文件存储 src/store/file_store.py 原始 .md 笔记的保存、读取、删除
关系存储 src/store/sql_store.py SQLite 笔记索引(文件名、上传时间、关键词、文件路径等)
向量存储 src/store/vector_store.py Chroma 封装metadata 扁平化校验
数据摄入 src/ingestion/ 文档加载 → LLM 清洗 → 标题+递归分块 → 入库
RAG Agent src/rag/agent.py 内嵌查询理解 Prompt编排检索与生成工具
检索器 src/rag/retriever.py 内部工具:向量检索 + SQL 过滤
答案生成 src/rag/generation.py 内部工具:重排序 + 竞赛语境生成 + 溯源引用
RAG 问答 scripts/rag.py 单次 RAG 问答,直接输出答案
MCP Server src/mcp/ 暴露 ingest/update/delete/query 四类工具MCP 协议对外服务
LLM 客户端 src/api/llm_client.py OpenAI 兼容接口的统一调用层
Embedding 客户端 src/api/embedding_client.py Embedding 模型调用封装
Reranker 客户端 src/api/reranker_client.py Reranker 模型调用封装

📚 相关文档