diff --git a/astrbot/core/provider/sources/bailian_rerank_source.py b/astrbot/core/provider/sources/bailian_rerank_source.py index 9e079d4a9..a515d2b9d 100644 --- a/astrbot/core/provider/sources/bailian_rerank_source.py +++ b/astrbot/core/provider/sources/bailian_rerank_source.py @@ -33,6 +33,8 @@ class BailianNetworkError(BailianRerankError): class BailianRerankProvider(RerankProvider): """阿里云百炼文本重排序适配器.""" + QWEN3_RERANK_MODEL = "qwen3-rerank" + def __init__(self, provider_config: dict, provider_settings: dict) -> None: super().__init__(provider_config, provider_settings) self.provider_config = provider_config @@ -83,19 +85,35 @@ class BailianRerankProvider(RerankProvider): Returns: 请求载荷字典 """ + normalized_model = self.model.strip().lower() + normalized_top_n = top_n if top_n is not None and top_n > 0 else None + + # qwen3-rerank follows a model-specific payload: + # query/documents/top_n/instruct should be at the top level. + if normalized_model == self.QWEN3_RERANK_MODEL: + payload = { + "model": self.model, + "query": query, + "documents": documents, + } + if normalized_top_n is not None: + payload["top_n"] = normalized_top_n + if self.instruct: + payload["instruct"] = self.instruct + if self.return_documents: + logger.warning( + "qwen3-rerank does not support return_documents; " + "this option will be ignored." + ) + return payload + base = {"model": self.model, "input": {"query": query, "documents": documents}} params = { k: v for k, v in [ - ("top_n", top_n if top_n is not None and top_n > 0 else None), + ("top_n", normalized_top_n), ("return_documents", True if self.return_documents else None), - ( - "instruct", - self.instruct - if self.instruct and self.model == "qwen3-rerank" - else None, - ), ] if v is not None }