Skip to content

为VitePress博客添加AI标签分类功能

随着博客文章增多,手动管理分类和标签变得繁琐,需要实现自动化解决方案

工作流程

文章创建 → AI分析 → 分类标签生成 → 文章更新 → 构建部署

技术实现

配置文件 (ai-config.yaml)

yaml
ai:
  enabled: true
  provider: "gemini"
  model: "gemini-1.5-flash"
  api_key: "${GEMINI_API_KEY}"
  base_url: "${GEMINI_BASE_URL}"
  
  prompts:
    category_analysis: |
      请分析以下文章内容,为其选择最合适的分类
      可选分类:Development, System, Blockchain, Security, Trading, Others
      请只返回一个分类名称,不要解释
      
    tag_analysis: |
      请分析以下文章内容,为其生成3-8个合适的标签
      要求:英文小写、连字符连接、技术栈优先
      请只返回JSON格式的标签数组

AI分析核心代码

javascript
async function analyzePost(postPath) {
  const content = fs.readFileSync(postPath, 'utf-8');
  const { data, content: markdownContent } = matter(content);
  
  // 检查是否已分析
  if (data.ai_edited === true) return null;
  
  // 分析分类
  const category = await analyzeCategory(data.title, markdownContent);
  
  // 分析标签
  const tags = await analyzeTags(data.title, markdownContent);
  
  return {
    category,
    tags: validateTags(tags),
    confidence: 0.9
  };
}

VitePress集成

修改serverUtils.ts,在构建时检查环境变量:

typescript
async function getPosts(pageSize: number) {
  const enableAIAnalysis = process.env.ENABLE_AI_ANALYSIS === 'true';
  
  if (enableAIAnalysis) {
    console.log('🤖 启用AI分析模式...');
    await batchAnalyzePosts();
  }
  // ... 继续处理文章
}

环境变量 (.env)

bash
GEMINI_API_KEY=your_api_key_here
GEMINI_BASE_URL=https://your-proxy.com/proxy/gemini
ENABLE_AI_ANALYSIS=false

使用方法

bash
# 普通开发(无AI分析)
bun run dev

# AI分析开发模式
bun run dev:ai

# 普通构建
bun run build

# AI分析构建
bun run build:ai

# 查看分析状态
bun run ai:status

# 手动分析文章
bun run ai:analyze

# 重置分析状态
bun run ai:reset