51 lines
2.8 KiB
Python
51 lines
2.8 KiB
Python
"""RAG 问答记录模型。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Optional
|
|
|
|
from sqlalchemy import BigInteger, ForeignKey, Integer, Text, VARCHAR
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from .base import Base
|
|
from .types import JSONB
|
|
|
|
|
|
class QARecord(Base):
|
|
__tablename__ = "qa_records"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
question: Mapped[str] = mapped_column(Text, nullable=False)
|
|
answer: Mapped[str] = mapped_column(Text, nullable=False)
|
|
sources: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
intent: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, default="question")
|
|
domains_used: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
response_time_ms: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
|
|
asked_by: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
asked_via: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, default="pmflow", index=True)
|
|
project_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
session_id: Mapped[Optional[int]] = mapped_column(
|
|
Integer,
|
|
ForeignKey("qa_sessions.id", ondelete="SET NULL"),
|
|
nullable=True,
|
|
index=True,
|
|
)
|
|
turn_index: Mapped[int] = mapped_column(Integer, nullable=False, default=1)
|
|
source_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
|
|
source_chat_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True)
|
|
source_sender_open_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True)
|
|
reply_to_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True)
|
|
root_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True)
|
|
conversation_scope_key: Mapped[Optional[str]] = mapped_column(VARCHAR(160), nullable=True, index=True)
|
|
anchor_kind: Mapped[Optional[str]] = mapped_column(VARCHAR(32), nullable=True)
|
|
anchor_ref: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True)
|
|
routing_snapshot: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
answer_mode: Mapped[Optional[str]] = mapped_column(VARCHAR(32), nullable=True)
|
|
grounding_status: Mapped[Optional[str]] = mapped_column(VARCHAR(32), nullable=True)
|
|
policy_version: Mapped[Optional[str]] = mapped_column(VARCHAR(160), nullable=True)
|
|
citations: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
sources_used: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
evidence_pack: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
tool_trace: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
retrieval_metrics: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|