This commit is contained in:
@@ -27,7 +27,7 @@ from .base import (
|
||||
FallbackServiceChain,
|
||||
SingletonServiceManager
|
||||
)
|
||||
from app.config import (
|
||||
from ..config import (
|
||||
LLAMACPP_RERANKER_URL,
|
||||
LLAMACPP_API_KEY,
|
||||
ZHIPUAI_API_KEY,
|
||||
@@ -92,20 +92,33 @@ class LocalLlamaCppRerankService(BaseRerankService):
|
||||
"documents": documents,
|
||||
}
|
||||
|
||||
logger.info(f"[LocalLlamaCppRerank] 调用 rerank API: {base}/rerank")
|
||||
logger.info(f"[LocalLlamaCppRerank] 请求 payload: query={query[:50]}, documents数量={len(documents)}")
|
||||
|
||||
with httpx.Client(timeout=120) as client:
|
||||
response = client.post(
|
||||
f"{base}/rerank",
|
||||
headers=headers,
|
||||
json=payload,
|
||||
)
|
||||
response.raise_for_status()
|
||||
logger.info(f"[LocalLlamaCppRerank] 响应状态码: {response.status_code}")
|
||||
|
||||
if response.status_code != 200:
|
||||
logger.error(f"[LocalLlamaCppRerank] 请求失败: {response.status_code}")
|
||||
logger.error(f"[LocalLlamaCppRerank] 响应内容: {response.text[:500]}")
|
||||
response.raise_for_status()
|
||||
|
||||
data = response.json()
|
||||
logger.info(f"[LocalLlamaCppRerank] 响应数据类型: {type(data)}")
|
||||
|
||||
if isinstance(data, dict) and "results" in data:
|
||||
results = data["results"]
|
||||
results_sorted = sorted(results, key=lambda x: x["index"])
|
||||
return [item["relevance_score"] for item in results_sorted]
|
||||
scores = [item["relevance_score"] for item in results_sorted]
|
||||
logger.info(f"[LocalLlamaCppRerank] 返回 {len(scores)} 个得分")
|
||||
return scores
|
||||
else:
|
||||
logger.error(f"[LocalLlamaCppRerank] 未知响应格式: {type(data)}")
|
||||
raise ValueError(f"未知的 rerank API 响应格式: {data}")
|
||||
|
||||
|
||||
@@ -207,11 +220,13 @@ class LLMFallbackRerankService(BaseRerankService):
|
||||
if not documents:
|
||||
return []
|
||||
|
||||
logger.info(f"[LLMFallbackRerank] 开始为 {len(documents)} 个文档打分")
|
||||
scores = []
|
||||
for doc in documents:
|
||||
for i, doc in enumerate(documents):
|
||||
score = self._score_single_document(query, doc)
|
||||
scores.append(score)
|
||||
|
||||
logger.info(f"[LLMFallbackRerank] doc[{i}] score={score:.4f}")
|
||||
|
||||
return scores
|
||||
|
||||
def _score_single_document(self, query: str, document: str) -> float:
|
||||
|
||||
Reference in New Issue
Block a user