dce9e31bde
- 新增 JWT 认证模块,支持登录/注册/用户管理 - 新增文件上传接口,支持 .txt/.md/.html/.pdf/.docx 等格式解析入库 - 新增检索结果 AI 总结功能 - 新增文本去重缓存机制 - 新增全局认证夹具简化测试 - 新增配置项与环境变量支持 - 完善文档与测试覆盖
53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
"""文档和总结相关的数据模型"""
|
||
|
||
from enum import StrEnum
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class SummaryLevel(StrEnum):
|
||
"""总结层级"""
|
||
|
||
L3 = "L3" # 完整三级:总结 → 大纲 → 内容大纲
|
||
L2_HALF = "L2.5" # 2.5 级回退:总结 → 内容大纲(跳过大纲)
|
||
|
||
|
||
class DocumentSummary(BaseModel):
|
||
"""文档三级总结结果"""
|
||
|
||
l1_summary: str = Field(description="L1 总结:一句话高度概括")
|
||
l2_outline: str | None = Field(default=None, description="L2 大纲:主要章节和关键主题")
|
||
l3_content_outline: str = Field(description="L3/L2.5 内容大纲:详细内容摘要")
|
||
level: SummaryLevel = Field(description="实际使用的总结层级")
|
||
|
||
|
||
class DocumentInput(BaseModel):
|
||
"""文档入库输入"""
|
||
|
||
text: str = Field(description="文档纯文本内容")
|
||
title: str = Field(default="", description="文档标题")
|
||
source: str = Field(default="", description="来源标识(文件路径/URL等)")
|
||
metadata: dict[str, str] = Field(default_factory=dict, description="附加元数据")
|
||
|
||
|
||
class ChunkModel(BaseModel):
|
||
"""文档分块结果"""
|
||
|
||
doc_id: str = Field(description="所属文档 ID")
|
||
chunk_index: int = Field(description="chunk 在文档内的序号")
|
||
text: str = Field(description="chunk 文本内容")
|
||
section_path: str = Field(default="", description="chunk 所在的章节路径")
|
||
|
||
|
||
class IngestionResult(BaseModel):
|
||
"""文档入库结果"""
|
||
|
||
document_id: str = Field(description="写入后的文档 ID")
|
||
summary: DocumentSummary = Field(description="三级总结结果")
|
||
category: str = Field(description="分类标签(主类目)")
|
||
collection: str = Field(description="写入的 Qdrant 集合名")
|
||
chunks_count: int = Field(default=0, description="写入的 chunk 数量")
|
||
tags: list[str] = Field(default_factory=list, description="附加分类标签")
|
||
category_confidence: float = Field(default=0.0, description="主类目分类置信度")
|
||
deduplicated: bool = Field(default=False, description="是否命中去重复用旧文档(True 时 document_id 为既有文档 ID)")
|