feat:修改投顾agent和nl2sql的功能

This commit is contained in:
2026-09-13 23:46:15 +08:00
parent 4dcfcbeb3a
commit 958b785b04
11 changed files with 436 additions and 61 deletions
+27 -8
View File
@@ -169,21 +169,40 @@ class LLMClient:
temperature: float | None,
max_tokens: int | None,
) -> str:
payload = {
"model": model,
"messages": messages,
"temperature": self.cfg.temperature if temperature is None else temperature,
"max_tokens": self.cfg.max_tokens if max_tokens is None else max_tokens,
"stream": False,
}
request_max_tokens = self.cfg.max_tokens if max_tokens is None else max_tokens
url = f"{backend.base_url}/chat/completions"
# 指数退避:retry_backoff_sec → 翻倍 → …,最多 max_retries 次
for attempt in range(self.cfg.max_retries):
payload = {
"model": model,
"messages": messages,
"temperature": self.cfg.temperature if temperature is None else temperature,
"max_tokens": request_max_tokens,
"stream": False,
}
try:
async with backend.client(self.cfg.timeout) as client:
r = await client.post(url, headers=backend.headers, json=payload)
r.raise_for_status()
return r.json()["choices"][0]["message"]["content"]
choice = r.json()["choices"][0]
message = choice["message"]
content = message.get("content")
if isinstance(content, str) and content.strip():
return content
# DeepSeek reasoning models may consume the entire small token budget
# in reasoning_content, leaving content empty and finish_reason=length.
if choice.get("finish_reason") == "length" and attempt < self.cfg.max_retries - 1:
request_max_tokens = max(request_max_tokens * 4, 256)
logger.warning(
"chat backend=%s model=%r returned empty content after token limit; "
"retrying with max_tokens=%d",
backend.name,
model,
request_max_tokens,
)
continue
raise ValueError("LLM 返回空内容")
except Exception:
if attempt == self.cfg.max_retries - 1:
raise