# ============================================================================= # RAGFlow API 数据模型 # ============================================================================= # 说明:定义 RAGFlow API 请求/响应的 Pydantic 数据模型 # 参考:https://ragflow.io/docs/http_api_reference from typing import Any, Dict, List, Optional from pydantic import BaseModel, Field class RetrievalChunk(BaseModel): """检索返回的单个文本块。 Attributes: id: 块唯一ID content: 块内容文本 document_id: 所属文档ID document_keyword: 所属文档名称 similarity: 综合相似度分数 term_similarity: 关键词相似度 vector_similarity: 向量相似度 highlight: 高亮标记的内容(可选) """ id: str = Field(default="", description="块唯一ID") content: str = Field(default="", description="块内容文本") document_id: str = Field(default="", description="所属文档ID") document_keyword: str = Field(default="", description="所属文档名称") similarity: float = Field(default=0.0, description="综合相似度分数") term_similarity: float = Field(default=0.0, description="关键词相似度") vector_similarity: float = Field(default=0.0, description="向量相似度") highlight: Optional[str] = Field(default=None, description="高亮标记的内容") model_config = {"from_attributes": True} class DocAggregate(BaseModel): """文档聚合统计。 Attributes: doc_id: 文档ID doc_name: 文档名称 count: 命中的块数量 """ doc_id: str = Field(default="", description="文档ID") doc_name: str = Field(default="", description="文档名称") count: int = Field(default=0, description="命中块数量") model_config = {"from_attributes": True} class RetrievalResult(BaseModel): """检索结果。 Attributes: chunks: 命中的文本块列表 doc_aggs: 按文档聚合统计 total: 命中总数 """ chunks: List[RetrievalChunk] = Field(default_factory=list, description="命中文本块列表") doc_aggs: List[DocAggregate] = Field(default_factory=list, description="文档聚合统计") total: int = Field(default=0, description="命中总数") model_config = {"from_attributes": True} class DatasetInfo(BaseModel): """数据集(知识库)信息。 Attributes: id: 数据集ID name: 数据集名称 chunk_method: 分块方法 permission: 权限 document_count: 文档数量 embedding_model: 向量模型 create_time: 创建时间 update_time: 更新时间 """ id: str = Field(default="", description="数据集ID") name: str = Field(default="", description="数据集名称") chunk_method: str = Field(default="naive", description="分块方法") permission: str = Field(default="me", description="权限") document_count: int = Field(default=0, description="文档数量") embedding_model: str = Field(default="", description="向量模型") create_time: Optional[str] = Field(default=None, description="创建时间") update_time: Optional[str] = Field(default=None, description="更新时间") model_config = {"from_attributes": True} class DocumentInfo(BaseModel): """文档信息。 Attributes: id: 文档ID name: 文档名称 chunk_method: 分块方法 chunk_count: 块数量 create_time: 创建时间 update_time: 更新时间 """ id: str = Field(default="", description="文档ID") name: str = Field(default="", description="文档名称") chunk_method: str = Field(default="naive", description="分块方法") chunk_count: int = Field(default=0, description="块数量") create_time: Optional[str] = Field(default=None, description="创建时间") update_time: Optional[str] = Field(default=None, description="更新时间") model_config = {"from_attributes": True}