37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
|
|
from pydantic import BaseModel, Field
|
||
|
|
|
||
|
|
|
||
|
|
class LearningAssistantChatRequest(BaseModel):
|
||
|
|
"""学习助手请求:普通用户面向机构知识库提出医学学习问题。"""
|
||
|
|
|
||
|
|
question: str = Field(..., min_length=2, max_length=1000, description="用户问题")
|
||
|
|
top_k: int | None = Field(default=None, ge=1, le=10, description="最终返回给 LLM 的来源片段数")
|
||
|
|
score_threshold: float | None = Field(default=None, ge=0, le=1, description="向量相似度过滤阈值")
|
||
|
|
|
||
|
|
|
||
|
|
class LearningAssistantSource(BaseModel):
|
||
|
|
"""学习助手来源:记录 PDF 文档、页码和引用片段。"""
|
||
|
|
|
||
|
|
document_id: int
|
||
|
|
document_title: str | None = None
|
||
|
|
file_name: str
|
||
|
|
page_start: int
|
||
|
|
page_end: int
|
||
|
|
chunk_uid: str
|
||
|
|
score: float
|
||
|
|
quote: str
|
||
|
|
|
||
|
|
|
||
|
|
class LearningAssistantChatResponse(BaseModel):
|
||
|
|
"""学习助手回答:返回答案、知识库命中状态、循证来源和耗时。"""
|
||
|
|
|
||
|
|
answer: str
|
||
|
|
retrieval_hit: bool
|
||
|
|
sources: list[LearningAssistantSource] = Field(default_factory=list)
|
||
|
|
retrieval_error: str | None = None
|
||
|
|
model: str | None = None
|
||
|
|
embedding_latency_ms: int | None = None
|
||
|
|
search_latency_ms: int | None = None
|
||
|
|
llm_latency_ms: int | None = None
|
||
|
|
total_latency_ms: int | None = None
|