knowledge-base.entity.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import {
  2. Column,
  3. CreateDateColumn,
  4. Entity,
  5. PrimaryGeneratedColumn,
  6. UpdateDateColumn,
  7. ManyToMany,
  8. } from 'typeorm';
  9. import { KnowledgeGroup } from '../knowledge-group/knowledge-group.entity';
  10. export enum FileStatus {
  11. PENDING = 'pending',
  12. INDEXING = 'indexing',
  13. EXTRACTED = 'extracted', // テキスト抽出が完了し、データベースに保存されました
  14. VECTORIZED = 'vectorized', // ベクトル化が完了し、ES にインデックスされました
  15. FAILED = 'failed',
  16. }
  17. export enum ProcessingMode {
  18. FAST = 'fast', // 高速モード - Tika を使用
  19. PRECISE = 'precise', // 精密モード - Vision Pipeline を使用
  20. }
  21. @Entity('knowledge_bases')
  22. export class KnowledgeBase {
  23. @PrimaryGeneratedColumn('uuid')
  24. id: string;
  25. @Column({ name: 'original_name' })
  26. originalName: string;
  27. @Column({ name: 'storage_path' })
  28. storagePath: string;
  29. @Column({ type: 'integer', default: 0 })
  30. size: number;
  31. @Column({ length: 100, nullable: true })
  32. mimetype: string;
  33. @Column({
  34. type: 'simple-enum',
  35. enum: FileStatus,
  36. default: FileStatus.PENDING,
  37. })
  38. status: FileStatus;
  39. @Column({ name: 'user_id', nullable: true }) // 暫定的に空を許可(デバッグ用)、将来的には必須にすべき
  40. userId: string;
  41. @Column({ type: 'text', nullable: true })
  42. content: string; // Tika で抽出されたテキスト内容を保存
  43. // インデックス設定パラメータ
  44. @Column({ name: 'chunk_size', type: 'integer', default: 1000 })
  45. chunkSize: number;
  46. @Column({ name: 'chunk_overlap', type: 'integer', default: 200 })
  47. chunkOverlap: number;
  48. @Column({ name: 'embedding_model_id', nullable: true })
  49. embeddingModelId: string;
  50. @Column({
  51. type: 'simple-enum',
  52. enum: ProcessingMode,
  53. default: ProcessingMode.FAST,
  54. name: 'processing_mode',
  55. })
  56. processingMode: ProcessingMode;
  57. @Column({ type: 'json', nullable: true })
  58. metadata: any; // 追加のメタデータを保存(画像の説明、信頼度など)
  59. @Column({ name: 'pdf_path', nullable: true })
  60. pdfPath: string; // PDF ファイルパス(プレビュー用)
  61. @ManyToMany(() => KnowledgeGroup, (group) => group.knowledgeBases)
  62. groups: KnowledgeGroup[];
  63. @CreateDateColumn({ name: 'created_at' })
  64. createdAt: Date;
  65. @UpdateDateColumn({ name: 'updated_at' })
  66. updatedAt: Date;
  67. }