3.8 KiB
3.8 KiB
title, description, category, order
| title | description | category | order |
|---|---|---|---|
| RAG 知识库搭建 | 上传文档、向量化存储,构建企业级知识库问答系统。 | ai | 2 |
RAG 知识库搭建
上传文档、向量化存储,构建企业级知识库问答系统。
🧠 什么是 RAG?
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合「知识检索」和「AI 生成」的技术:
- 检索:从知识库中找到相关内容
- 增强:将检索结果作为上下文
- 生成:让 AI 基于上下文生成答案
用户问题 → 检索相关文档 → 拼接到 Prompt → AI 生成回答
📋 适用场景
- 📄 企业内部文档问答
- 🎯 产品 FAQ 自动化
- 📚 培训资料检索
- 🔍 合同/政策查询
- 🏥 专业知识库
🚀 搭建步骤
第一步:创建知识库
const knowledgeBase = await client.ai.createKnowledgeBase({
name: '产品使用手册',
description: '公司产品相关文档',
embeddingModel: 'text-embedding-3-small',
chunking: {
type: 'recursive',
chunkSize: 1000,
chunkOverlap: 200
}
})
console.log('知识库 ID:', knowledgeBase.id)
第二步:上传文档
支持格式:PDF、Word、TXT、Markdown、HTML
// 上传单个文件
const doc = await client.ai.uploadDocument(knowledgeBase.id, {
file: './docs/user-guide.pdf',
metadata: {
category: 'manual',
version: '2.0',
language: 'zh-CN'
}
})
// 批量上传
const docs = await client.ai.uploadDocuments(knowledgeBase.id, [
{ file: './docs/faq.md', metadata: { category: 'faq' } },
{ file: './docs/api.md', metadata: { category: 'api' } },
])
第三步:配置检索
await client.ai.configureRetrieval(knowledgeBase.id, {
retrieval: {
topK: 5,
scoreThreshold: 0.7,
hybridSearch: true
},
rerank: {
enabled: true,
model: 'bge-reranker'
}
})
第四步:问答
const response = await client.ai.ask({
knowledgeBaseId: knowledgeBase.id,
question: '如何创建新项目?',
options: {
maxTokens: 1000,
temperature: 0.7,
includeSources: true
}
})
console.log('回答:', response.answer)
console.log('引用:', response.citations)
响应示例
{
"answer": "创建新项目的步骤如下:\n1. 点击「新建项目」按钮\n2. 填写项目名称和描述\n3. 选择项目模板\n4. 点击「创建」完成",
"citations": [
{
"document_id": "doc_abc123",
"chunk_text": "点击「新建项目」按钮,进入项目创建页面...",
"score": 0.95
}
],
"model": "gpt-4",
"tokens_used": 850
}
🧪 最佳实践
文档准备
- ✅ 清理格式,移除无关内容
- ✅ 添加目录和标题结构
- ✅ QA 格式文档效果最好
- ❌ 避免过长的无结构文本
- ❌ 避免大量表格(难以正确分块)
检索优化
const optimalConfig = {
topK: 3, // 不要太多,可能引入噪音
scoreThreshold: 0.75, // 设置合理阈值
enableRerank: true // 启用重排序
}
Prompt 工程
const response = await client.ai.ask({
knowledgeBaseId: knowledgeBase.id,
question: '...',
systemPrompt: `你是一个专业客服,请基于给定的知识库内容回答用户问题。
- 如果知识库中没有相关内容,请如实告知
- 回答要简洁、专业、易懂
- 适当引用原文帮助用户理解`
})
❓ 常见问题
Q: 检索不到相关内容?
- 检查文档是否处理完成(状态为
ready) - 降低
scoreThreshold阈值 - 尝试
hybridSearch: true混合搜索 - 增加
topK获取更多候选
Q: 回答不准确?
- 检查源文档质量
- 调整
chunkSize,太小可能丢失上下文 - 启用
rerank提高相关性 - 优化 system prompt