バグ #267
未完了Phase C 詳細実装仕様書: Advanced RAG & Vector Search 実装
0%
説明
Phase C 詳細実装仕様書¶
Advanced RAG & Vector Search Implementation¶
🎯 実装範囲の確認¶
既存実装状況 (2025-06-05調査結果):
- ✅ Vector Database: PostgreSQL + pgvector (task2-vector-db)
- ✅ Redis Cache: task2-redis (キャッシュサービス)
- ✅ Search Engine: Meilisearch (task2-search)
- ✅ Basic RAG Pipeline: 基本的なembeddings/documents機能
- ✅ File Processing: multer, pdf-parse, mammoth実装済み
- ✅ OpenAI Integration: openai, tiktoken実装済み
Phase C追加実装対象:
- Advanced RAG Pipeline - 高度な検索・回答生成
- Multi-Modal Processing - 複数ファイル形式対応
- Performance Optimization - 並列処理・キャッシュ最適化
- Chat Interface - RAG統合チャットシステム
- Analytics & Monitoring - 使用統計・パフォーマンス監視
📚 関数仕様・API設計¶
1. VectorDatabaseService¶
1.1 createDocument(documentData)
目的: 新しいドキュメントをベクトルDB投入
入力:
{
title: string,
content: string,
metadata: {
fileType: string,
originalName: string,
size: number,
tags: string[]
}
}
出力:
{
id: number,
title: string,
chunks: number,
embeddings: number,
status: 'processing' | 'completed' | 'failed'
}
エラー制御:
-
ValidationError
: 入力データ不正 -
DatabaseError
: DB接続・保存エラー -
EmbeddingError
: 埋め込み生成失敗
1.2 semanticSearch(query, options)
目的: セマンティック検索実行
入力:
query: string, // 検索クエリ
options: {
limit: number = 10,
threshold: number = 0.7,
filters: {
dateRange?: [Date, Date],
tags?: string[],
fileTypes?: string[]
}
}
出力:
{
results: [{
documentId: number,
chunkId: number,
content: string,
similarity: number,
metadata: object
}],
totalResults: number,
searchTime: number
}
1.3 updateEmbeddings(documentId)
目的: ドキュメント埋め込み再生成
入力: documentId: number
出力: { success: boolean, chunksUpdated: number }
2. RAGQueryService¶
2.1 generateAnswer(query, context)
目的: コンテキスト基づく回答生成
入力:
{
query: string,
context: [{
content: string,
source: string,
relevance: number
}],
options: {
model: 'gpt-4' | 'gpt-3.5-turbo',
maxTokens: number = 1000,
temperature: number = 0.3
}
}
出力:
{
answer: string,
sources: string[],
confidence: number,
tokens: {
prompt: number,
completion: number,
total: number
}
}
2.2 buildContext(searchResults, query)
目的: 検索結果から最適なコンテキスト構築
入力:
-
searchResults
: semanticSearch結果 -
query
: string
出力: 最適化されたコンテキスト配列
3. DocumentProcessingService¶
3.1 processFile(file, processingOptions)
目的: アップロードファイルの処理・分析
入力:
file: Express.Multer.File,
processingOptions: {
chunkSize: number = 1000,
overlap: number = 200,
extractMetadata: boolean = true,
generateSummary: boolean = true
}
出力:
{
document: {
id: number,
title: string,
summary: string
},
chunks: [{
id: number,
content: string,
position: number
}],
metadata: {
pages: number,
words: number,
language: string,
extractedImages: number
}
}
3.2 extractContent(buffer, fileType)
目的: ファイル内容抽出(PDF, DOCX, TXT等)
入力:
-
buffer
: Buffer -
fileType
: string
出力:{ content: string, metadata: object }
4. CacheService¶
4.1 getEmbedding(text)
目的: 埋め込みキャッシュ取得
入力: text: string
出力: number[] | null
4.2 setEmbedding(text, embedding, ttl)
目的: 埋め込みキャッシュ設定
入力:
text: string
embedding: number[]
-
ttl: number = 3600
出力:boolean
5. AnalyticsService¶
5.1 trackSearch(query, results, userId)
目的: 検索統計記録
入力: 検索クエリ、結果、ユーザーID
出力: { tracked: boolean }
5.2 getSearchAnalytics(timeRange)
目的: 検索統計取得
入力: timeRange: { start: Date, end: Date }
出力: 統計データオブジェクト
🏗️ API エンドポイント設計¶
1. Document Management API¶
POST /api/documents/upload
¶
認証: Required
Content-Type: multipart/form-data
Request:
{
file: File, // アップロードファイル
title?: string,
tags?: string[],
processingOptions?: {
chunkSize: number,
generateSummary: boolean
}
}
Response:
{
success: true,
document: {
id: number,
title: string,
status: string,
uploadedAt: string
},
processing: {
jobId: string,
estimatedTime: number
}
}
GET /api/documents
¶
認証: Required
Query Parameters:
-
page
: number = 1 -
limit
: number = 20 -
search
: string -
tags
: string[] -
sortBy
: 'created' | 'title' | 'size'
DELETE /api/documents/:id
¶
認証: Required
Response: { success: boolean, deleted: boolean }
2. Search API¶
POST /api/search/semantic
¶
認証: Required
Request:
{
query: string,
options?: {
limit: number,
threshold: number,
filters: object
}
}
Response:
{
results: SearchResult[],
metadata: {
totalResults: number,
searchTime: number,
queryEmbeddingTime: number
}
}
3. Chat API¶
POST /api/chat/message
¶
認証: Required
Request:
{
message: string,
sessionId?: string,
context?: {
useRAG: boolean = true,
maxSources: number = 5
}
}
Response:
{
response: string,
sessionId: string,
sources: [{
title: string,
content: string,
relevance: number
}],
metadata: {
model: string,
tokensUsed: number,
processingTime: number
}
}
🔧 依存関係・インストール順序¶
1. NPM Packages 追加インストール¶
# Phase C 新規パッケージ(優先順)
npm install --save \
# 1. Core Dependencies
openai@^4.20.1 \
tiktoken@^1.0.10 \
# 2. File Processing
multer@^1.4.5-lts.1 \
pdf-parse@^1.1.1 \
mammoth@^1.6.0 \
node-html-markdown@^1.3.0 \
# 3. Vector & Search
pgvector@^0.1.8 \
meilisearch@^0.37.0 \
# 4. Cache & Session
redis@^4.6.8 \
express-session@^1.17.3 \
# 5. Utilities
uuid@^9.0.1 \
lodash@^4.17.21 \
moment@^2.29.4
2. Development Dependencies¶
npm install --save-dev \
jest@^29.7.0 \
supertest@^6.3.3 \
@types/jest@^29.5.8 \
@types/multer@^1.4.11
3. Docker Services 起動順序¶
# 1. Infrastructure Services
docker-compose up -d task2-vector-db
docker-compose up -d task2-redis
docker-compose up -d task2-search
# 2. Wait for services to be ready
sleep 30
# 3. Application Services
docker-compose up -d task2-api
docker-compose up -d task2-ui
🏢 機能単位開発グループ¶
Group A: Core Infrastructure (1.5時間)¶
責任範囲: データベース・キャッシュ・基盤機能
実装対象:
- VectorDatabaseService 完全実装
- CacheService (Redis統合)
- Database Migration/Schema
- Health Check強化
担当ファイル:
src/services/VectorDatabaseService.js
src/services/CacheService.js
src/db/migrations/
src/health/
Group B: Document Processing (2時間)¶
責任範囲: ファイル処理・埋め込み生成
実装対象:
- DocumentProcessingService
- File upload handling
- Content extraction pipeline
- Chunking & embedding generation
担当ファイル:
src/services/DocumentProcessingService.js
src/controllers/documentsController.js
src/middleware/uploadMiddleware.js
src/utils/contentExtractor.js
Group C: Search & RAG Engine (2時間)¶
責任範囲: 検索・回答生成エンジン
実装対象:
- RAGQueryService
- SearchController
- Query optimization
- Context building
担当ファイル:
src/services/RAGQueryService.js
src/controllers/searchController.js
src/utils/queryOptimizer.js
src/services/ContextBuilder.js
Group D: Chat Interface (1.5時間)¶
責任範囲: チャット機能・ユーザーインターフェース
実装対象:
- ChatController
- Session management
- Real-time communication
- Frontend integration
担当ファイル:
src/controllers/chatController.js
src/services/ChatSessionService.js
src/routes/chat.js
- Frontend chat components
Group E: Analytics & Optimization (1時間)¶
責任範囲: 統計・監視・最適化
実装対象:
- AnalyticsService
- Performance monitoring
- Usage statistics
- Optimization algorithms
担当ファイル:
src/services/AnalyticsService.js
src/middleware/analyticsMiddleware.js
src/utils/performanceOptimizer.js
🔍 エラー制御・例外処理¶
Error Hierarchy¶
class RAGError extends Error {
constructor(message, code, details) {
super(message);
this.name = 'RAGError';
this.code = code;
this.details = details;
}
}
class VectorDatabaseError extends RAGError {}
class EmbeddingError extends RAGError {}
class DocumentProcessingError extends RAGError {}
class SearchError extends RAGError {}
Global Error Handler¶
// src/middleware/errorHandler.js
function errorHandler(err, req, res, next) {
if (err instanceof RAGError) {
return res.status(400).json({
error: err.name,
message: err.message,
code: err.code,
details: err.details
});
}
// Default error handling
res.status(500).json({
error: 'InternalServerError',
message: 'Something went wrong'
});
}
📊 テスト戦略¶
Unit Tests (60%+ coverage目標)¶
// 例: VectorDatabaseService.test.js
describe('VectorDatabaseService', () => {
test('should create document with valid data', async () => {
const result = await vectorService.createDocument(validDocData);
expect(result.id).toBeDefined();
expect(result.status).toBe('processing');
});
test('should perform semantic search', async () => {
const results = await vectorService.semanticSearch('test query');
expect(results.results).toBeArray();
expect(results.searchTime).toBeLessThan(2000);
});
});
Integration Tests¶
- API endpoint testing
- Database integration
- File processing pipeline
- End-to-end RAG workflow
Performance Tests¶
- Load testing (50+ concurrent users)
- Response time verification (< 2 seconds)
- Memory usage monitoring
🚀 実装開始チェックリスト¶
Pre-implementation¶
- 現在のサービス状態確認
- データベーススキーマ検証
- 環境変数設定確認
- 既存コード理解・分析
Phase C Implementation¶
- Group A: Core Infrastructure
- Group B: Document Processing
- Group C: Search & RAG Engine
- Group D: Chat Interface
- Group E: Analytics & Optimization
Post-implementation¶
- Unit test execution
- Integration test execution
- Performance test execution
- Documentation update
- Deployment verification
この詳細仕様書により、Phase C実装が体系的・効率的に進行可能になります! 🎯