プロジェクト

全般

プロフィール

バグ #267

未完了

Phase C 詳細実装仕様書: Advanced RAG & Vector Search 実装

Redmine Admin さんが3日前に追加. 3日前に更新.

ステータス:
新規
優先度:
急いで
担当者:
-
開始日:
2025-06-05
期日:
進捗率:

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追加実装対象:

  1. Advanced RAG Pipeline - 高度な検索・回答生成
  2. Multi-Modal Processing - 複数ファイル形式対応
  3. Performance Optimization - 並列処理・キャッシュ最適化
  4. Chat Interface - RAG統合チャットシステム
  5. 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実装が体系的・効率的に進行可能になります! 🎯

他の形式にエクスポート: Atom PDF