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.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +252 -0
  3. data/.rspec +2 -0
  4. data/AGENTS.md +33 -0
  5. data/API_DOCUMENTATION.md +828 -0
  6. data/CHANGELOG.md +16 -1
  7. data/ER-diagram.mmd +144 -0
  8. data/Gemfile +50 -0
  9. data/Gemfile.lock +398 -0
  10. data/Hybrid_Reranking.md +171 -0
  11. data/README.en.md +420 -28
  12. data/README.md +534 -63
  13. data/Rakefile +268 -0
  14. data/SETUP_GUIDE.md +650 -0
  15. data/SmartChunking.md +180 -0
  16. data/USAGE_EXAMPLES.md +1002 -0
  17. data/config/llm_config.yml +4 -2
  18. data/config/smart_rag.yml +45 -1
  19. data/config.ru +15 -0
  20. data/db/migrations/006_create_text_search_configs.rb +3 -2
  21. data/db/migrations/008_create_embeddings.rb +5 -4
  22. data/db/migrations/012_add_metadata_to_source_sections.rb +11 -0
  23. data/db/migrations/013_create_media_jobs.rb +25 -0
  24. data/db/migrations/014_add_media_job_operations_indexes.rb +11 -0
  25. data/db/migrations/015_add_media_leases_and_objects.rb +80 -0
  26. data/db/migrations/016_add_document_principals_and_staging_references.rb +38 -0
  27. data/db/migrations/017_add_media_job_request_fingerprint.rb +48 -0
  28. data/db/seeds/text_search_configs.sql +3 -3
  29. data/design.md +1057 -0
  30. data/docs/API_DOCUMENTATION.md +838 -0
  31. data/docs/DOCUMENTATION_INDEX.en.md +60 -0
  32. data/docs/DOCUMENTATION_INDEX.md +65 -0
  33. data/docs/FIX_SUMMARY.md +256 -0
  34. data/docs/FIX_SUMMARY_COMPLETE.md +273 -0
  35. data/docs/Hybrid_Reranking.md +171 -0
  36. data/docs/MIGRATION_GUIDE.md +151 -0
  37. data/docs/PERFORMANCE_GUIDE.md +58 -0
  38. data/docs/SETUP_GUIDE.md +659 -0
  39. data/docs/SmartChunking.md +180 -0
  40. data/docs/USAGE_EXAMPLES.md +1008 -0
  41. data/docs/design.md +1057 -0
  42. data/docs/evidence_pack.md +211 -0
  43. data/docs/requirements.md +376 -0
  44. data/docs/retrieval_plan.md +251 -0
  45. data/docs/smartrag_improvement_plan.md +201 -0
  46. data/docs/smartrag_refactor.md +216 -0
  47. data/docs/todo.md +931 -0
  48. data/examples/common.rb +1 -1
  49. data/exe/smart-rag-db +163 -0
  50. data/exe/smart-rag-media-worker +34 -0
  51. data/lib/smart_rag/config.rb +12 -0
  52. data/lib/smart_rag/core/document_processor.rb +80 -16
  53. data/lib/smart_rag/core/local_content_store.rb +51 -0
  54. data/lib/smart_rag/core/media_extractors.rb +140 -0
  55. data/lib/smart_rag/core/media_job_queue.rb +353 -0
  56. data/lib/smart_rag/core/media_metadata_extractor.rb +188 -0
  57. data/lib/smart_rag/core/media_object_registry.rb +79 -0
  58. data/lib/smart_rag/core/media_processor.rb +228 -0
  59. data/lib/smart_rag/core/media_safety_policy.rb +61 -0
  60. data/lib/smart_rag/core/s3_content_store.rb +78 -0
  61. data/lib/smart_rag/core/transcript_normalizer.rb +44 -0
  62. data/lib/smart_rag/core/video_semantic_extractor.rb +130 -0
  63. data/lib/smart_rag/http_access_policy.rb +86 -0
  64. data/lib/smart_rag/http_app.rb +188 -0
  65. data/lib/smart_rag/models/embedding.rb +1 -1
  66. data/lib/smart_rag/models/research_topic.rb +1 -1
  67. data/lib/smart_rag/models/research_topic_section.rb +5 -0
  68. data/lib/smart_rag/models/research_topic_tag.rb +5 -0
  69. data/lib/smart_rag/models/search_log.rb +1 -1
  70. data/lib/smart_rag/models/section_fts.rb +5 -0
  71. data/lib/smart_rag/models/section_tag.rb +5 -0
  72. data/lib/smart_rag/models/source_document.rb +1 -1
  73. data/lib/smart_rag/models/source_section.rb +1 -1
  74. data/lib/smart_rag/models/tag.rb +1 -1
  75. data/lib/smart_rag/models/text_search_config.rb +5 -0
  76. data/lib/smart_rag/retrieve.rb +72 -1
  77. data/lib/smart_rag/services/embedding_service.rb +1 -1
  78. data/lib/smart_rag/services/fulltext_search_service.rb +11 -13
  79. data/lib/smart_rag/services/hybrid_search_service.rb +15 -11
  80. data/lib/smart_rag/services/summarization_service.rb +1 -1
  81. data/lib/smart_rag/services/tag_service.rb +1 -1
  82. data/lib/smart_rag/version.rb +1 -1
  83. data/lib/smart_rag.rb +264 -30
  84. data/patch_language.rb +27 -0
  85. data/requirements.md +376 -0
  86. data/source_documents_export.json +11072 -0
  87. data/todo.md +931 -0
  88. data/workers/analyze_content.rb +6 -2
  89. data/workers/get_embedding.rb +1 -1
  90. 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