fix: 改进服务可用性检测 - 本地VLLM实际测试连接,智谱rerank降级到LLM方案
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m52s

This commit is contained in:
2026-05-01 02:15:02 +08:00
parent 704898a8ed
commit 3b16f7dd38
2 changed files with 37 additions and 28 deletions

View File

@@ -54,21 +54,42 @@ class LocalVLLMChatProvider(BaseServiceProvider[BaseChatModel]):
return False
try:
# 尝试创建一个简单的测试调用
from langchain_openai import ChatOpenAI
from pydantic import SecretStr
# 先测试主机名能否解析
import httpx
from urllib.parse import urlparse
llm = ChatOpenAI(
base_url=VLLM_BASE_URL,
api_key=SecretStr(LLM_API_KEY) if LLM_API_KEY else SecretStr("dummy"),
model=self._model,
timeout=10.0,
max_retries=1,
)
parsed_url = urlparse(VLLM_BASE_URL)
host = parsed_url.hostname
port = parsed_url.port or (80 if parsed_url.scheme == 'http' else 443)
# 简单的 ping 测试(不实际调用模型
logger.info(f"本地 VLLM 服务配置正确,准备使用: {self._model}")
return True
# 测试能否建立 TCP 连接(快速失败
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(2.0)
try:
sock.connect((host, port))
sock.close()
except Exception as e:
logger.warning(f"本地 VLLM 服务无法连接: {host}:{port} - {e}")
return False
# 再尝试调用简单的 API比如 models 接口)
client = httpx.Client(base_url=VLLM_BASE_URL.rstrip('/'), timeout=5.0)
headers = {}
if LLM_API_KEY:
headers["Authorization"] = f"Bearer {LLM_API_KEY}"
try:
response = client.get("/v1/models", headers=headers)
if response.status_code == 200:
logger.info(f"本地 VLLM 服务可用: {self._model}")
return True
except Exception:
pass
# 如果 /v1/models 失败,也认为服务不可用
logger.warning(f"本地 VLLM 服务响应异常")
return False
except Exception as e:
logger.warning(f"本地 VLLM 服务不可用: {e}")
return False

View File

@@ -277,22 +277,10 @@ class ZhipuRerankProvider(BaseServiceProvider[BaseRerankService]):
def is_available(self) -> bool:
"""
检查智谱 API 重排服务是否可用
注意zhipuai 库 2.0.1 版本没有 rerank API直接返回 False降级到 LLM 方案
"""
if not ZHIPUAI_API_KEY:
logger.warning("ZHIPUAI_API_KEY 未配置")
return False
try:
service = ZhipuRerankService(model=self._model)
test_scores = service.compute_scores("test query", ["test document"])
logger.info(f"智谱重排服务可用")
return True
except ImportError:
logger.warning("zhipuai 库未安装")
return False
except Exception as e:
logger.warning(f"智谱重排服务不可用: {e}")
return False
logger.warning("智谱 rerank API 在当前 zhipuai 库版本不可用,降级到 LLM 方案")
return False
def get_service(self) -> BaseRerankService:
"""