| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- """
- 搜索相关的Pydantic模型定义
- 该模块定义了用于图像和文本搜索的请求和响应模型。
- """
- from pydantic import BaseModel, Field, field_validator
- from typing import List, Optional
- class SearchRequest(BaseModel):
- """
- 搜索请求模型
-
- 支持通过图像URL或文本进行相似性搜索。
- 至少需要提供 image_url 或 matching_text 其中之一。
-
- Attributes:
- image_url: 用于图像搜索的图片URL (可选)
- matching_text: 用于文本匹配搜索的查询文本 (可选)
- topn: 返回的最大结果数量,默认为10,范围1-100
- """
- database_ids: List[str] = Field(
- default=[],
- description="知识库id",
- examples=["database_id1", "database_id2"]
- )
- database_ids_str: Optional[str] = Field(
- default=[],
- description="知识库id",
- examples=["database_id1", "database_id2"]
- )
- image_url: Optional[str] = Field(
- default=None,
- description="用于图像搜索的图片URL",
- examples=["https://example.com/image.jpg"]
- )
- matching_text: Optional[str] = Field(
- default=None,
- description="用于文本匹配搜索的查询文本",
- examples=["搜索关键词"]
- )
- topk: int = Field(
- default=10,
- ge=1,
- le=100,
- description="返回的最大结果数量"
- )
- score_threshold: float = Field(
- default=0.0,
- ge=0.0,
- le=1.0,
- description="相似度分数阈值"
- )
- kb_ids_str: Optional[str] = Field(
- default=None,
- description="知识库id",
- )
- kb_id: List[str] = Field(
- default=None,
- description="知识库id",
- examples=["kb_id1", "kb_id2"]
- )
- @field_validator('image_url')
- @classmethod
- def validate_image_url(cls, v: Optional[str]) -> Optional[str]:
- """验证图片URL格式"""
- if v is not None and v.strip() == "":
- return None
- return v
-
- @field_validator('matching_text')
- @classmethod
- def validate_matching_text(cls, v: Optional[str]) -> Optional[str]:
- """验证匹配文本"""
- if v is not None and v.strip() == "":
- return None
- return v
-
- def model_post_init(self, __context) -> None:
- """模型初始化后验证:确保至少提供一个搜索条件"""
- if self.image_url is None and self.matching_text is None:
- raise ValueError("必须提供 image_url 或 matching_text 其中至少一个")
|