版本: v1.0 更新日期: 2026-04-03 AI引擎: Claude Sonnet 4.6
1. 基础使用
# 自动生成标签和分类
pnpm scan
# AutoTag会自动:
# ✅ 分析文章内容
# ✅ 生成相关标签
# ✅ 推荐文章分类
# ✅ 缓存结果供下次使用
2. 工作原理
写作文章 → 扫描内容 → AI分析 → 生成标签 → 缓存结果
3. 双重策略
PostWaver的AutoTag是一个智能的标签和分类生成系统,通过AI自动分析文章内容,生成准确的标签和分类。
智能分析:
高效缓存:
灵活配置:
PostWaver AutoTag
├── AI生成引擎 (Claude Sonnet 4.6)
│ ├── 内容分析
│ ├── 关键词提取
│ └── 标签生成
├── 规则生成引擎
│ ├── 关键词匹配
│ ├── 路径分析
│ └── 缓存查询
└── 缓存系统 (SQLite)
├── 标签存储
├── 使用统计
└── 关系管理
AI分析流程:
1. 提取文章纯文本内容
2. 移除Markdown语法和代码块
3. 取前3000字符作为分析样本
4. 调用Claude AI API分析
5. 生成标签、分类、描述等元数据
技术细节:
ANTHROPIC_API_KEY自动模式(推荐):
# AutoTag自动检测是否使用AI
pnpm scan
# 系统会:
# 1. 检查ANTHROPIC_API_KEY环境变量
# 2. 如果有API Key,使用AI生成
# 3. 如果没有,fallback到规则生成
强制AI模式:
# 强制使用AI生成
ANTHROPIC_API_KEY=your-key pnpm scan
# 或在代码中指定
pnpm scan --use-ai --api-key=your-key
设置API Key:
方法1 - 环境变量:
# 临时设置
export ANTHROPIC_API_KEY=your-api-key
# 永久设置(添加到 ~/.bashrc 或 ~/.zshrc)
echo 'export ANTHROPIC_API_KEY=your-api-key' >> ~/.bashrc
source ~/.bashrc
方法2 - .env文件:
# 在项目根目录创建 .env 文件
echo "ANTHROPIC_API_KEY=your-api-key" > .env
获取API Key:
配置常用标签:
// 在扫描时传入自定义标签库
const result = await generateFrontmatter(markdown, filepath, {
commonTags: [
'javascript', 'typescript', 'react', 'vue',
'node.js', 'frontend', 'backend', 'database',
'algorithm', 'tutorial', 'best-practices'
],
commonCategories: [
'前端开发', '后端开发', '数据库', '算法',
'工具使用', '最佳实践', '教程翻译'
]
})
标签库作用:
当AI不可用时,AutoTag会自动切换到规则模式:
规则分析流程:
1. 检查现有frontmatter
2. 从内容中提取关键词
3. 匹配预定义的技术关键词列表
4. 查询缓存中的历史标签
5. 根据文件路径推断分类
6. 合并生成最终标签
技术关键词列表:
const TECH_KEYWORDS = {
'javascript': ['javascript', 'js', 'node', 'npm'],
'typescript': ['typescript', 'ts', 'interface', 'type'],
'react': ['react', 'jsx', 'hooks', 'component'],
'vue': ['vue', 'vuetify', 'nuxt', 'vuex'],
'python': ['python', 'pip', 'django', 'flask'],
'java': ['java', 'spring', 'maven', 'gradle'],
'go': ['golang', 'go', 'goroutine', 'channel'],
'rust': ['rust', 'cargo', 'crates', 'ownership'],
'database': ['sql', 'mysql', 'postgresql', 'mongodb'],
'algorithm': ['算法', 'algorithm', '排序', '搜索'],
// ... 更多关键词
}
基于文件路径的分类:
content/posts/frontend/ → 分类: "前端开发"
content/posts/backend/ → 分类: "后端开发"
content/posts/database/ → 分类: "数据库"
content/posts/tutorial/ → 分类: "教程翻译"
实现逻辑:
function inferCategoryFromPath(filepath: string): string {
const pathParts = filepath.split('/')
const dirName = pathParts[pathParts.length - 2] // 倒数第二部分
const categoryMap = {
'frontend': '前端开发',
'backend': '后端开发',
'database': '数据库',
'tutorial': '教程翻译',
// ... 更多映射
}
return categoryMap[dirName] || '未分类'
}
标签缓存系统:
缓存查询示例:
// 查询相似文章的标签
const similarPosts = await findSimilarPosts(currentPost)
const cachedTags = similarPosts.flatMap(post => post.tags)
const recommendedTags = getMostFrequentTags(cachedTags)
标签缓存表:
CREATE TABLE tag_cache (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tag_name VARCHAR(100) NOT NULL,
category VARCHAR(50),
usage_count INTEGER DEFAULT 1,
last_used_at DATETIME DEFAULT CURRENT_TIMESTAMP,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE(tag_name)
);
关键词关联表:
CREATE TABLE tag_keywords (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tag_id INTEGER NOT NULL,
keyword VARCHAR(100) NOT NULL,
weight INTEGER DEFAULT 1,
FOREIGN KEY (tag_id) REFERENCES tag_cache(id)
);
自动缓存:
智能推荐:
// 基于缓存推荐标签
const recommendations = await getTagRecommendations({
limit: 10,
minUsage: 2,
categories: ['frontend', 'javascript']
})
缓存更新:
查看缓存统计:
# 查看标签使用统计
pnpm tag:stats
# 输出示例:
# 总标签数: 156
# 最常用标签:
# javascript (32次)
# react (28次)
# typescript (24次)
# tutorial (18次)
清理缓存:
# 清理未使用的标签
pnpm tag:cleanup --unused-days=30
# 重置整个缓存系统
pnpm tag:reset
场景:创建一篇新的技术文章
工作流:
1. 创建新文章
touch content/posts/new-article.md
2. 编写内容
# 使用喜欢的编辑器写作
3. 扫描生成标签
pnpm scan
4. 检查生成的frontmatter
---
title: "文章标题"
date: 2026-04-03
tags: [javascript, react, tutorial]
categories: [前端开发]
---
5. 发布文章
pnpm publish
场景:从其他平台导入大量文章
工作流:
1. 导入文章到 content/posts/
2. 批量生成标签
pnpm scan --batch
3. 检查和调整
# 查看生成结果
# 手动调整不准确的标签
4. 保存到缓存
# 确认后的标签会自动缓存
场景:优化文章标签系统
工作流:
1. 查看标签统计
pnpm tag:stats
2. 发现问题标签
# 如:标签不一致、拼写错误等
3. 批量替换标签
pnpm tag:rename --old="js" --new="javascript"
4. 清理无用标签
pnpm tag:cleanup --unused-days=90
好的标签特点:
标签示例:
✅ 好的标签:
- javascript
- react-hooks
- performance-optimization
- best-practices
❌ 不好的标签:
- js和react (太复杂)
- JavaScript (大小写不一致)
- 很好的文章 (无意义)
- 2023年4月3日 (不是技术标签)
分类层级建议:
一级分类(大类):
- 前端开发
- 后端开发
- 移动开发
- 数据科学
- 人工智能
- 工具使用
二级分类(细分):
前端开发/
├── React
├── Vue
├── Angular
└── 构建工具
提高AI生成质量:
// 具体的标签库比泛泛的更好
commonTags: ['react', 'vue', 'angular', 'svelte']
// 而不是
commonTags: ['frontend', 'framework']
// 定期更新标签库以适应新技术
commonTags: [
'next.js', // 新增
'remix', // 新增
'astro' // 新增
]
---
title: "清晰的文章标题"
---
## 概述
简短的文章概述...
## 技术栈
- React 18
- TypeScript
- Vite
## 详细内容
...
有结构的文章更容易被AI准确分析
定期维护:
# 每月执行一次
pnpm tag:cleanup --unused-days=30
pnpm tag:stats
标签规范化:
# 统一标签大小写
pnpm tag:normalize --case=lower
# 合并相似标签
pnpm tag:merge --source="js" --target="javascript"
Q: AI生成失败?
A: 检查以下几点:
ANTHROPIC_API_KEY 环境变量已设置Q: 标签不准确?
A: 尝试以下方法:
Q: 缓存不生效?
A: 解决方案:
pnpm tag:rebuildQ: 生成速度慢?
A: 优化建议:
启用详细日志:
# 启用调试模式
DEBUG=* pnpm scan
# 只看AutoTag相关日志
DEBUG=autotag:* pnpm scan
查看AI请求内容:
// 在代码中添加日志
console.log('AI Prompt:', prompt)
console.log('AI Response:', response)
测试API连接:
# 测试Anthropic API连接
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'
generateFrontmatter
async function generateFrontmatter(
markdown: string,
filepath: string,
options?: FrontmatterGeneratorOptions
): Promise<FrontmatterGenerationResult>
// 使用示例
const result = await generateFrontmatter(markdown, filepath, {
useAI: true,
apiKey: 'sk-ant-...',
commonTags: ['react', 'typescript'],
commonCategories: ['前端开发', 'React']
})
getTagCacheManager
function getTagCacheManager(): TagCacheManager
// 使用示例
const manager = getTagCacheManager()
await manager.saveTag('react', 'frontend', ['jsx', 'components'])
const tags = await manager.getRecommendedTags(10)
TagCacheManager API:
class TagCacheManager {
// 保存标签
async saveTag(name: string, category?: string, keywords?: string[]): Promise<void>
// 查询标签
async getTag(name: string): Promise<Tag | null>
// 获取推荐标签
async getRecommendedTags(limit?: number, category?: string): Promise<string[]>
// 更新使用计数
async incrementUsage(tagName: string): Promise<void>
// 清理未使用的标签
async cleanupUnused(days: number): Promise<number>
// 获取统计信息
async getStatistics(): Promise<TagStatistics>
}
AI生成性能:
规则生成性能:
缓存查询性能:
减少API调用:
# 使用缓存减少重复调用
pnpm scan --use-cache
# 批量处理共享AI分析结果
pnpm scan --batch --shared-analysis
异步处理:
// 异步生成标签,不阻塞主流程
generateFrontmatter(markdown, filepath)
.then(result => {
// 处理结果
})
.catch(error => {
// fallback到规则模式
})
文档版本: v1.0 最后更新: 2026-04-03 维护者: PostWaver项目