2026/04/24

个人博客2.0

来自本地 Obsidian 知识库同步

前置技术

核心技术栈:

  • 全栈框架:Astro
  • 向量数据库:LanceDB [核心知识库/长期记忆]
  • 边缘状态库:Upstash for Redis [高频交互承载/留言缓冲池]
  • AI模型层:BAAI/bge-m3[向量分析],glm-4.5-air[AI搜索,AI审核],glm-5.1[AI辅助开发]

一、框架概述

1.1 核心理念

**BlogX_x 是一个现代化的个人数字花园系统,遵循以下核心理念:

  • VibeCoding - 注重用户体验和交互感受,极简黑白美学

  • SpecCoding - 严格的数据结构定义和类型约束

  • Harness Design - 完整的工具链和自动化流程

1.2 技术栈架构


┌─────────────────────────────────────────────────────────┐

│                    用户交互层                            │

│  ┌──────────────┬──────────────┬──────────────┐         │

│  │   首页       │   文章详情    │   知识库      │         │

│  │   (AI搜索)   │   (内容展示)  │   (浏览)      │         │

│  └──────────────┴──────────────┴──────────────┘         │

└─────────────────────────────────────────────────────────┘



┌─────────────────────────────────────────────────────────┐

│                    应用层 (Astro)                        │

│  ┌──────────────┬──────────────┬──────────────┐         │

│  │   页面路由    │   API 端点   │   组件库      │         │

│  │   (SSR)      │   (后端)     │   (React)     │         │

│  └──────────────┴──────────────┴──────────────┘         │

└─────────────────────────────────────────────────────────┘



┌─────────────────────────────────────────────────────────┐

│                    数据层                               │

│  ┌──────────────┬──────────────┬──────────────┐         │

│  │  LanceDB     │   Vercel KV  │   Markdown   │         │

│  │  (向量DB)    │   (缓存)      │   (源文件)   │         │

│  └──────────────┴──────────────┴──────────────┘         │

└─────────────────────────────────────────────────────────┘



┌─────────────────────────────────────────────────────────┐

│                    外部服务                              │

│  ┌──────────────┬──────────────┬──────────────┐         │

│  │   GLM AI     │  SiliconFlow │   Obsidian   │         │

│  │  (对话/审核) │  (向量嵌入)   │   (知识源)   │          │

│  └──────────────┴──────────────┴──────────────┘         │

└─────────────────────────────────────────────────────────┘

二、架构设计详解

2.1 数据流处理管道

2.1.1 Obsidian 同步流程


Obsidian Vault



sync-obsidian-kb.mjs (脚本)

    ├─ 扫描 .md 文件

    ├─ 解析 frontmatter

    ├─ 转换 wikilinks → markdown links

    ├─ 计算 content hash

    └─ 增量同步到 src/content/knowledge-base/



Astro Content Collections

    ├─ 验证 schema

    ├─ 生成类型定义

    └─ 构建内容索引



LanceDB 向量索引

    ├─ 提取文本内容

    ├─ 调用 SiliconFlow 生成向量

    ├─ 存储到 LanceDB

    └─ 建立相似度索引

2.1.2 AI 搜索流程


用户输入查询



前端校验 + 频率限制



POST /api/ai-search

    ├─ 服务端频率限制检查

    ├─ 调用 SiliconFlow 生成查询向量

    ├─ LanceDB 相似度检索 (top-10)

    ├─ 调用 GLM-4.5-AIR 生成回答

    └─ 返回 { answer, results }



前端渲染

    ├─ 显示 AI 生成的回答

    ├─ 展示相关文章卡片

    └─ 提供跳转链接

2.2 功能模块详解

2.2.1 AI 搜索模块

文件位置: src/pages/api/ai-search.ts

核心功能:

  • 语义向量检索 (LanceDB)

  • AI 对话生成 (GLM-4.5-AIR)

  • 频率限制 (IP + 全局)

  • 结果排序和去重

API 接口:


POST /api/ai-search

Content-Type: application/json

{

  "query": "如何优化 Astro 性能?",

  "limit": 10

}

Response:

{

  "answer": "AI 生成的对话式回答...",

  "results": [

    {

      "id": "post-1",

      "title": "Astro 性能优化指南",

      "description": "...",

      "url": "/posts/astro-performance",

      "similarity": 0.92

    }

  ],

  "timestamp": 1713950400000

}

频率限制策略:

  • 前端: 30秒内最多1次请求

  • IP级: 5分钟内最多3次请求 (滑动窗口)

  • 全局: 每分钟最多50次请求 (滑动窗口)

2.2.2 知识图谱模块

文件位置: src/components/KnowledgeGraph.tsx

