smart_rag 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.env.example +252 -0
- data/.rspec +2 -0
- data/AGENTS.md +33 -0
- data/API_DOCUMENTATION.md +828 -0
- data/CHANGELOG.md +11 -1
- data/ER-diagram.mmd +144 -0
- data/Gemfile +50 -0
- data/Gemfile.lock +381 -0
- data/Hybrid_Reranking.md +171 -0
- data/README.en.md +420 -28
- data/README.md +534 -63
- data/Rakefile +268 -0
- data/SETUP_GUIDE.md +650 -0
- data/SmartChunking.md +180 -0
- data/USAGE_EXAMPLES.md +1002 -0
- data/config/llm_config.yml +4 -2
- data/config/smart_rag.yml +45 -1
- data/config.ru +15 -0
- data/db/migrations/006_create_text_search_configs.rb +3 -2
- data/db/migrations/008_create_embeddings.rb +5 -4
- data/db/migrations/012_add_metadata_to_source_sections.rb +11 -0
- data/db/migrations/013_create_media_jobs.rb +25 -0
- data/db/migrations/014_add_media_job_operations_indexes.rb +11 -0
- data/db/migrations/015_add_media_leases_and_objects.rb +80 -0
- data/db/migrations/016_add_document_principals_and_staging_references.rb +38 -0
- data/db/migrations/017_add_media_job_request_fingerprint.rb +48 -0
- data/db/seeds/text_search_configs.sql +3 -3
- data/design.md +1057 -0
- data/docs/API_DOCUMENTATION.md +838 -0
- data/docs/DOCUMENTATION_INDEX.en.md +60 -0
- data/docs/DOCUMENTATION_INDEX.md +65 -0
- data/docs/FIX_SUMMARY.md +256 -0
- data/docs/FIX_SUMMARY_COMPLETE.md +273 -0
- data/docs/Hybrid_Reranking.md +171 -0
- data/docs/MIGRATION_GUIDE.md +151 -0
- data/docs/PERFORMANCE_GUIDE.md +58 -0
- data/docs/SETUP_GUIDE.md +659 -0
- data/docs/SmartChunking.md +180 -0
- data/docs/USAGE_EXAMPLES.md +1008 -0
- data/docs/design.md +1057 -0
- data/docs/evidence_pack.md +211 -0
- data/docs/requirements.md +376 -0
- data/docs/retrieval_plan.md +251 -0
- data/docs/smartrag_improvement_plan.md +201 -0
- data/docs/smartrag_refactor.md +216 -0
- data/docs/todo.md +931 -0
- data/examples/common.rb +1 -1
- data/exe/smart-rag-db +163 -0
- data/exe/smart-rag-media-worker +34 -0
- data/lib/smart_rag/config.rb +12 -0
- data/lib/smart_rag/core/document_processor.rb +80 -16
- data/lib/smart_rag/core/local_content_store.rb +51 -0
- data/lib/smart_rag/core/media_extractors.rb +140 -0
- data/lib/smart_rag/core/media_job_queue.rb +353 -0
- data/lib/smart_rag/core/media_metadata_extractor.rb +188 -0
- data/lib/smart_rag/core/media_object_registry.rb +79 -0
- data/lib/smart_rag/core/media_processor.rb +228 -0
- data/lib/smart_rag/core/media_safety_policy.rb +61 -0
- data/lib/smart_rag/core/s3_content_store.rb +78 -0
- data/lib/smart_rag/core/transcript_normalizer.rb +44 -0
- data/lib/smart_rag/core/video_semantic_extractor.rb +130 -0
- data/lib/smart_rag/http_access_policy.rb +86 -0
- data/lib/smart_rag/http_app.rb +188 -0
- data/lib/smart_rag/models/embedding.rb +1 -1
- data/lib/smart_rag/models/research_topic.rb +1 -1
- data/lib/smart_rag/models/research_topic_section.rb +5 -0
- data/lib/smart_rag/models/research_topic_tag.rb +5 -0
- data/lib/smart_rag/models/search_log.rb +1 -1
- data/lib/smart_rag/models/section_fts.rb +5 -0
- data/lib/smart_rag/models/section_tag.rb +5 -0
- data/lib/smart_rag/models/source_document.rb +1 -1
- data/lib/smart_rag/models/source_section.rb +1 -1
- data/lib/smart_rag/models/tag.rb +1 -1
- data/lib/smart_rag/models/text_search_config.rb +5 -0
- data/lib/smart_rag/retrieve.rb +72 -1
- data/lib/smart_rag/services/embedding_service.rb +1 -1
- data/lib/smart_rag/services/fulltext_search_service.rb +11 -13
- data/lib/smart_rag/services/hybrid_search_service.rb +15 -11
- data/lib/smart_rag/services/summarization_service.rb +1 -1
- data/lib/smart_rag/services/tag_service.rb +1 -1
- data/lib/smart_rag/version.rb +1 -1
- data/lib/smart_rag.rb +264 -30
- data/patch_language.rb +27 -0
- data/requirements.md +376 -0
- data/source_documents_export.json +11072 -0
- data/todo.md +931 -0
- data/workers/analyze_content.rb +6 -2
- data/workers/get_embedding.rb +1 -1
- metadata +151 -38
data/requirements.md
ADDED
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
# SmartRAG 需求文档
|
|
2
|
+
|
|
3
|
+
## 1. 概述
|
|
4
|
+
|
|
5
|
+
SmartRAG 是一个 Ruby gem,为知识管理和智能搜索提供检索增强生成(RAG)功能。它使用向量嵌入和语义搜索来提取、存储和检索信息。
|
|
6
|
+
|
|
7
|
+
系统采用混合检索架构,结合以下两种检索方式:
|
|
8
|
+
- **向量检索**:基于语义的相似度搜索,使用 pgvector 存储和查询 1024 维向量
|
|
9
|
+
- **全文检索**:基于关键词的精确匹配,支持多语言分词和 BM25 排序算法
|
|
10
|
+
|
|
11
|
+
这种混合检索方法充分发挥了向量检索的语义理解能力和全文检索的精确匹配优势,提供更准确、更全面的搜索结果。
|
|
12
|
+
|
|
13
|
+
## 2. 核心需求
|
|
14
|
+
|
|
15
|
+
### 2.1 向量嵌入管理
|
|
16
|
+
|
|
17
|
+
#### 2.1.1 嵌入存储
|
|
18
|
+
- 使用 PostgreSQL 数据库的 pgvector 扩展存储向量嵌入(1024 维)
|
|
19
|
+
- 将嵌入与源内容(文档和片段)关联
|
|
20
|
+
- 支持嵌入的 CRUD 操作
|
|
21
|
+
|
|
22
|
+
#### 2.1.2 向量搜索
|
|
23
|
+
- 使用余弦距离(`<->` 操作符)执行相似度搜索
|
|
24
|
+
- 支持基于标签的搜索结果优先级提升
|
|
25
|
+
- 返回带相似度分数的排序结果
|
|
26
|
+
- 支持可配置的结果数量限制
|
|
27
|
+
|
|
28
|
+
#### 2.1.3 搜索功能
|
|
29
|
+
- `search_by_vector(query_vector, limit)` - 基础向量相似度搜索
|
|
30
|
+
- `search_by_vector_with_tag_boost(query_vector, tags, limit)` - 增强搜索,支持标签优先级
|
|
31
|
+
|
|
32
|
+
### 2.2 文档管理
|
|
33
|
+
|
|
34
|
+
#### 2.2.1 源文档
|
|
35
|
+
- 存储文档元数据:标题、作者、发布日期、语言、URL、描述
|
|
36
|
+
- 跟踪下载状态(待处理、已完成、失败)
|
|
37
|
+
- 支持 CRUD 操作
|
|
38
|
+
|
|
39
|
+
#### 2.2.2 文档片段(分块)
|
|
40
|
+
- 将文档拆分为可管理的分块(最大 4000 字符)
|
|
41
|
+
- 优先按 Markdown 标题智能分块,其次按字符限制
|
|
42
|
+
- 保持分块之间的重叠(100 字符)
|
|
43
|
+
- 存储片段标题和内容
|
|
44
|
+
- 跟踪片段编号以维护顺序
|
|
45
|
+
|
|
46
|
+
### 2.3 查询处理
|
|
47
|
+
|
|
48
|
+
#### 2.3.1 自然语言查询处理
|
|
49
|
+
- 将自然语言查询转换为向量表示
|
|
50
|
+
- 使用 LLM 从查询生成搜索关键词/标签
|
|
51
|
+
- 支持多语言:简体中文、繁体中文、英语、日语
|
|
52
|
+
|
|
53
|
+
#### 2.3.2 响应生成
|
|
54
|
+
- 使用向量搜索查询知识库
|
|
55
|
+
- 格式化和排序搜索结果
|
|
56
|
+
- 使用 LLM 生成自然语言摘要
|
|
57
|
+
|
|
58
|
+
### 2.4 标签系统
|
|
59
|
+
|
|
60
|
+
#### 2.4.1 标签管理
|
|
61
|
+
- 创建和管理层级标签
|
|
62
|
+
- 支持多种标签类型(分类标签、内容标签)
|
|
63
|
+
- 使用 LLM 为内容自动生成标签
|
|
64
|
+
|
|
65
|
+
#### 2.4.2 基于标签的增强
|
|
66
|
+
- 提升匹配查询标签的搜索结果
|
|
67
|
+
- 支持标签匹配的加权评分
|
|
68
|
+
|
|
69
|
+
### 2.5 内容处理管道
|
|
70
|
+
|
|
71
|
+
#### 2.5.1 文档摄取
|
|
72
|
+
- 从 URL 下载内容(网页、PDF、DOCX 等)
|
|
73
|
+
- 使用外部工具将各种格式转换为 Markdown
|
|
74
|
+
- 提取标题和元数据
|
|
75
|
+
|
|
76
|
+
#### 2.5.2 嵌入生成
|
|
77
|
+
- 使用外部嵌入服务为内容分块生成向量嵌入
|
|
78
|
+
- 支持可配置的嵌入维度
|
|
79
|
+
|
|
80
|
+
#### 2.5.3 标签处理
|
|
81
|
+
- 为每个内容分块生成标签
|
|
82
|
+
- 将标签链接到内容片段和文档
|
|
83
|
+
- 支持层级标签关系
|
|
84
|
+
|
|
85
|
+
### 2.6 数据模型
|
|
86
|
+
|
|
87
|
+
#### 2.6.1 核心实体
|
|
88
|
+
- **embeddings** - 内容片段的向量嵌入
|
|
89
|
+
- **source_documents** - 源文档元数据
|
|
90
|
+
- **source_sections** - 文档分块/片段
|
|
91
|
+
- **tags** - 标签定义
|
|
92
|
+
- **research_topics** - 研究主题分类
|
|
93
|
+
- **section_tags** - 片段和标签之间的多对多关系
|
|
94
|
+
- **research_topic_sections** - 研究主题和片段之间的关系
|
|
95
|
+
- **section_fts** - 全文检索专用表,存储 tsvector 数据
|
|
96
|
+
- **text_search_configs** - 语言配置映射表
|
|
97
|
+
|
|
98
|
+
#### 2.6.2 数据库要求
|
|
99
|
+
- PostgreSQL 12+ 与 pgvector 扩展
|
|
100
|
+
- 支持 JSON 数据类型
|
|
101
|
+
- 为性能优化的索引
|
|
102
|
+
|
|
103
|
+
### 2.7 全文检索功能
|
|
104
|
+
|
|
105
|
+
#### 2.7.1 多语言全文检索
|
|
106
|
+
- 支持多语言文本分词和索引:英文、简体中文、繁体中文、日语、韩语及其他语言
|
|
107
|
+
- 中文分词使用 pg_jieba 扩展,支持自定义词典
|
|
108
|
+
- 英文使用 PostgreSQL 内置的 pg_catalog.english 配置
|
|
109
|
+
- 其他语言使用 simple 配置,按非字母字符分词
|
|
110
|
+
- 自动检测文本语言或基于文档语言元数据选择分词器
|
|
111
|
+
|
|
112
|
+
#### 2.7.2 全文检索核心功能
|
|
113
|
+
- `search_by_text(query, language, limit)` - 基础全文检索,支持自然语言查询和高级查询语法
|
|
114
|
+
- `search_with_filters(query, filters, options)` - 带过滤条件的全文检索,支持按文档、标签、日期范围过滤
|
|
115
|
+
- `hybrid_search(text_query, vector_query, options)` - 混合检索,融合全文检索和向量检索结果
|
|
116
|
+
- 搜索结果包含相关性分数(BM25)、高亮片段和元数据
|
|
117
|
+
|
|
118
|
+
#### 2.7.3 混合检索策略
|
|
119
|
+
- 使用 RRF(Reciprocal Rank Fusion)算法融合全文检索和向量检索结果
|
|
120
|
+
- 支持配置不同检索模式的权重
|
|
121
|
+
- 全文检索:精确匹配、关键词敏感、可解释性强
|
|
122
|
+
- 向量检索:语义理解、容错性高、支持近义词
|
|
123
|
+
- 混合检索:结合两者优势,提升检索质量
|
|
124
|
+
|
|
125
|
+
#### 2.7.4 查询解析与优化
|
|
126
|
+
- 智能查询解析器,支持自然语言查询和高级查询语法(引号、AND、OR)
|
|
127
|
+
- 查询预处理:语言检测、查询标准化、特殊字符处理
|
|
128
|
+
- 支持查询扩展:同义词扩展、拼写纠错(可选)
|
|
129
|
+
- 查询性能优化:使用 GIN 索引、分区索引、复合索引
|
|
130
|
+
|
|
131
|
+
#### 2.7.5 索引管理
|
|
132
|
+
- 自动维护全文索引:通过数据库触发器在内容更新时自动更新 tsvector
|
|
133
|
+
- 支持增量索引构建和批量索引重建
|
|
134
|
+
- 提供索引健康检查和优化工具
|
|
135
|
+
- 支持索引预热和缓存策略
|
|
136
|
+
|
|
137
|
+
## 3. 集成需求
|
|
138
|
+
|
|
139
|
+
### 3.1 LLM 集成
|
|
140
|
+
- 集成外部 LLM 服务以支持:
|
|
141
|
+
- 嵌入生成(`get_embedding` worker)
|
|
142
|
+
- 标签生成(`get_tags` worker)
|
|
143
|
+
- 搜索结果摘要(`summarize_search_results` worker)
|
|
144
|
+
- 支持可插拔的 LLM 后端
|
|
145
|
+
|
|
146
|
+
### 3.2 网页搜索集成
|
|
147
|
+
- 可选的网页搜索 API 集成
|
|
148
|
+
- 支持多个搜索提供商
|
|
149
|
+
- 基于工具的搜索实现
|
|
150
|
+
|
|
151
|
+
### 3.3 文档处理集成
|
|
152
|
+
- 与 markitdown 集成进行文档转换
|
|
153
|
+
- 支持 PDF、DOCX、HTML 和其他格式
|
|
154
|
+
|
|
155
|
+
## 4. 搜索功能
|
|
156
|
+
|
|
157
|
+
### 4.1 查询类型
|
|
158
|
+
- 自然语言问题(支持向量检索和全文检索)
|
|
159
|
+
- 基于关键词的搜索(全文检索,支持高级查询语法)
|
|
160
|
+
- 标签筛选搜索
|
|
161
|
+
- 混合检索(结合全文检索和向量检索)
|
|
162
|
+
|
|
163
|
+
### 4.2 检索模式
|
|
164
|
+
|
|
165
|
+
#### 4.2.1 向量检索
|
|
166
|
+
- 基于语义的相似度搜索
|
|
167
|
+
- 使用余弦距离计算相似度
|
|
168
|
+
- 支持 1024 维向量嵌入
|
|
169
|
+
- 对同义词和语义相近的内容有更好的召回率
|
|
170
|
+
|
|
171
|
+
#### 4.2.2 全文检索
|
|
172
|
+
- 基于关键词的精确匹配
|
|
173
|
+
- 使用 BM25 算法排序
|
|
174
|
+
- 支持多语言分词(中文、英文、日文等)
|
|
175
|
+
- 支持高级查询语法:引号精确匹配、AND/OR 布尔操作
|
|
176
|
+
- 提供高亮片段显示
|
|
177
|
+
- 响应时间:P95 < 100ms
|
|
178
|
+
|
|
179
|
+
#### 4.2.3 混合检索(推荐)
|
|
180
|
+
- 同时执行全文检索和向量检索
|
|
181
|
+
- 使用 RRF(Reciprocal Rank Fusion)算法融合结果
|
|
182
|
+
- 结合全文检索的精确性和向量检索的语义理解能力
|
|
183
|
+
- 相比纯向量检索,召回率提升 15-25%
|
|
184
|
+
- 可配置不同检索模式的权重
|
|
185
|
+
|
|
186
|
+
### 4.3 结果排序与评分
|
|
187
|
+
- 向量检索:余弦距离评分(0-1,越小越相似)
|
|
188
|
+
- 全文检索:BM25 相关性评分(越高越相关)
|
|
189
|
+
- 混合检索:RRF 融合评分
|
|
190
|
+
- 标签匹配:提升匹配标签结果的优先级
|
|
191
|
+
- 支持自定义排序规则和加权策略
|
|
192
|
+
- 重复项移除:基于内容相似度和 URL
|
|
193
|
+
|
|
194
|
+
### 4.4 结果格式化
|
|
195
|
+
- 带元数据的结构化结果对象
|
|
196
|
+
- 支持分页(limit/offset)
|
|
197
|
+
- 包含丰富的元数据:
|
|
198
|
+
- 文档标题、作者、发布日期、URL
|
|
199
|
+
- 内容片段(带关键词高亮)
|
|
200
|
+
- 相关性分数
|
|
201
|
+
- 匹配标签
|
|
202
|
+
- 检索模式标记(全文/向量/混合)
|
|
203
|
+
|
|
204
|
+
## 5. 知识库管理
|
|
205
|
+
|
|
206
|
+
### 5.1 文档操作
|
|
207
|
+
- 通过 URL 添加文档
|
|
208
|
+
- 下载和处理文档内容
|
|
209
|
+
- 级联清理删除文档
|
|
210
|
+
- 按研究主题列出文档
|
|
211
|
+
|
|
212
|
+
### 5.2 研究主题
|
|
213
|
+
- 按研究主题分类文档
|
|
214
|
+
- 支持文档到主题的多对多关系
|
|
215
|
+
- 基于内容自动推荐主题
|
|
216
|
+
|
|
217
|
+
### 5.3 批量操作
|
|
218
|
+
- 下载所有待处理的文档
|
|
219
|
+
- 批量处理文档
|
|
220
|
+
- 重新处理现有文档
|
|
221
|
+
|
|
222
|
+
## 6. 性能需求
|
|
223
|
+
|
|
224
|
+
### 6.1 搜索性能
|
|
225
|
+
- 向量搜索应在 < 1 秒内完成典型查询
|
|
226
|
+
- 全文检索 P95 响应时间 < 100ms
|
|
227
|
+
- 混合检索总响应时间 < 1 秒(并行执行)
|
|
228
|
+
- 支持向量列上的索引(IVFFLAT)
|
|
229
|
+
- 全文检索使用 GIN 索引,支持快速查询
|
|
230
|
+
- 高效的标签筛选和查询过滤
|
|
231
|
+
|
|
232
|
+
### 6.2 内容处理
|
|
233
|
+
- 文档分块应高效处理大型文档
|
|
234
|
+
- 支持多文档的并行处理
|
|
235
|
+
- 可配置的处理批量大小
|
|
236
|
+
- 索引构建:100 万条记录 < 10 分钟
|
|
237
|
+
- 增量索引更新实时同步
|
|
238
|
+
|
|
239
|
+
### 6.3 可扩展性要求
|
|
240
|
+
- 支持千万级文档的检索
|
|
241
|
+
- 支持水平分片:按语言或主题分区
|
|
242
|
+
- 查询缓存:Redis 缓存热门查询结果
|
|
243
|
+
- 连接池:支持高并发查询(100+ QPS)
|
|
244
|
+
|
|
245
|
+
## 7. 错误处理
|
|
246
|
+
|
|
247
|
+
### 7.1 健壮的错误处理
|
|
248
|
+
- 优雅处理嵌入生成失败
|
|
249
|
+
- 文档下载错误处理与状态跟踪
|
|
250
|
+
- 数据库操作错误处理
|
|
251
|
+
- 网络错误恢复
|
|
252
|
+
|
|
253
|
+
### 7.2 日志记录
|
|
254
|
+
- 全面的调试日志
|
|
255
|
+
- 日志级别(info、warning、error)
|
|
256
|
+
- 结构化日志输出
|
|
257
|
+
|
|
258
|
+
## 8. 配置管理
|
|
259
|
+
|
|
260
|
+
### 8.1 数据库配置
|
|
261
|
+
- 可配置的数据库连接设置
|
|
262
|
+
- 支持连接池
|
|
263
|
+
- 支持模式版本控制
|
|
264
|
+
|
|
265
|
+
### 8.2 全文检索配置
|
|
266
|
+
- 默认语言设置(en/zh/ja 等)
|
|
267
|
+
- 最大搜索结果数(默认 100)
|
|
268
|
+
- 混合检索权重配置(全文 vs 向量)
|
|
269
|
+
- 缓存配置:启用/禁用、TTL 设置
|
|
270
|
+
- 监控配置:慢查询阈值、日志记录
|
|
271
|
+
- 分词器配置:自定义词典路径
|
|
272
|
+
|
|
273
|
+
### 8.3 模型配置
|
|
274
|
+
- 可配置的嵌入维度(默认 1024)
|
|
275
|
+
- 可配置的分块大小(默认 4000)和重叠(默认 100)
|
|
276
|
+
- 标签生成参数和模型选择
|
|
277
|
+
- 检索结果数量限制
|
|
278
|
+
- 标签匹配提升权重
|
|
279
|
+
|
|
280
|
+
## 9. 测试需求
|
|
281
|
+
|
|
282
|
+
### 9.1 单元测试
|
|
283
|
+
- 所有模型的测试覆盖率(嵌入模型、文档模型、片段模型、全文检索表模型)
|
|
284
|
+
- 模拟外部服务依赖(LLM 服务、嵌入服务)
|
|
285
|
+
- 测试向量搜索准确性
|
|
286
|
+
- 测试全文检索功能:多语言分词、查询解析、结果排序
|
|
287
|
+
- 测试混合检索 RRF 算法正确性
|
|
288
|
+
- 测试文档分块功能(Markdown 标题拆分、重叠处理)
|
|
289
|
+
|
|
290
|
+
### 9.2 集成测试
|
|
291
|
+
- 端到端文档处理测试(下载 → 分块 → 嵌入生成 → 全文索引)
|
|
292
|
+
- 搜索功能测试:
|
|
293
|
+
- 向量搜索集成测试
|
|
294
|
+
- 全文检索集成测试(中英文)
|
|
295
|
+
- 混合检索集成测试
|
|
296
|
+
- 带过滤条件的检索测试
|
|
297
|
+
- 错误处理测试(嵌入失败、数据库错误、网络超时)
|
|
298
|
+
- 性能测试:
|
|
299
|
+
- 搜索响应时间(P95、P99)
|
|
300
|
+
- 索引构建速度
|
|
301
|
+
- 大规模数据查询性能
|
|
302
|
+
- 质量评估:准确率、召回率、NDCG 排名质量
|
|
303
|
+
|
|
304
|
+
## 10. 文档
|
|
305
|
+
|
|
306
|
+
### 10.1 API 文档
|
|
307
|
+
- 所有公共方法的清晰 API 文档
|
|
308
|
+
- 使用示例
|
|
309
|
+
- 最佳实践指南
|
|
310
|
+
|
|
311
|
+
### 10.2 设置文档
|
|
312
|
+
- 数据库设置说明(PostgreSQL 16+)
|
|
313
|
+
- pgvector 安装指南
|
|
314
|
+
- pg_jieba 安装和配置指南(支持 Ubuntu/Debian 和 macOS)
|
|
315
|
+
- 自定义词典配置和使用说明
|
|
316
|
+
- 全文检索配置示例和高级查询语法说明
|
|
317
|
+
- 性能优化建议(索引、查询、缓存)
|
|
318
|
+
- 从现有系统迁移到混合检索的迁移指南
|
|
319
|
+
|
|
320
|
+
## 11. 依赖项
|
|
321
|
+
|
|
322
|
+
### 11.1 Ruby 依赖
|
|
323
|
+
- sequel - 数据库 ORM
|
|
324
|
+
- pg - PostgreSQL 驱动
|
|
325
|
+
- json - JSON 处理
|
|
326
|
+
- httparty/faraday - HTTP 客户端(用于 LLM API 调用)
|
|
327
|
+
- concurrent-ruby - 并发处理(支持异步检索)
|
|
328
|
+
- 根据需要额外的 gems
|
|
329
|
+
|
|
330
|
+
### 11.2 系统依赖
|
|
331
|
+
- **数据库**:PostgreSQL 16+ 与以下扩展:
|
|
332
|
+
- pgvector - 向量存储和相似度搜索
|
|
333
|
+
- pg_jieba - 中文分词(可选,用于中文全文检索)
|
|
334
|
+
- pg_trgm - 模糊匹配和相似度计算(可选)
|
|
335
|
+
- **外部服务**:
|
|
336
|
+
- 外部 LLM 服务访问(用于嵌入生成、标签生成、摘要)
|
|
337
|
+
- 可选:用于文档处理的 markitdown
|
|
338
|
+
- **编译依赖**(用于安装 pg_jieba):
|
|
339
|
+
- cmake 3.10+
|
|
340
|
+
- gcc/g++ 或 clang
|
|
341
|
+
- PostgreSQL 服务器开发包(postgresql-server-dev-${version})
|
|
342
|
+
|
|
343
|
+
## 12. 未来考虑
|
|
344
|
+
|
|
345
|
+
### 12.1 高级功能
|
|
346
|
+
|
|
347
|
+
#### 12.1.1 全文检索增强
|
|
348
|
+
- **同义词扩展**:使用 PostgreSQL 同义词词典(ts_synonym)
|
|
349
|
+
- **拼写纠错**:集成 pg_trgm 进行模糊匹配
|
|
350
|
+
- **增量索引**:使用 PostgreSQL 13+ 的增量排序功能
|
|
351
|
+
- **并行查询**:利用并行执行加速大规模检索
|
|
352
|
+
- **知识图谱**:集成实体识别和关系抽取
|
|
353
|
+
|
|
354
|
+
#### 12.1.2 多模态与跨语言
|
|
355
|
+
- 多模态嵌入(图像、音频)
|
|
356
|
+
- 跨语言搜索(支持跨语种查询)
|
|
357
|
+
- 语义聚类(自动文档分类)
|
|
358
|
+
- 查询扩展(自动添加相关词)
|
|
359
|
+
- 相关度反馈(从用户交互中学习)
|
|
360
|
+
|
|
361
|
+
### 12.2 可扩展性与运维
|
|
362
|
+
|
|
363
|
+
#### 12.2.1 搜索可扩展性
|
|
364
|
+
- 分布式向量搜索(多节点部署)
|
|
365
|
+
- 全文检索分区索引(按语言或主题)
|
|
366
|
+
- 水平分片和联邦搜索
|
|
367
|
+
- 查询结果缓存(Redis 缓存层)
|
|
368
|
+
- 多数据中心部署和同步
|
|
369
|
+
|
|
370
|
+
#### 12.2.2 运维与监控
|
|
371
|
+
- 索引健康检查和自动修复
|
|
372
|
+
- 查询性能监控和告警
|
|
373
|
+
- 慢查询分析工具和优化建议
|
|
374
|
+
- 自动索引重建和碎片整理
|
|
375
|
+
- 后台作业处理(文档下载、索引构建)
|
|
376
|
+
- 存档/保留策略(冷热数据分离)
|