From 7e59382603b4e077d61593a905ed01d9592e9754 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Tue, 27 May 2025 20:50:06 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=94=AF=E6=8C=81qwen3=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=9A=84enable=5Fthinking=E5=8F=82=E6=95=B0=E5=92=8Ct?= =?UTF-8?q?hinking=5Fbudget=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../info_processors/self_processor.py | 2 +- src/chat/focus_chat/planners/planner.py | 3 +- .../observation/structure_observation.py | 4 +- src/llm_models/utils_model.py | 20 +++++++- .../test_plugin/actions/mute_action.py | 2 +- template/bot_config_template.toml | 51 ++++++++++++------- 6 files changed, 56 insertions(+), 26 deletions(-) diff --git a/src/chat/focus_chat/info_processors/self_processor.py b/src/chat/focus_chat/info_processors/self_processor.py index 5e67c71f4..35bb6ec26 100644 --- a/src/chat/focus_chat/info_processors/self_processor.py +++ b/src/chat/focus_chat/info_processors/self_processor.py @@ -32,7 +32,7 @@ def init_prompt(): {chat_observe_info} 现在请你根据现有的信息,思考自我认同:请严格遵守以下规则 -1. 请严格参考最上方的人设,适当参考记忆和当前聊天内容 +1. 请严格参考最上方的人设,适当参考记忆和当前聊天内容,不要被记忆和当前聊天内容中相反的内容误导 2. 你是一个什么样的人,你和群里的人关系如何 3. 你的形象是什么 4. 思考有没有人提到你,或者图片与你有关 diff --git a/src/chat/focus_chat/planners/planner.py b/src/chat/focus_chat/planners/planner.py index cf025ee67..05443006c 100644 --- a/src/chat/focus_chat/planners/planner.py +++ b/src/chat/focus_chat/planners/planner.py @@ -180,8 +180,9 @@ class ActionPlanner: # --- 调用 LLM (普通文本生成) --- llm_content = None try: - llm_content, _, _ = await self.planner_llm.generate_response(prompt=prompt) + llm_content, reasoning_content, _ = await self.planner_llm.generate_response(prompt=prompt) logger.debug(f"{self.log_prefix}[Planner] LLM 原始 JSON 响应 (预期): {llm_content}") + logger.debug(f"{self.log_prefix}[Planner] LLM 原始理由 响应 (预期): {reasoning_content}") except Exception as req_e: logger.error(f"{self.log_prefix}[Planner] LLM 请求执行失败: {req_e}") reasoning = f"LLM 请求失败,你的模型出现问题: {req_e}" diff --git a/src/chat/heart_flow/observation/structure_observation.py b/src/chat/heart_flow/observation/structure_observation.py index 2732ef0b1..73b5bf75f 100644 --- a/src/chat/heart_flow/observation/structure_observation.py +++ b/src/chat/heart_flow/observation/structure_observation.py @@ -26,7 +26,7 @@ class StructureObservation: for structured_info in self.structured_info: if structured_info.get("ttl") > 0: structured_info["ttl"] -= 1 - observed_structured_infos.append(structured_info) - logger.debug(f"观察到结构化信息仍旧在: {structured_info}") + observed_structured_infos.append(structured_info) + logger.debug(f"观察到结构化信息仍旧在: {structured_info}") self.structured_info = observed_structured_infos diff --git a/src/llm_models/utils_model.py b/src/llm_models/utils_model.py index f24761925..319c020f3 100644 --- a/src/llm_models/utils_model.py +++ b/src/llm_models/utils_model.py @@ -117,6 +117,9 @@ class LLMRequest: self.model_name: str = model["name"] self.params = kwargs + self.enable_thinking = model.get("enable_thinking", False) + self.temp = model.get("temp", 0.7) + self.thinking_budget = model.get("thinking_budget", 4096) self.stream = model.get("stream", False) self.pri_in = model.get("pri_in", 0) self.pri_out = model.get("pri_out", 0) @@ -601,8 +604,9 @@ class LLMRequest: new_params = dict(params) if self.model_name.lower() in self.MODELS_NEEDING_TRANSFORMATION: - # 删除 'temperature' 参数(如果存在) - new_params.pop("temperature", None) + # 删除 'temperature' 参数(如果存在),但避免删除我们在_build_payload中添加的自定义温度 + if "temperature" in new_params and new_params["temperature"] == 0.7: + new_params.pop("temperature") # 如果存在 'max_tokens',则重命名为 'max_completion_tokens' if "max_tokens" in new_params: new_params["max_completion_tokens"] = new_params.pop("max_tokens") @@ -632,6 +636,18 @@ class LLMRequest: "messages": messages, **params_copy, } + + # 添加temp参数(如果不是默认值0.7) + if self.temp != 0.7: + payload["temperature"] = self.temp + + # 添加enable_thinking参数(如果不是默认值False) + if not self.enable_thinking: + payload["enable_thinking"] = False + + if self.thinking_budget != 4096: + payload["thinking_budget"] = self.thinking_budget + if "max_tokens" not in payload and "max_completion_tokens" not in payload: payload["max_tokens"] = global_config.model.model_max_output_length # 如果 payload 中依然存在 max_tokens 且需要转换,在这里进行再次检查 diff --git a/src/plugins/test_plugin/actions/mute_action.py b/src/plugins/test_plugin/actions/mute_action.py index 9712b7625..279ee0109 100644 --- a/src/plugins/test_plugin/actions/mute_action.py +++ b/src/plugins/test_plugin/actions/mute_action.py @@ -11,7 +11,7 @@ class MuteAction(PluginAction): action_name = "mute_action" action_description = ( - "如果某人违反了公序良俗,或者别人戳你太多,或者某人刷屏,一定要禁言某人,如果你很生气,可以禁言某人,可以自选禁言时长,视严重程度而定" + "如果某人违反了公序良俗,或者别人戳你太多,或者某人刷屏,一定要禁言某人,如果你很生气,可以禁言某人,可以自选禁言时长,视严重程度而定。" ) action_parameters = { "target": "禁言对象,输入你要禁言的对象的名字,必填", diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 5721f8f95..00859c487 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -206,16 +206,18 @@ temp = 0.2 #模型的温度,新V3建议0.1-0.3 [model.utils_small] # 在麦麦的一些组件中使用的小模型,消耗量较大 # 强烈建议使用免费的小模型 -name = "Qwen/Qwen2.5-7B-Instruct" +name = "Qwen/Qwen3-8B" provider = "SILICONFLOW" +enable_thinking = false # 是否启用思考 pri_in = 0 pri_out = 0 -[model.memory_summary] # 记忆的概括模型,建议使用qwen2.5 32b 及以上 -name = "Qwen/Qwen2.5-32B-Instruct" +[model.memory_summary] # 记忆的概括模型 +name = "Qwen/Qwen3-30B-A3B" provider = "SILICONFLOW" -pri_in = 1.26 -pri_out = 1.26 +enable_thinking = false # 是否启用思考 +pri_in = 0.7 +pri_out = 2.8 [model.vlm] # 图像识别模型 name = "Pro/Qwen/Qwen2.5-VL-7B-Instruct" @@ -226,7 +228,7 @@ pri_out = 0.35 #嵌入模型 [model.embedding] name = "BAAI/bge-m3" -provider = "SILICONFLOW" +provider = "DEV" pri_in = 0 pri_out = 0 @@ -235,8 +237,8 @@ pri_out = 0 [model.normal_chat_1] # 一般聊天模式的首要回复模型,推荐使用 推理模型 name = "Pro/deepseek-ai/DeepSeek-R1" provider = "SILICONFLOW" -pri_in = 1.0 #模型的输入价格(非必填,可以记录消耗) -pri_out = 4.0 #模型的输出价格(非必填,可以记录消耗) +pri_in = 4.0 #模型的输入价格(非必填,可以记录消耗) +pri_out = 16.0 #模型的输出价格(非必填,可以记录消耗) [model.normal_chat_2] # 一般聊天模式的次要回复模型,推荐使用 非推理模型 name = "Pro/deepseek-ai/DeepSeek-V3" @@ -249,46 +251,57 @@ temp = 0.2 #模型的温度,新V3建议0.1-0.3 #------------专注聊天必填模型------------ [model.focus_working_memory] #工作记忆模型 -name = "Qwen/Qwen2.5-32B-Instruct" +name = "Qwen/Qwen3-30B-A3B" provider = "SILICONFLOW" -pri_in = 1.26 -pri_out = 1.26 +enable_thinking = false # 是否启用思考 +pri_in = 0.7 +pri_out = 2.8 [model.focus_chat_mind] #聊天规划:认真聊天时,生成麦麦对聊天的规划想法 name = "Pro/deepseek-ai/DeepSeek-V3" +# name = "Qwen/Qwen3-30B-A3B" provider = "SILICONFLOW" +# enable_thinking = false # 是否启用思考 pri_in = 2 pri_out = 8 -temp = 0.3 #模型的温度,新V3建议0.1-0.3 +temp = 0.3 [model.focus_tool_use] #工具调用模型,需要使用支持工具调用的模型 -name = "Qwen/Qwen2.5-32B-Instruct" +name = "Qwen/Qwen3-14B" provider = "SILICONFLOW" -pri_in = 1.26 -pri_out = 1.26 +enable_thinking = false # 是否启用思考 +pri_in = 0.5 +pri_out = 2 [model.focus_planner] #决策:认真聊天时,负责决定麦麦该做什么 name = "Pro/deepseek-ai/DeepSeek-V3" +# name = "Qwen/Qwen3-30B-A3B" provider = "SILICONFLOW" +# enable_thinking = false # 是否启用思考 pri_in = 2 pri_out = 8 +temp = 0.3 #表达器模型,用于表达麦麦的想法,生成最终回复,对语言风格影响极大 #也用于表达方式学习 [model.focus_expressor] name = "Pro/deepseek-ai/DeepSeek-V3" +# name = "Qwen/Qwen3-30B-A3B" provider = "SILICONFLOW" +# enable_thinking = false # 是否启用思考 pri_in = 2 pri_out = 8 temp = 0.3 #自我识别模型,用于自我认知和身份识别 [model.focus_self_recognize] -name = "Pro/deepseek-ai/DeepSeek-V3" +# name = "Pro/deepseek-ai/DeepSeek-V3" +name = "Qwen/Qwen3-30B-A3B" provider = "SILICONFLOW" -pri_in = 2 -pri_out = 8 -temp = 0.3 +enable_thinking = false # 是否启用思考 +pri_in = 0.7 +pri_out = 2.8 +temp = 0.7