knowledge.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from __future__ import annotations
  2. from sqlalchemy import Boolean, Float, ForeignKey, Integer, JSON, String, Text
  3. from sqlalchemy.orm import Mapped, mapped_column
  4. from app.db.base import Base, TimestampMixin, UUIDPrimaryKeyMixin
  5. class KnowledgeItem(UUIDPrimaryKeyMixin, TimestampMixin, Base):
  6. __tablename__ = "knowledge_items"
  7. mine_id: Mapped[str | None] = mapped_column(
  8. String(32), ForeignKey("mines.id", ondelete="SET NULL"), nullable=True, index=True
  9. )
  10. document_id: Mapped[str | None] = mapped_column(
  11. String(32), ForeignKey("business_documents.id", ondelete="SET NULL"), nullable=True
  12. )
  13. code: Mapped[str | None] = mapped_column(String(64), nullable=True, index=True)
  14. title: Mapped[str] = mapped_column(String(255), index=True)
  15. knowledge_type: Mapped[str] = mapped_column(String(32), index=True)
  16. category: Mapped[str] = mapped_column(String(64), default="", index=True)
  17. source_type: Mapped[str] = mapped_column(String(32), default="manual")
  18. source_ref: Mapped[str] = mapped_column(String(512), default="")
  19. content: Mapped[str] = mapped_column(Text)
  20. summary: Mapped[str] = mapped_column(Text, default="")
  21. tags: Mapped[list] = mapped_column(JSON, default=list)
  22. status: Mapped[str] = mapped_column(String(32), default="published", index=True)
  23. version: Mapped[str] = mapped_column(String(32), default="V1.0")
  24. confidence: Mapped[float | None] = mapped_column(Float, nullable=True)
  25. is_verified: Mapped[bool] = mapped_column(Boolean, default=False, index=True)
  26. verified_by: Mapped[str] = mapped_column(String(128), default="")
  27. metadata_json: Mapped[dict] = mapped_column("metadata", JSON, default=dict)
  28. class KnowledgeChunk(UUIDPrimaryKeyMixin, TimestampMixin, Base):
  29. __tablename__ = "knowledge_chunks"
  30. knowledge_id: Mapped[str] = mapped_column(
  31. String(32), ForeignKey("knowledge_items.id", ondelete="CASCADE"), index=True
  32. )
  33. chunk_index: Mapped[int] = mapped_column(Integer)
  34. title: Mapped[str] = mapped_column(String(255), default="")
  35. content: Mapped[str] = mapped_column(Text)
  36. token_count: Mapped[int] = mapped_column(Integer, default=0)
  37. vector_id: Mapped[str] = mapped_column(String(128), default="", index=True)
  38. embedding_model: Mapped[str] = mapped_column(String(128), default="")
  39. metadata_json: Mapped[dict] = mapped_column("metadata", JSON, default=dict)