RAG 原理全景
graph TB
subgraph "离线阶段 - 知识入库"
Doc[原始文档 PDF/TXT/Notion] --> Chunk[文本分段 Chunking]
Chunk --> Embed[Embedding 向量化]
Embed --> Store[(向量数据库)]
end
subgraph "在线阶段 - 检索增强"
Query[用户提问] --> QEmbed[Query Embedding]
QEmbed --> Search[向量相似度搜索]
Store --> Search
Search --> Context[Top-K 相关段落]
Context --> LLM[LLM + 上下文回答]
end创建知识库
支持的文档格式
| 格式 |
说明 |
| TXT |
纯文本 |
| PDF |
自动 OCR 提取 |
| DOCX/DOC |
Word 文档 |
| XLSX/CSV |
表格数据 |
| MD |
Markdown |
| HTML |
网页内容 |
| Notion |
直接同步 |
通过 API 创建知识库
# 创建知识库
curl -X POST 'http://localhost/console/api/datasets' \
-H 'Authorization: Bearer CONSOLE_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"name": "产品文档知识库",
"description": "包含所有产品的技术文档和FAQ",
"indexing_technique": "high_quality",
"permission": "only_me"
}'
分段策略
graph LR
subgraph "自动分段"
A1[按段落分割]
A2[智能边界检测]
end
subgraph "自定义分段"
B1[指定分隔符]
B2[最大段落长度]
B3[重叠窗口]
end分段参数详解
# 分段配置示例
chunking_config = {
"mode": "custom", # automatic | custom
"rules": {
"separator": "\n\n", # 分段分隔符
"max_chunk_length": 500, # 每段最大字符数
"chunk_overlap": 50, # 段落重叠字符数
"pre_processing_rules": [
{
"id": "remove_extra_spaces",
"enabled": True
},
{
"id": "remove_urls_emails",
"enabled": False
}
]
}
}
分段质量黄金法则
| 参数 |
推荐值 |
说明 |
| max_chunk_length |
300-800 |
太短丢失上下文,太长噪声多 |
| chunk_overlap |
50-100 |
确保跨段信息不丢失 |
| separator |
\n\n |
按双换行分段最自然 |
Embedding 模型选型
| 模型 |
维度 |
性能 |
成本 |
| OpenAI text-embedding-3-large |
3072 |
⭐⭐⭐⭐⭐ |
$$ |
| OpenAI text-embedding-3-small |
1536 |
⭐⭐⭐⭐ |
$ |
| Cohere embed-multilingual-v3.0 |
1024 |
⭐⭐⭐⭐ |
$ |
| BGE-large-zh (本地) |
1024 |
⭐⭐⭐⭐ |
免费 |
| Ollama nomic-embed-text |
768 |
⭐⭐⭐ |
免费 |