Skip to content

Latest commit

 

History

History
287 lines (205 loc) · 6.76 KB

File metadata and controls

287 lines (205 loc) · 6.76 KB

RAG 语义搜索使用指南

快速开始

1. 配置 API Key

确保 .env 文件中配置了 DeepSeek API Key:

NUXT_DEEPSEEK_API_KEY=sk-your_api_key_here

2. 初始化向量库

首次使用或书籍有大量更新后,需要同步书籍向量:

方式1:使用接口

curl -X POST http://localhost:4000/api/ai/embedding/sync \
  -H "Content-Type: application/json" \
  -d '{}'

方式2:在浏览器控制台

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秒"
}

3. 使用 AI 助手

点击搜索栏右侧的 ✨ AI 助手按钮,尝试以下查询:

查询示例对比

普通关键词搜索 vs 语义搜索

示例1:查找主题相关书籍

关键词搜索(Phase 1):

  • 输入:"有人工智能的书吗?"
  • AI 使用:query_books(keyword: "人工智能")
  • 结果:仅匹配书名/作者/摘要中包含"人工智能"字样的书

语义搜索(Phase 2a):

  • 输入:"找一些讲AI和机器学习的书"
  • AI 使用:semantic_search_books(query: "AI 机器学习")
  • 结果:匹配内容相关的书,即使书名没有"AI"字样
    • 例如:《深度学习》《Python数据科学》《算法导论》

示例2:模糊记忆搜索

关键词搜索

  • 输入:"有本书讲复利思维"
  • 结果:只能找到摘要中明确提到"复利思维"的书

语义搜索

  • 输入:"记得有本书讲复利思维和指数增长"
  • 结果:找到语义相关的书
    • 《穷查理宝典》(提到复利概念)
    • 《原则》(讲复合增长)
    • 《思考,快与慢》(认知复利)

示例3:相似书籍推荐

关键词搜索

  • 输入:"有类似《人类简史》的书吗?"
  • 结果:只能找到书名/作者中包含"人类简史"或"尤瓦尔"的书

语义搜索

  • 输入:"类似《人类简史》的书"
  • 结果:基于内容相似度推荐
    • 《未来简史》(同作者续作)
    • 《枪炮、病菌与钢铁》(历史宏观叙事)
    • 《人类的故事》(历史通识)

实际测试

测试1:主题搜索

用户:"有讲前端框架设计的书吗?"

AI工作流:
1. 先尝试 query_books(keyword: "前端框架")
   → 找到:《React设计原理》

2. 再用 semantic_search("前端框架设计")
   → 找到:《Vue.js设计与实现》《深入浅出Webpack》
   (即使书名没有"前端框架")

AI回答:
"找到3本相关书籍:
 1. 《React设计原理》- 深入讲解React架构
 2. 《Vue.js设计与实现》- Vue框架源码解析
 3. 《深入浅出Webpack》- 前端工程化工具"

测试2:抽象概念搜索

用户:"有关于时间管理的书吗?"

关键词搜索:
- 仅找到标题含"时间管理"的书

语义搜索:
- 《番茄工作法图解》(专门讲时间管理)
- 《高效能人士的七个习惯》(第三章讲时间管理)
- 《精力管理》(相关概念)
- 《深度工作》(时间利用)

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/月) ✅ 性价比高

注意事项

  1. 数据依赖:语义搜索依赖书籍摘要质量
  2. 初次同步:1000本书约需15-30秒
  3. 向量存储:本地存储,不会上传到云端
  4. 自动更新:新增书籍自动向量化
  5. 网络要求:需要网络访问 DeepSeek API

故障排查

问题1:同步失败

# 检查API Key
echo $NUXT_DEEPSEEK_API_KEY

# 检查网络
curl https://api.deepseek.com

问题2:语义搜索无结果

# 查看向量库统计
curl http://localhost:4000/api/ai/embedding/stats

# 如果vectorized_books为0,需要执行同步
curl -X POST http://localhost:4000/api/ai/embedding/sync

问题3:权限错误

# 确保chroma_data目录有写权限
chmod -R 755 chroma_data/

下一步

体验完 Phase 2a 后,可以继续实现:

  • Phase 2b:联网搜索(获取豆瓣书评、新书推荐)
  • Phase 3:多轮对话上下文记忆
  • Phase 4:本地 Embedding 模型(完全离线)