smart_rag 0.1.0 → 0.2.1
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 +16 -1
- data/ER-diagram.mmd +144 -0
- data/Gemfile +50 -0
- data/Gemfile.lock +398 -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/SETUP_GUIDE.md
ADDED
|
@@ -0,0 +1,650 @@
|
|
|
1
|
+
# SmartRAG 设置和安装指南
|
|
2
|
+
|
|
3
|
+
## 系统要求
|
|
4
|
+
|
|
5
|
+
### 操作系统
|
|
6
|
+
- Linux (Ubuntu 20.04+, CentOS 8+, Debian 10+)
|
|
7
|
+
- macOS (11.0+)
|
|
8
|
+
- Windows 10+ (WSL2 推荐)
|
|
9
|
+
|
|
10
|
+
### 软件依赖
|
|
11
|
+
- Ruby 3.3.0+
|
|
12
|
+
- PostgreSQL 16.0+
|
|
13
|
+
- Python 3.8+ (用于 markitdown)
|
|
14
|
+
- GCC/G++ 9.0+ (用于编译 pgvector)
|
|
15
|
+
|
|
16
|
+
### 硬件要求
|
|
17
|
+
- 内存: 最低 4GB, 推荐 8GB+
|
|
18
|
+
- 存储: 50GB+ 可用空间
|
|
19
|
+
- CPU: 4+ 核心 (用于并行搜索)
|
|
20
|
+
|
|
21
|
+
## 安装步骤
|
|
22
|
+
|
|
23
|
+
### 1. 安装 PostgreSQL 和扩展
|
|
24
|
+
|
|
25
|
+
#### Ubuntu/Debian
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# 添加 PostgreSQL 官方仓库
|
|
29
|
+
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
|
30
|
+
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
|
31
|
+
|
|
32
|
+
# 更新包列表
|
|
33
|
+
sudo apt-get update
|
|
34
|
+
|
|
35
|
+
# 安装 PostgreSQL 16
|
|
36
|
+
sudo apt-get install -y postgresql-16 postgresql-16-pgvector postgresql-16-pg_jieba
|
|
37
|
+
|
|
38
|
+
# 启动服务
|
|
39
|
+
sudo systemctl start postgresql
|
|
40
|
+
sudo systemctl enable postgresql
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
#### CentOS/RHEL
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# 安装 PostgreSQL 16
|
|
47
|
+
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
|
|
48
|
+
sudo dnf -y module disable postgresql
|
|
49
|
+
sudo dnf install -y postgresql16-server postgresql16-contrib
|
|
50
|
+
|
|
51
|
+
# 启用 pgvector 和 pg_jieba (需要编译安装)
|
|
52
|
+
sudo dnf install -y gcc make postgresql16-devel
|
|
53
|
+
|
|
54
|
+
# 编译安装 pgvector
|
|
55
|
+
git clone https://github.com/pgvector/pgvector.git
|
|
56
|
+
cd pgvector
|
|
57
|
+
git checkout v0.7.0
|
|
58
|
+
make
|
|
59
|
+
sudo make install
|
|
60
|
+
|
|
61
|
+
# 安装 pg_jieba (中文分词)
|
|
62
|
+
git clone https://github.com/jaiminpan/pg_jieba_pg16.git
|
|
63
|
+
cd pg_jieba_pg16
|
|
64
|
+
make
|
|
65
|
+
sudo make install
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
#### macOS (使用 Homebrew)
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# 安装 PostgreSQL
|
|
72
|
+
brew install postgresql@16
|
|
73
|
+
|
|
74
|
+
# 启动服务
|
|
75
|
+
brew services start postgresql@16
|
|
76
|
+
|
|
77
|
+
# 安装 pgvector
|
|
78
|
+
git clone https://github.com/pgvector/pgvector.git
|
|
79
|
+
cd pgvector
|
|
80
|
+
git checkout v0.7.0
|
|
81
|
+
make
|
|
82
|
+
make install
|
|
83
|
+
|
|
84
|
+
# 安装 pg_jieba
|
|
85
|
+
git clone https://github.com/jaiminpan/pg_jieba_pg16.git
|
|
86
|
+
cd pg_jieba_pg16
|
|
87
|
+
make
|
|
88
|
+
make install
|
|
89
|
+
|
|
90
|
+
# 设置 PostgreSQL 环境
|
|
91
|
+
export PATH="/usr/local/opt/postgresql@16/bin:$PATH"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 2. 配置 PostgreSQL
|
|
95
|
+
|
|
96
|
+
#### 2.1 创建数据库和用户
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# 切换到 postgres 用户
|
|
100
|
+
sudo -u postgres psql
|
|
101
|
+
|
|
102
|
+
-- 创建数据库
|
|
103
|
+
CREATE DATABASE smart_rag_development;
|
|
104
|
+
CREATE DATABASE smart_rag_test;
|
|
105
|
+
|
|
106
|
+
-- 创建用户
|
|
107
|
+
CREATE USER smart_rag_user WITH PASSWORD 'your_secure_password';
|
|
108
|
+
|
|
109
|
+
-- 授权
|
|
110
|
+
GRANT ALL PRIVILEGES ON DATABASE smart_rag_development TO smart_rag_user;
|
|
111
|
+
GRANT ALL PRIVILEGES ON DATABASE smart_rag_test TO smart_rag_user;
|
|
112
|
+
|
|
113
|
+
-- 退出 psql
|
|
114
|
+
\q
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
#### 2.2 启用扩展
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# 连接到数据库
|
|
121
|
+
sudo -u postgres psql smart_rag_development
|
|
122
|
+
|
|
123
|
+
-- 启用扩展
|
|
124
|
+
CREATE EXTENSION IF NOT EXISTS vector;
|
|
125
|
+
CREATE EXTENSION IF NOT EXISTS pg_jieba;
|
|
126
|
+
|
|
127
|
+
-- 验证安装
|
|
128
|
+
SELECT * FROM pg_extension WHERE extname IN ('vector', 'pg_jieba');
|
|
129
|
+
|
|
130
|
+
-- 应该看到两行输出
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### 2.3 优化 PostgreSQL 配置
|
|
134
|
+
|
|
135
|
+
编辑 `/etc/postgresql/16/main/postgresql.conf` (Ubuntu) 或 `/var/lib/pgsql/16/data/postgresql.conf` (CentOS):
|
|
136
|
+
|
|
137
|
+
```conf
|
|
138
|
+
# 共享内存和缓存
|
|
139
|
+
shared_buffers = 2GB
|
|
140
|
+
work_mem = 64MB
|
|
141
|
+
maintenance_work_mem = 512MB
|
|
142
|
+
|
|
143
|
+
# 并行查询
|
|
144
|
+
max_parallel_workers_per_gather = 4
|
|
145
|
+
max_parallel_workers = 8
|
|
146
|
+
|
|
147
|
+
# 检查点和 WAL
|
|
148
|
+
checkpoint_timeout = 15min
|
|
149
|
+
max_wal_size = 4GB
|
|
150
|
+
|
|
151
|
+
# 向量搜索优化
|
|
152
|
+
ivfflat.probes = 10 # 增加探测数以提高准确性
|
|
153
|
+
|
|
154
|
+
# 日志 (可选)
|
|
155
|
+
log_statement = 'all'
|
|
156
|
+
log_min_duration_statement = 1000 # 记录慢查询 (ms)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
重启 PostgreSQL:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
sudo systemctl restart postgresql
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 3. 安装 Ruby 依赖
|
|
166
|
+
|
|
167
|
+
#### 3.1 安装 Ruby 3.3+
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# 使用 rbenv (推荐)
|
|
171
|
+
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash
|
|
172
|
+
|
|
173
|
+
# 添加到 shell
|
|
174
|
+
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
|
|
175
|
+
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
|
|
176
|
+
source ~/.bashrc
|
|
177
|
+
|
|
178
|
+
# 安装 Ruby 3.3.4
|
|
179
|
+
rbenv install 3.3.4
|
|
180
|
+
rbenv global 3.3.4
|
|
181
|
+
|
|
182
|
+
# 验证
|
|
183
|
+
ruby --version
|
|
184
|
+
# 应该显示 ruby 3.3.4
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
#### 3.2 安装 Bundler
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
gem install bundler
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
#### 3.3 安装项目依赖
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# 克隆项目 (如果尚未克隆)
|
|
197
|
+
git clone https://github.com/your-org/smart_rag.git
|
|
198
|
+
cd smart_rag
|
|
199
|
+
|
|
200
|
+
# 安装 gems
|
|
201
|
+
bundle install
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### 4. 安装 Python markitdown
|
|
205
|
+
|
|
206
|
+
SmartRAG 使用 Python 的 markitdown 进行文档转换。
|
|
207
|
+
|
|
208
|
+
#### 4.1 安装 Python 3.8+
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# Ubuntu/Debian
|
|
212
|
+
sudo apt-get install -y python3 python3-pip
|
|
213
|
+
|
|
214
|
+
# CentOS/RHEL
|
|
215
|
+
sudo dnf install -y python3 python3-pip
|
|
216
|
+
|
|
217
|
+
# macOS (Homebrew)
|
|
218
|
+
brew install python3
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
#### 4.2 安装 markitdown
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
pip3 install markitdown
|
|
225
|
+
|
|
226
|
+
# 验证安装
|
|
227
|
+
markitdown --version
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
#### 4.3 配置 Ruby-Python 桥接
|
|
231
|
+
|
|
232
|
+
SmartRAG 自动检测 Python,无需额外配置。如果需要指定 Python 路径:
|
|
233
|
+
|
|
234
|
+
```ruby
|
|
235
|
+
# config/smart_rag.yml
|
|
236
|
+
markitdown:
|
|
237
|
+
python_path: '/usr/bin/python3' # 或 '/usr/local/bin/python3'
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 5. 数据库迁移
|
|
241
|
+
|
|
242
|
+
#### 5.1 创建数据库表
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# 创建数据库 (如果不存在)
|
|
246
|
+
bundle exec rake db:create
|
|
247
|
+
|
|
248
|
+
# 运行迁移
|
|
249
|
+
bundle exec rake db:migrate
|
|
250
|
+
|
|
251
|
+
# 运行测试数据库迁移
|
|
252
|
+
RACK_ENV=test bundle exec rake db:migrate
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
#### 5.2 加载种子数据
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
# 加载语言配置
|
|
259
|
+
psql -U smart_rag_user -d smart_rag_development -f db/seeds/text_search_configs.sql
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
#### 5.3 验证数据库
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
# 连接到数据库
|
|
266
|
+
psql -U smart_rag_user -d smart_rag_development
|
|
267
|
+
|
|
268
|
+
-- 检查表
|
|
269
|
+
dt
|
|
270
|
+
|
|
271
|
+
-- 应该看到以下表:
|
|
272
|
+
-- embeddings
|
|
273
|
+
-- research_topic_sections
|
|
274
|
+
-- research_topic_tags
|
|
275
|
+
-- research_topics
|
|
276
|
+
-- search_logs
|
|
277
|
+
-- section_fts
|
|
278
|
+
-- section_tags
|
|
279
|
+
-- source_documents
|
|
280
|
+
-- source_sections
|
|
281
|
+
-- tags
|
|
282
|
+
-- text_search_configs
|
|
283
|
+
|
|
284
|
+
-- 验证嵌入表有向量列
|
|
285
|
+
\d+ embeddings
|
|
286
|
+
|
|
287
|
+
-- 验证全文检索表有 tsvector 列
|
|
288
|
+
\d+ section_fts
|
|
289
|
+
|
|
290
|
+
-- 退出
|
|
291
|
+
\q
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### 6. 配置环境变量
|
|
295
|
+
|
|
296
|
+
创建 `.env` 文件:
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
# 数据库
|
|
300
|
+
cp .env.example .env
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
编辑 `.env`:
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
# PostgreSQL
|
|
307
|
+
SMARTRAG_DB_HOST=localhost
|
|
308
|
+
SMARTRAG_DB_PORT=5432
|
|
309
|
+
SMARTRAG_DB_NAME=smart_rag_development
|
|
310
|
+
SMARTRAG_DB_USER=smart_rag_user
|
|
311
|
+
SMARTRAG_DB_PASSWORD=your_secure_password
|
|
312
|
+
|
|
313
|
+
# Test database
|
|
314
|
+
SMARTRAG_TEST_DB_NAME=smart_rag_test
|
|
315
|
+
SMARTRAG_TEST_DB_USER=smart_rag_user
|
|
316
|
+
SMARTRAG_TEST_DB_PASSWORD=your_secure_password
|
|
317
|
+
|
|
318
|
+
# LLM API (OpenAI)
|
|
319
|
+
OPENAI_API_KEY=sk-...
|
|
320
|
+
|
|
321
|
+
# 可选配置
|
|
322
|
+
SMARTRAG_LOG_LEVEL=info
|
|
323
|
+
SMARTRAG_MAX_WORKERS=5
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### 7. 运行测试
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
# 运行所有测试
|
|
330
|
+
bundle exec rspec
|
|
331
|
+
|
|
332
|
+
# 运行特定测试
|
|
333
|
+
bundle exec rspec spec/models
|
|
334
|
+
bundle exec rspec spec/services
|
|
335
|
+
|
|
336
|
+
# 使用并行测试 (如果使用 parallel_tests gem)
|
|
337
|
+
bundle exec rake parallel:spec
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### 8. 验证安装
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
# 启动交互式控制台
|
|
344
|
+
bundle exec irb -r smart_rag
|
|
345
|
+
|
|
346
|
+
# 测试连接
|
|
347
|
+
SmartRAG.config = SmartRAG::Config.load
|
|
348
|
+
SmartRAG.init_db
|
|
349
|
+
|
|
350
|
+
# 添加测试文档
|
|
351
|
+
smart_rag = SmartRAG::SmartRAG.new(SmartRAG.config)
|
|
352
|
+
result = smart_rag.add_document('https://example.com', generate_embeddings: false)
|
|
353
|
+
puts "✓ Document added: #{result[:document_id]}"
|
|
354
|
+
|
|
355
|
+
# 搜索测试
|
|
356
|
+
results = smart_rag.search('test', limit: 1)
|
|
357
|
+
puts "✓ Search working: #{results[:results].length} results"
|
|
358
|
+
|
|
359
|
+
# 查看统计
|
|
360
|
+
stats = smart_rag.statistics
|
|
361
|
+
puts "✓ Statistics: #{stats.inspect}"
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## Docker 安装 (可选)
|
|
365
|
+
|
|
366
|
+
### 1. 构建 Docker 镜像
|
|
367
|
+
|
|
368
|
+
```dockerfile
|
|
369
|
+
# Dockerfile
|
|
370
|
+
FROM ruby:3.3.4-slim
|
|
371
|
+
|
|
372
|
+
# 安装系统依赖
|
|
373
|
+
RUN apt-get update && apt-get install -y \
|
|
374
|
+
build-essential \
|
|
375
|
+
postgresql-client \
|
|
376
|
+
python3 \
|
|
377
|
+
python3-pip \
|
|
378
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
379
|
+
|
|
380
|
+
# 安装 Python markitdown
|
|
381
|
+
RUN pip3 install markitdown
|
|
382
|
+
|
|
383
|
+
# 设置工作目录
|
|
384
|
+
WORKDIR /app
|
|
385
|
+
|
|
386
|
+
# 复制 Gemfile
|
|
387
|
+
COPY Gemfile Gemfile.lock ./
|
|
388
|
+
RUN bundle install
|
|
389
|
+
|
|
390
|
+
# 复制应用代码
|
|
391
|
+
COPY . .
|
|
392
|
+
|
|
393
|
+
# 创建非 root 用户
|
|
394
|
+
RUN groupadd -r smart_rag && useradd -r -g smart_rag smart_rag
|
|
395
|
+
USER smart_rag
|
|
396
|
+
|
|
397
|
+
# 暴露端口
|
|
398
|
+
EXPOSE 3000
|
|
399
|
+
|
|
400
|
+
CMD ["bundle", "exec", "irb", "-r", "smart_rag"]
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
构建:
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
docker build -t smart_rag .
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### 2. 使用 Docker Compose
|
|
410
|
+
|
|
411
|
+
```yaml
|
|
412
|
+
# docker-compose.yml
|
|
413
|
+
version: '3.8'
|
|
414
|
+
|
|
415
|
+
services:
|
|
416
|
+
db:
|
|
417
|
+
image: pgvector/pgvector:pg16
|
|
418
|
+
environment:
|
|
419
|
+
POSTGRES_DB: smart_rag_development
|
|
420
|
+
POSTGRES_USER: smart_rag_user
|
|
421
|
+
POSTGRES_PASSWORD: your_secure_password
|
|
422
|
+
volumes:
|
|
423
|
+
- postgres_data:/var/lib/postgresql/data
|
|
424
|
+
ports:
|
|
425
|
+
- "5432:5432"
|
|
426
|
+
|
|
427
|
+
app:
|
|
428
|
+
build: .
|
|
429
|
+
depends_on:
|
|
430
|
+
- db
|
|
431
|
+
environment:
|
|
432
|
+
SMARTRAG_DB_HOST: db
|
|
433
|
+
SMARTRAG_DB_NAME: smart_rag_development
|
|
434
|
+
SMARTRAG_DB_USER: smart_rag_user
|
|
435
|
+
SMARTRAG_DB_PASSWORD: your_secure_password
|
|
436
|
+
OPENAI_API_KEY: ${OPENAI_API_KEY}
|
|
437
|
+
volumes:
|
|
438
|
+
- .:/app
|
|
439
|
+
stdin_open: true
|
|
440
|
+
tty: true
|
|
441
|
+
|
|
442
|
+
volumes:
|
|
443
|
+
postgres_data:
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
启动:
|
|
447
|
+
|
|
448
|
+
```bash
|
|
449
|
+
docker-compose up -d
|
|
450
|
+
docker-compose exec app bash
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
## 生产环境配置
|
|
454
|
+
|
|
455
|
+
### 1. 数据库优化
|
|
456
|
+
|
|
457
|
+
```sql
|
|
458
|
+
-- 创建分区表 (对于大型数据集)
|
|
459
|
+
CREATE TABLE embeddings_2024 PARTITION OF embeddings
|
|
460
|
+
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');
|
|
461
|
+
|
|
462
|
+
-- 创建更具体的索引
|
|
463
|
+
CREATE INDEX CONCURRENTLY idx_embeddings_cosine ON embeddings
|
|
464
|
+
USING ivfflat (vector vector_cosine_ops)
|
|
465
|
+
WITH (lists = 100);
|
|
466
|
+
|
|
467
|
+
-- 自动清理配置
|
|
468
|
+
ALTER TABLE embeddings SET (autovacuum_vacuum_scale_factor = 0.1);
|
|
469
|
+
ALTER TABLE embeddings SET (autovacuum_analyze_scale_factor = 0.05);
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### 2. 连接池配置
|
|
473
|
+
|
|
474
|
+
```yaml
|
|
475
|
+
# config/smart_rag.yml
|
|
476
|
+
production:
|
|
477
|
+
database:
|
|
478
|
+
pool: 25 # 增加连接池
|
|
479
|
+
timeout: 5000 # 连接超时
|
|
480
|
+
connect_timeout: 10 # 连接尝试超时
|
|
481
|
+
keepalives: true
|
|
482
|
+
keepalives_idle: 600
|
|
483
|
+
keepalives_interval: 60
|
|
484
|
+
keepalives_count: 5
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
### 3. 监控和日志
|
|
488
|
+
|
|
489
|
+
```ruby
|
|
490
|
+
# 配置结构化日志
|
|
491
|
+
require 'logger'
|
|
492
|
+
require 'json'
|
|
493
|
+
|
|
494
|
+
class JsonLogger < Logger
|
|
495
|
+
def format_message(severity, datetime, progname, msg)
|
|
496
|
+
{
|
|
497
|
+
timestamp: datetime.iso8601,
|
|
498
|
+
level: severity,
|
|
499
|
+
message: msg,
|
|
500
|
+
pid: Process.pid
|
|
501
|
+
}.to_json + "\n"
|
|
502
|
+
end
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
SmartRAG.logger = JsonLogger.new('log/smart_rag.log')
|
|
506
|
+
SmartRAG.logger.level = Logger::INFO
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
### 4. 备份策略
|
|
510
|
+
|
|
511
|
+
```bash
|
|
512
|
+
#!/bin/bash
|
|
513
|
+
# backup.sh
|
|
514
|
+
|
|
515
|
+
# 数据库备份
|
|
516
|
+
pg_dump -U smart_rag_user -h localhost smart_rag_development > backups/smart_rag_$(date +%Y%m%d).sql
|
|
517
|
+
|
|
518
|
+
# 向量化备份 (可选)
|
|
519
|
+
psql -U smart_rag_user -h localhost -d smart_rag_development -c "COPY embeddings TO 'backups/embeddings_$(date +%Y%m%d).csv' CSV;"
|
|
520
|
+
|
|
521
|
+
# 压缩
|
|
522
|
+
gzip backups/*_$(date +%Y%m%d).*
|
|
523
|
+
|
|
524
|
+
# 清理旧备份 (保留30天)
|
|
525
|
+
find backups/ -name "*.gz" -mtime +30 -delete
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
## 故障排除
|
|
529
|
+
|
|
530
|
+
### 问题 1: pgvector 安装失败
|
|
531
|
+
|
|
532
|
+
**症状**: `ERROR: could not open extension control file`
|
|
533
|
+
|
|
534
|
+
**解决**:
|
|
535
|
+
```bash
|
|
536
|
+
# 确保 PostgreSQL dev 包已安装
|
|
537
|
+
sudo apt-get install postgresql-server-dev-16
|
|
538
|
+
|
|
539
|
+
# 重新编译 pgvector
|
|
540
|
+
cd pgvector
|
|
541
|
+
clean && make
|
|
542
|
+
sudo make install
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
### 问题 2: pg_jieba 中文分词不工作
|
|
546
|
+
|
|
547
|
+
**症状**: `ERROR: text search configuration "jieba" does not exist`
|
|
548
|
+
|
|
549
|
+
**解决**:
|
|
550
|
+
```bash
|
|
551
|
+
# pg_jieba 使用不同的配置名
|
|
552
|
+
sudo -u postgres psql
|
|
553
|
+
|
|
554
|
+
-- 检查可用配置
|
|
555
|
+
SELECT * FROM pg_ts_config;
|
|
556
|
+
|
|
557
|
+
-- pg_jieba 可能使用 jiebacfg
|
|
558
|
+
-- 更新种子数据
|
|
559
|
+
UPDATE text_search_configs SET config_name = 'jiebacfg' WHERE language_code = 'zh';
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
### 问题 3: 向量维度不匹配
|
|
563
|
+
|
|
564
|
+
**症状**: `ERROR: expected 1024 dimensions, not 768`
|
|
565
|
+
|
|
566
|
+
**解决**:
|
|
567
|
+
```ruby
|
|
568
|
+
# 检查嵌入模型配置
|
|
569
|
+
config = {
|
|
570
|
+
llm: {
|
|
571
|
+
model: 'text-embedding-ada-002', # OpenAI: 1536维
|
|
572
|
+
# model: 'text-embedding-3-small', # OpenAI: 1536维
|
|
573
|
+
# 或自定义维度
|
|
574
|
+
dimensions: 1024 # 确保与迁移一致
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
### 问题 4: 连接池耗尽
|
|
580
|
+
|
|
581
|
+
**症状**: `Sequel::PoolTimeout: timeout: 5.0`
|
|
582
|
+
|
|
583
|
+
**解决**:
|
|
584
|
+
```ruby
|
|
585
|
+
# 增加连接池和超时
|
|
586
|
+
config = {
|
|
587
|
+
database: {
|
|
588
|
+
pool: 50, # 增加池大小
|
|
589
|
+
timeout: 10000, # 增加超时
|
|
590
|
+
max_connections: 100
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
### 问题 5: markitdown 找不到
|
|
596
|
+
|
|
597
|
+
**症状**: `Errno::ENOENT: No such file or directory - markitdown`
|
|
598
|
+
|
|
599
|
+
**解决**:
|
|
600
|
+
```bash
|
|
601
|
+
# 检查 Python 路径
|
|
602
|
+
which python3
|
|
603
|
+
which markitdown
|
|
604
|
+
|
|
605
|
+
# 如果不在 PATH,配置完整路径
|
|
606
|
+
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
|
|
607
|
+
source ~/.bashrc
|
|
608
|
+
|
|
609
|
+
# 或在 config 中指定
|
|
610
|
+
markitdown:
|
|
611
|
+
python_path: '/usr/bin/python3'
|
|
612
|
+
markitdown_path: '/usr/local/bin/markitdown'
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
## 验证步骤
|
|
616
|
+
|
|
617
|
+
运行以下命令验证安装:
|
|
618
|
+
|
|
619
|
+
```bash
|
|
620
|
+
# 1. 检查 PostgreSQL 版本
|
|
621
|
+
psql --version # 应该显示 16.x
|
|
622
|
+
|
|
623
|
+
# 2. 检查扩展
|
|
624
|
+
psql -U smart_rag_user -d smart_rag_development -c "SELECT * FROM pg_extension WHERE extname IN ('vector', 'pg_jieba');"
|
|
625
|
+
|
|
626
|
+
# 3. 检查 markitdown
|
|
627
|
+
markitdown --version
|
|
628
|
+
|
|
629
|
+
# 4. 运行快速测试
|
|
630
|
+
bundle exec rspec spec/models --format documentation
|
|
631
|
+
|
|
632
|
+
# 5. 运行集成测试
|
|
633
|
+
bundle exec rspec spec/integration/api_end_to_end_workflow_spec.rb
|
|
634
|
+
|
|
635
|
+
# 预期结果: 所有测试应该通过
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
## 下一步
|
|
639
|
+
|
|
640
|
+
安装完成后,查看:
|
|
641
|
+
- [API 文档](API_DOCUMENTATION.md) - 完整的 API 参考
|
|
642
|
+
- [使用示例](USAGE_EXAMPLES.md) - 实际使用示例
|
|
643
|
+
- [性能优化](PERFORMANCE_TUNE.md) - 性能调优指南
|
|
644
|
+
|
|
645
|
+
## 支持
|
|
646
|
+
|
|
647
|
+
如果遇到问题:
|
|
648
|
+
1. 检查 [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
|
|
649
|
+
2. 查看 [FAQ](FAQ.md)
|
|
650
|
+
3. 提交 Issue: https://github.com/your-org/smart_rag/issues
|