操作
機能 #256
未完了RAG AIアドバイザー - Phase 1 デバッグ: tiktoken Uint8Array 問題
ステータス:
解決
優先度:
高め
担当者:
-
開始日:
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)型使用)
実行済み修正¶
- Chunkモデル修正(snake_case対応)
- Embeddingモデル新規作成
- モデル関係性設定
- embeddingsController修正
- 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キャッシュ回避
代替解決アプローチ¶
- シンプルな文字列分割: tiktokenを使わずに文字数ベースの分割に変更
- ライブラリ更新: tiktoken最新版への更新
- 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/
操作