feat(思维导图助手):思维导图助手增加智能整理总结-设置返回参数

develop
panyy 2026-06-24 19:07:15 +08:00
parent 8dbfeddfe4
commit 965781213e
1 changed files with 11 additions and 3 deletions

View File

@ -413,7 +413,13 @@ def _estimate_tokens(text: str) -> int:
return max(1, int(ascii_chars / 4) + int(non_ascii_chars * 1.5))
def _get_mindmap_context_budget(prompt: str, reserve_output_tokens: int = 4096) -> tuple[int, int]:
def _get_mindmap_max_output_tokens() -> int:
return int(os.getenv("MINDMAP_LLM_MAX_OUTPUT_TOKENS", "4096"))
def _get_mindmap_context_budget(prompt: str, reserve_output_tokens: Optional[int] = None) -> tuple[int, int]:
if reserve_output_tokens is None:
reserve_output_tokens = _get_mindmap_max_output_tokens()
max_context_tokens = int(os.getenv("MINDMAP_LLM_MAX_CONTEXT_TOKENS", "32768"))
prompt_tokens = _estimate_tokens(prompt)
safety_tokens = int(os.getenv("MINDMAP_LLM_SAFETY_TOKENS", "1024"))
@ -503,6 +509,7 @@ def _call_mindmap_llm(markdown: str, mode: str = "smart", custom_prompt: Optiona
model = os.getenv("MINDMAP_LLM_MODEL", "gemma-4-26B")
api_key = os.getenv("MINDMAP_LLM_API_KEY", "")
timeout = int(os.getenv("MINDMAP_LLM_TIMEOUT", "180"))
max_output_tokens = _get_mindmap_max_output_tokens()
if not base_url:
raise RuntimeError("未配置智能整理模型服务,请设置 MINDMAP_LLM_BASE_URL")
@ -515,8 +522,8 @@ def _call_mindmap_llm(markdown: str, mode: str = "smart", custom_prompt: Optiona
{compact_markdown}
"""
logger.info(
"Mindmap LLM request start task_id={} role={} model={} base_url={} mode={} input_chars={} input_tokens_est={} prompt_chars={}",
task_id or "-", request_role, model, base_url, mode, len(compact_markdown), _estimate_tokens(compact_markdown), len(prompt_template)
"Mindmap LLM request start task_id={} role={} model={} base_url={} mode={} input_chars={} input_tokens_est={} prompt_chars={} max_tokens={}",
task_id or "-", request_role, model, base_url, mode, len(compact_markdown), _estimate_tokens(compact_markdown), len(prompt_template), max_output_tokens
)
payload = {
@ -526,6 +533,7 @@ def _call_mindmap_llm(markdown: str, mode: str = "smart", custom_prompt: Optiona
{"role": "user", "content": prompt},
],
"temperature": float(os.getenv("MINDMAP_LLM_TEMPERATURE", "0.2")),
"max_tokens": max_output_tokens,
}
data = json.dumps(payload, ensure_ascii=False).encode("utf-8")
headers = {"Content-Type": "application/json"}