fix: improve AI coach chat context, 128k window, and output limits

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-11 00:35:01 +08:00
parent 6977bce64f
commit 0e2e360ccf
6 changed files with 124 additions and 25 deletions
+24 -6
View File
@@ -104,7 +104,13 @@ def _openai_chat_url() -> str:
return f"{base}/chat/completions"
def _generate_openai(prompt: str, images: List[tuple], temperature: float) -> str:
def _generate_openai(
prompt: str,
images: List[tuple],
temperature: float,
*,
max_tokens: int | None = None,
) -> str:
api_key = _openai_api_key()
if not api_key:
return "AI 调用失败:未配置 OPENAI_API_KEY(请在当前实例目录 .env 中设置,修改后需重启服务)"
@@ -124,12 +130,14 @@ def _generate_openai(prompt: str, images: List[tuple], temperature: float) -> st
messages = [{"role": "user", "content": content}]
else:
messages = [{"role": "user", "content": prompt}]
body = {
body: dict = {
"model": _openai_model(),
"messages": messages,
"temperature": temperature,
"stream": False,
}
if max_tokens is not None and max_tokens > 0:
body["max_tokens"] = int(max_tokens)
r = requests.post(
_openai_chat_url(),
headers=headers,
@@ -145,12 +153,21 @@ def _generate_openai(prompt: str, images: List[tuple], temperature: float) -> st
return (msg.get("content") or "").strip() or "AI 生成失败:空内容"
def _generate_ollama(prompt: str, images: List[tuple], temperature: float) -> str:
def _generate_ollama(
prompt: str,
images: List[tuple],
temperature: float,
*,
max_tokens: int | None = None,
) -> str:
options: dict = {"temperature": temperature}
if max_tokens is not None and max_tokens > 0:
options["num_predict"] = int(max_tokens)
payload = {
"model": _ollama_model(),
"prompt": prompt,
"stream": False,
"options": {"temperature": temperature},
"options": options,
}
if images:
payload["images"] = [b64 for b64, _mime in images]
@@ -165,13 +182,14 @@ def ai_generate(
image_paths: Optional[Sequence[str]] = None,
images_b64: Optional[Sequence[str]] = None,
temperature: float = 0.2,
max_tokens: int | None = None,
) -> str:
"""统一文本生成;失败时返回以「AI 调用失败」开头的说明。"""
images = _collect_images(image_paths, images_b64)
try:
if _use_openai():
return _generate_openai(prompt, images, temperature)
return _generate_ollama(prompt, images, temperature)
return _generate_openai(prompt, images, temperature, max_tokens=max_tokens)
return _generate_ollama(prompt, images, temperature, max_tokens=max_tokens)
except requests.HTTPError as e:
detail = ""
try: