fix: 改进服务可用性检测 - 本地VLLM实际测试连接,智谱rerank降级到LLM方案
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m52s
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m52s
This commit is contained in:
@@ -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}")
|
||||
# 测试能否建立 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
|
||||
|
||||
@@ -277,21 +277,9 @@ 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}")
|
||||
logger.warning("智谱 rerank API 在当前 zhipuai 库版本不可用,降级到 LLM 方案")
|
||||
return False
|
||||
|
||||
def get_service(self) -> BaseRerankService:
|
||||
|
||||
Reference in New Issue
Block a user