核心功能:

  • 自动构建内容关系网络

  • 基于向量相似度的连接

  • 交互式可视化展示

  • 响应式适配

数据结构:


interface GraphNode {

  id: string;

  label: string;

  type: 'post' | 'knowledge' | 'note';

  url: string;

  size: number; // 基于相关度

}

interface GraphLink {

  source: string;

  target: string;

  similarity: number; // 0-1

}

interface GraphData {

  nodes: GraphNode[];

  links: GraphLink[];

}

相似度阈值: 0.7 (可配置)

最大连接数: 每个节点最多5条边

响应式: 手机端 (< 768px) 隐藏图谱

2.2.3 留言功能模块

文件位置:

  • src/components/FunMessages.tsx - 趣味留言墙

  • src/components/IdeaBox.tsx - 点子收集箱

趣味留言墙:

  • 用户提交 → AI 审核 → 自动展示

  • 水平飘动动画 (15秒)

  • 最多同时展示 20 条

  • 5秒轮询更新

点子收集箱:

  • 用户提交 → 待审核 → 管理员审核 → 展示

  • 支持实现状态标记 (✓ / ○)

  • 管理员后台管理

  • 支持备注功能

2.2.4 MCP 服务模块

文件位置:

  • scripts/kb-mcp-server.mjs - stdio 模式

  • scripts/kb-mcp-http-server.mjs - HTTP 模式

支持的工具:


// 搜索知识库

{

  "name": "search_knowledge_base",

  "description": "搜索知识库内容",

  "inputSchema": {

    "type": "object",

    "properties": {

      "query": { "type": "string" },

      "limit": { "type": "number" }

    }

  }

}

// 读取条目

{

  "name": "read_entry",

  "description": "读取特定知识库条目",

  "inputSchema": {

    "type": "object",

    "properties": {

      "path": { "type": "string" }

    }

  }

}

// 列表条目

{

  "name": "list_entries",

  "description": "列出所有知识库条目",

  "inputSchema": {

    "type": "object",

    "properties": {

      "category": { "type": "string" }

    }

  }

}

三、开发流程与最佳实践

3.1 内容创建流程

3.1.1 创建博客文章


# 1. 在 src/content/posts/ 创建 markdown 文件

touch src/content/posts/my-article.md

# 2. 添加 frontmatter

---

title: "我的文章标题"

date: 2026-04-24

description: "文章简短描述,用于 SEO 和列表展示"

tags: ["astro", "前端", "性能"]

coverImage: "/images/cover.jpg"

isDraft: false

---

# 文章内容

...

# 3. 构建时自动生成路由

# 访问: /posts/my-article

3.1.2 同步 Obsidian 知识库


# 1. 配置 .env

OBSIDIAN_KB_PATH="/path/to/obsidian/vault"

LOCAL_KB_CONTENT_DIR="src/content/knowledge-base"

# 2. 运行同步脚本

npm run sync-kb

# 3. 检查变更

git diff src/content/knowledge-base/

# 4. 暂存并提交

npm run sync-kb:stage

git commit -m "chore: sync obsidian knowledge base"

3.2 向量索引管理

3.2.1 初始化向量数据库


# 1. 配置 LanceDB 环境变量

LANCEDB_URI="db://your-db-uri"

LANCEDB_API_KEY="sk_your-api-key"

SF_TOKEN="hf_your-siliconflow-token"

# 2. 初始化索引

npm run init-db

# 3. 脚本流程

# - 读取所有 markdown 文件

# - 提取文本内容

# - 调用 SiliconFlow 生成向量 (1024维)

# - 存储到 LanceDB

# - 建立相似度索引

3.2.2 增量更新


# 自动检测变更

npm run init-db

# 脚本会:

# 1. 计算现有文件的 hash

# 2. 对比 LanceDB 中的记录

# 3. 仅更新变更的文件

# 4. 删除已移除的条目

3.3 部署流程

3.3.1 本地构建验证


# 1. 构建生产版本

npm run build

# 2. 预览构建结果

npm run preview

# 3. 检查构建产物

ls -la .vercel/output/

3.3.2 Vercel 部署


# 1. 连接 GitHub 仓库

# 2. 配置环境变量

#    - LANCEDB_URI

#    - LANCEDB_API_KEY

#    - SF_TOKEN

#    - GLM_API_KEY

#    - OBSIDIAN_KB_PATH (可选)

# 3. 自动部署

# - 推送到 main 分支

# - Vercel 自动触发构建

# - 部署到生产环境

# 4. 验证部署

# - 检查 https://your-domain.vercel.app

# - 测试 AI 搜索功能

# - 验证知识图谱加载