From 2d09c4788d5255c5132ffdabf6693b16f26b05c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E6=B3=95=E6=93=8D=E4=BD=9C?= Date: Fri, 24 Apr 2026 16:02:30 +0800 Subject: [PATCH] fix: suggest questions more max_tokens (#35533) --- api/core/llm_generator/llm_generator.py | 6 ++---- .../suggested_questions_after_answer.py | 9 ++++++++- api/core/llm_generator/prompts.py | 3 --- .../core/llm_generator/test_llm_generator.py | 12 ++++-------- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/api/core/llm_generator/llm_generator.py b/api/core/llm_generator/llm_generator.py index 6454f4f0dc..af2611bb0b 100644 --- a/api/core/llm_generator/llm_generator.py +++ b/api/core/llm_generator/llm_generator.py @@ -13,8 +13,6 @@ from core.llm_generator.output_parser.rule_config_generator import RuleConfigGen from core.llm_generator.output_parser.suggested_questions_after_answer import SuggestedQuestionsAfterAnswerOutputParser from core.llm_generator.prompts import ( CONVERSATION_TITLE_PROMPT, - DEFAULT_SUGGESTED_QUESTIONS_MAX_TOKENS, - DEFAULT_SUGGESTED_QUESTIONS_TEMPERATURE, GENERATOR_QA_PROMPT, JAVASCRIPT_CODE_GENERATOR_PROMPT_TEMPLATE, LLM_MODIFY_CODE_SYSTEM, @@ -217,8 +215,8 @@ class LLMGenerator: else: # Default-model generation keeps the built-in suggested-questions tuning. model_parameters = { - "max_tokens": DEFAULT_SUGGESTED_QUESTIONS_MAX_TOKENS, - "temperature": DEFAULT_SUGGESTED_QUESTIONS_TEMPERATURE, + "max_tokens": 2560, + "temperature": 0.0, } stop = [] diff --git a/api/core/llm_generator/output_parser/suggested_questions_after_answer.py b/api/core/llm_generator/output_parser/suggested_questions_after_answer.py index c030802c79..7ac340926d 100644 --- a/api/core/llm_generator/output_parser/suggested_questions_after_answer.py +++ b/api/core/llm_generator/output_parser/suggested_questions_after_answer.py @@ -10,7 +10,14 @@ logger = logging.getLogger(__name__) class SuggestedQuestionsAfterAnswerOutputParser: def __init__(self, instruction_prompt: str | None = None) -> None: - self._instruction_prompt = instruction_prompt or DEFAULT_SUGGESTED_QUESTIONS_AFTER_ANSWER_INSTRUCTION_PROMPT + self._instruction_prompt = self._build_instruction_prompt(instruction_prompt) + + @staticmethod + def _build_instruction_prompt(instruction_prompt: str | None) -> str: + if not instruction_prompt or not instruction_prompt.strip(): + return DEFAULT_SUGGESTED_QUESTIONS_AFTER_ANSWER_INSTRUCTION_PROMPT + + return f'{instruction_prompt}\nYou must output a JSON array like ["question1", "question2", "question3"].' def get_format_instructions(self) -> str: return self._instruction_prompt diff --git a/api/core/llm_generator/prompts.py b/api/core/llm_generator/prompts.py index 855a00c9cd..3c6f8c468a 100644 --- a/api/core/llm_generator/prompts.py +++ b/api/core/llm_generator/prompts.py @@ -104,9 +104,6 @@ DEFAULT_SUGGESTED_QUESTIONS_AFTER_ANSWER_INSTRUCTION_PROMPT = ( '["question1","question2","question3"]\n' ) -DEFAULT_SUGGESTED_QUESTIONS_MAX_TOKENS = 256 -DEFAULT_SUGGESTED_QUESTIONS_TEMPERATURE = 0.0 - GENERATOR_QA_PROMPT = ( " The user will send a long text. Generate a Question and Answer pairs only using the knowledge" " in the long text. Please think step by step." diff --git a/api/tests/unit_tests/core/llm_generator/test_llm_generator.py b/api/tests/unit_tests/core/llm_generator/test_llm_generator.py index 3b64ce6b5c..7d6c8f983f 100644 --- a/api/tests/unit_tests/core/llm_generator/test_llm_generator.py +++ b/api/tests/unit_tests/core/llm_generator/test_llm_generator.py @@ -6,10 +6,6 @@ import pytest from core.app.app_config.entities import ModelConfig from core.llm_generator.entities import RuleCodeGeneratePayload, RuleGeneratePayload, RuleStructuredOutputPayload from core.llm_generator.llm_generator import LLMGenerator -from core.llm_generator.prompts import ( - DEFAULT_SUGGESTED_QUESTIONS_MAX_TOKENS, - DEFAULT_SUGGESTED_QUESTIONS_TEMPERATURE, -) from graphon.model_runtime.entities.llm_entities import LLMMode, LLMResult from graphon.model_runtime.entities.model_entities import ModelType from graphon.model_runtime.errors.invoke import InvokeAuthorizationError, InvokeError @@ -102,8 +98,8 @@ class TestLLMGenerator: assert len(questions) == 2 assert questions[0] == "Question 1?" assert mock_model_instance.invoke_llm.call_args.kwargs["model_parameters"] == { - "max_tokens": DEFAULT_SUGGESTED_QUESTIONS_MAX_TOKENS, - "temperature": DEFAULT_SUGGESTED_QUESTIONS_TEMPERATURE, + "max_tokens": 2560, + "temperature": 0.0, } def test_generate_suggested_questions_after_answer_auth_error(self, mock_model_instance): @@ -181,8 +177,8 @@ class TestLLMGenerator: model_type=ModelType.LLM, ) assert default_model_instance.invoke_llm.call_args.kwargs["model_parameters"] == { - "max_tokens": DEFAULT_SUGGESTED_QUESTIONS_MAX_TOKENS, - "temperature": DEFAULT_SUGGESTED_QUESTIONS_TEMPERATURE, + "max_tokens": 2560, + "temperature": 0.0, } assert default_model_instance.invoke_llm.call_args.kwargs["stop"] == []