确保 .env 文件中配置了 DeepSeek API Key:
NUXT_DEEPSEEK_API_KEY=sk-your_api_key_here首次使用或书籍有大量更新后,需要同步书籍向量:
curl -X POST http://localhost:4000/api/ai/embedding/sync \
-H "Content-Type: application/json" \
-d '{}'fetch('/api/ai/embedding/sync', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({}),
})
.then((r) => r.json())
.then(console.log);{
"success": true,
"message": "成功向量化 50 本书籍",
"synced": 50,
"skipped": 0,
"total": 50,
"duration": "15.23秒"
}点击搜索栏右侧的 ✨ AI 助手按钮,尝试以下查询:
关键词搜索(Phase 1):
- 输入:"有人工智能的书吗?"
- AI 使用:
query_books(keyword: "人工智能") - 结果:仅匹配书名/作者/摘要中包含"人工智能"字样的书
语义搜索(Phase 2a):
- 输入:"找一些讲AI和机器学习的书"
- AI 使用:
semantic_search_books(query: "AI 机器学习") - 结果:匹配内容相关的书,即使书名没有"AI"字样
- 例如:《深度学习》《Python数据科学》《算法导论》
关键词搜索:
- 输入:"有本书讲复利思维"
- 结果:只能找到摘要中明确提到"复利思维"的书
语义搜索:
- 输入:"记得有本书讲复利思维和指数增长"
- 结果:找到语义相关的书
- 《穷查理宝典》(提到复利概念)
- 《原则》(讲复合增长)
- 《思考,快与慢》(认知复利)
关键词搜索:
- 输入:"有类似《人类简史》的书吗?"
- 结果:只能找到书名/作者中包含"人类简史"或"尤瓦尔"的书
语义搜索:
- 输入:"类似《人类简史》的书"
- 结果:基于内容相似度推荐
- 《未来简史》(同作者续作)
- 《枪炮、病菌与钢铁》(历史宏观叙事)
- 《人类的故事》(历史通识)
用户:"有讲前端框架设计的书吗?"
AI工作流:
1. 先尝试 query_books(keyword: "前端框架")
→ 找到:《React设计原理》
2. 再用 semantic_search("前端框架设计")
→ 找到:《Vue.js设计与实现》《深入浅出Webpack》
(即使书名没有"前端框架")
AI回答:
"找到3本相关书籍:
1. 《React设计原理》- 深入讲解React架构
2. 《Vue.js设计与实现》- Vue框架源码解析
3. 《深入浅出Webpack》- 前端工程化工具"
用户:"有关于时间管理的书吗?"
关键词搜索:
- 仅找到标题含"时间管理"的书
语义搜索:
- 《番茄工作法图解》(专门讲时间管理)
- 《高效能人士的七个习惯》(第三章讲时间管理)
- 《精力管理》(相关概念)
- 《深度工作》(时间利用)
AI综合两种结果给出推荐
curl http://localhost:4000/api/ai/embedding/stats响应:
{
"success": true,
"stats": {
"total_books": 100,
"books_with_summary": 85,
"vectorized_books": 85,
"coverage": "85.0%",
"collection_name": "book_summaries"
}
}当书籍摘要有更新时:
curl -X POST http://localhost:4000/api/ai/embedding/sync \
-H "Content-Type: application/json" \
-d '{"force": true}'新增书籍时会自动向量化,无需手动操作。
1. 书籍录入
↓
2. 摘要 → DeepSeek Embedding → 向量(1024维数字数组)
↓
3. 存入 Chroma 向量库(本地 chroma_data/ 目录)
↓
4. 用户查询 → 查询向量化
↓
5. 相似度检索(余弦相似度)
↓
6. Top-K 结果 → AI生成回答
《React设计原理》的向量:[0.123, -0.456, 0.789, ...]
《Vue.js设计与实现》的向量:[0.118, -0.442, 0.801, ...]
相似度:0.92(非常相似)
《React设计原理》的向量:[0.123, -0.456, 0.789, ...]
《三国演义》的向量:[-0.892, 0.234, -0.156, ...]
相似度:0.12(不相似)
假设1000本书,平均每本摘要250字:
1000 × 250字 = 25万字 ≈ 500k tokens
500k × ¥0.0002/千tokens = ¥0.1
总成本:1毛钱
每次语义查询:
- 查询向量化:50 tokens × ¥0.0002/千 ≈ ¥0.00001
- AI生成回答:100 tokens × ¥0.0001/千 ≈ ¥0.00001
- 合计:¥0.00002/次
月成本(100次语义查询):¥0.002(2厘钱)
| 维度 | 关键词搜索 | 语义搜索 | 优势 |
|---|---|---|---|
| 匹配方式 | 精确文本匹配 | 语义相似度 | ✅ 理解意图 |
| 召回率 | 低(仅匹配关键词) | 高(理解内容) | ✅ 找到更多相关书 |
| 模糊查询 | ❌ 不支持 | ✅ 支持 | ✅ 容错性强 |
| 相似推荐 | ❌ 不支持 | ✅ 支持 | ✅ 发现新书 |
| 响应速度 | 快(0.5秒) | 稍慢(2秒) | |
| 成本 | 几乎免费 | 极低(¥0.002/月) | ✅ 性价比高 |
- 数据依赖:语义搜索依赖书籍摘要质量
- 初次同步:1000本书约需15-30秒
- 向量存储:本地存储,不会上传到云端
- 自动更新:新增书籍自动向量化
- 网络要求:需要网络访问 DeepSeek API
# 检查API Key
echo $NUXT_DEEPSEEK_API_KEY
# 检查网络
curl https://api.deepseek.com# 查看向量库统计
curl http://localhost:4000/api/ai/embedding/stats
# 如果vectorized_books为0,需要执行同步
curl -X POST http://localhost:4000/api/ai/embedding/sync# 确保chroma_data目录有写权限
chmod -R 755 chroma_data/体验完 Phase 2a 后,可以继续实现:
- Phase 2b:联网搜索(获取豆瓣书评、新书推荐)
- Phase 3:多轮对话上下文记忆
- Phase 4:本地 Embedding 模型(完全离线)