プロジェクト

全般

プロフィール

機能 #256

未完了

RAG AIアドバイザー - Phase 1 デバッグ: tiktoken Uint8Array 問題

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

ステータス:
解決
優先度:
高め
担当者:
-
開始日:
2025-06-05
期日:
進捗率:

0%

予定工数:

説明

問題概要

task2.call2arm.com のRAG AIアドバイザー開発において、Phase 1の埋め込み生成段階で重要な問題が発生しています。

技術的問題

エラー: ValidationError [SequelizeValidationError]: string violation: content cannot be an array or an object

根本原因: OpenAIServiceのsplitTextIntoChunksメソッドがUint8Arrayを返しており、Sequelize Documentモデルが文字列を期待しているためにバリデーションエラーが発生。

現在の状況

  • ✅ OpenAI API統合は正常動作(単一埋め込み生成テスト成功)
  • ✅ PostgreSQL + pgvector データベース接続正常
  • ✅ Sequelize ORM設定完了
  • ❌ ドキュメント処理API(/api/embeddings/process-document)でエラー発生

技術的詳細

tiktoken ライブラリの問題

// 現在の問題のあるコード
const chunkText = this.encoding.decode(chunkTokens); // Uint8Arrayを返す
chunks.push(chunkText); // Sequelizeがstring期待だがUint8Array受信

// 必要な修正
const decodedBytes = this.encoding.decode(chunkTokens);
const chunkText = new TextDecoder().decode(decodedBytes);
chunks.push(chunkText);

データベーススキーマ不整合の発見と修正

  • documentsテーブル: 正常
  • document_chunksテーブル: フィールド名不一致修正済み(chunk_index, token_count)
  • embeddingsテーブル: 別テーブル化(vector(1536)型使用)

実行済み修正

  1. Chunkモデル修正(snake_case対応)
  2. Embeddingモデル新規作成
  3. モデル関係性設定
  4. embeddingsController修正
  5. tiktoken decode問題修正試行

次回セッション時の作業計画

即座実行事項

# 1. ファイルキャッシュクリア+コンテナ完全再構築
docker stop task2-api && docker rm task2-api
docker rmi task2-service_task2-api
docker-compose build --no-cache task2-api
docker-compose up -d task2-api

# 2. tiktoken問題の完全解決
# ファイル直接編集でNode.jsキャッシュ回避

代替解決アプローチ

  1. シンプルな文字列分割: tiktokenを使わずに文字数ベースの分割に変更
  2. ライブラリ更新: tiktoken最新版への更新
  3. Buffer変換: Uint8ArrayからBufferを経由した文字列変換

成功基準

curl -X POST -k -H 'Host: task2.call2arm.com' -H 'Content-Type: application/json' \
  -d '{"text": "RAG AIアドバイザー Phase 1 完了テスト!", "title": "Phase 1 完了記念ドキュメント"}' \
  https://localhost/api/embeddings/process-document

期待レスポンス:

{
  "message": "ドキュメントの処理が完了しました",
  "document": {...},
  "chunks": [...],
  "processingTime": "...",
  "tokenCount": "..."
}

影響範囲

  • Phase 1 完了が遅延
  • Phase 2(ベクトル検索)開始に影響
  • 全体の6週間開発スケジュールに軽微な影響

環境情報

  • VPS: Ubuntu 24.04.2 @ 85.131.243.51
  • コンテナ: task2-api (Node.js 18-alpine)
  • データベース: PostgreSQL + pgvector
  • 開発環境: /var/docker/task2-service/

Redmine Admin さんが3日前に更新

進捗更新: tiktoken問題対策実施

実施済み対策

  1. ✅ OpenAIService.splitTextIntoChunks() を文字数ベース分割に変更

    • tiktokenのUint8Array問題を回避
    • シンプルな文字列分割アルゴリズムを実装
  2. ✅ データベースモデル修正完了

    • Chunkモデル: snake_case対応 (chunk_index, token_count)
    • Embeddingモデル: 新規作成 (vector(1536)型)
    • リレーションシップ設定
  3. ✅ コンテナ完全再構築実行

    • 古いイメージ削除
    • --no-cache でクリーンビルド

現在の課題

構文エラー: embeddingsController.js の構文問題でコンテナが起動失敗

次の対策

  1. embeddingsController.js の完全作成し直し
  2. 最小限の機能でPhase 1テスト実行
  3. 段階的な機能追加

期待される解決時間

約30分以内でPhase 1完了予定

Redmine Admin さんが3日前に更新

  • ステータス新規 から 進行中 に変更

重要な問題発見: Docker ボリュームマウントの不整合

問題の詳細

  • ホスト側でファイル修正済みだがコンテナ内に反映されない
  • /app/src/routes/embeddings.js:31generateBatchEmbeddings メソッドが undefined
  • 複数回のファイル修正・コンテナ再構築でも同じエラーが永続

技術的調査結果

  1. ✅ OpenAI API統合: 正常動作確認済み
  2. ✅ 文字数ベース分割: 実装完了
  3. ✅ データベーススキーマ: 修正完了
  4. ❌ Docker ボリュームマウント: 不整合

推奨解決策

即座実行可能な代替案

  1. 新規プロジェクトディレクトリ作成: 完全クリーン環境
  2. 最小機能版API: Phase1必須機能のみ実装
  3. Docker Compose設定見直し: ボリュームマウント再設定

Phase 1完了への最短ルート

# 新規ディレクトリで最小機能版を構築
mkdir /var/docker/rag-simple
# 必要最小限のファイルのみで埋め込み処理API構築
# tiktoken問題回避済みのOpenAIService使用

Phase 2先行実装提案

現在の状況を活用して、Phase 2のベクトル検索機能を先行実装することを提案します。

  1. 既存データベース活用: PostgreSQL+pgvectorは動作確認済み
  2. 検索API実装: /api/search/ エンドポイント群
  3. 統合テスト: Phase 1完了後の統合テスト準備

時間効率の最適化

  • Phase 1修正: 30分
  • Phase 2実装: 60分
  • 統合テスト: 30分
    → 2時間以内でPhase 1+2完了予定

Redmine Admin さんが3日前に更新

  • ステータス進行中 から 解決 に変更

🔄 チケット #256#257 移行

現状まとめ

  • 問題: ホットフィックスの繰り返しによる設計不透明化
  • 技術的課題: tiktoken, Docker, モジュール依存関係エラー
  • 根本原因: アーキテクチャ設計の解像度不足

次のアクション

チケット #257 にて以下を実施:

  1. 🔍 設計レビュー: 現状分析とアーキテクチャ可視化
  2. 📐 再設計: 堅牢なレイヤー分離アーキテクチャ構築
  3. 🚀 移行計画: 段階的実装戦略の策定

推奨作業方法

新しい会話セッションでの実施を推奨

  • 理由: アーキテクチャレビューは集中的な分析が必要
  • 目標: 2-3時間で完全な設計書と実装計画を完成
  • 成果物: チケット #257 に定義された成果物一式

このセッションでの成果

✅ 問題の根本原因特定
✅ 解決アプローチの明確化
✅ 次フェーズのチケット作成
✅ 効率的な作業戦略の策定


次回セッション開始時: チケット #257 の内容に基づいてアーキテクチャレビューを実施してください。

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