From 7d9895cf5b3798868cf53e510a4276500e799f99 Mon Sep 17 00:00:00 2001 From: FAN-yeB <1442100690@qq.com> Date: Thu, 18 Dec 2025 10:11:13 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=94=A4=E9=86=92?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/handle/textHandler/listenMessageHandler.py | 1 + 1 file changed, 1 insertion(+) diff --git a/main/xiaozhi-server/core/handle/textHandler/listenMessageHandler.py b/main/xiaozhi-server/core/handle/textHandler/listenMessageHandler.py index a2c96836..c71649ed 100644 --- a/main/xiaozhi-server/core/handle/textHandler/listenMessageHandler.py +++ b/main/xiaozhi-server/core/handle/textHandler/listenMessageHandler.py @@ -69,6 +69,7 @@ class ListenTextMessageHandler(TextMessageHandler): enqueue_asr_report(conn, "嘿,你好呀", []) await startToChat(conn, "嘿,你好呀") else: + conn.just_woken_up = True # 上报纯文字数据(复用ASR上报功能,但不提供音频数据) enqueue_asr_report(conn, original_text, []) # 否则需要LLM对文字内容进行答复 From 19736e66ad46b0542450ebc779596009e2a149d9 Mon Sep 17 00:00:00 2001 From: hrz <1710360675@qq.com> Date: Thu, 18 Dec 2025 11:18:49 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix=EF=BC=9A=E6=97=A0=E6=84=8F=E5=9B=BE?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E6=97=B6=EF=BC=8C=E6=97=A0"plugins"=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=8A=A5=E9=94=99=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../functions/get_news_from_chinanews.py | 2 +- .../functions/get_news_from_newsnow.py | 8 ++++---- .../plugins_func/functions/get_weather.py | 11 ++++------- .../plugins_func/functions/hass_init.py | 16 +++++++++------- .../plugins_func/functions/play_music.py | 5 +++-- .../functions/search_from_ragflow.py | 7 ++++--- 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/main/xiaozhi-server/plugins_func/functions/get_news_from_chinanews.py b/main/xiaozhi-server/plugins_func/functions/get_news_from_chinanews.py index e5ca0d1f..2267c83c 100644 --- a/main/xiaozhi-server/plugins_func/functions/get_news_from_chinanews.py +++ b/main/xiaozhi-server/plugins_func/functions/get_news_from_chinanews.py @@ -195,7 +195,7 @@ def get_news_from_chinanews( # 否则,获取新闻列表并随机选择一条 # 从配置中获取RSS URL - rss_config = conn.config["plugins"]["get_news_from_chinanews"] + rss_config = conn.config.get("plugins", {}).get("get_news_from_chinanews", {}) default_rss_url = rss_config.get( "default_rss_url", "https://www.chinanews.com.cn/rss/society.xml" ) diff --git a/main/xiaozhi-server/plugins_func/functions/get_news_from_newsnow.py b/main/xiaozhi-server/plugins_func/functions/get_news_from_newsnow.py index 1d60aefd..2bcd9193 100644 --- a/main/xiaozhi-server/plugins_func/functions/get_news_from_newsnow.py +++ b/main/xiaozhi-server/plugins_func/functions/get_news_from_newsnow.py @@ -120,10 +120,10 @@ def fetch_news_from_api(conn, source="thepaper"): """从API获取新闻列表""" try: api_url = f"https://newsnow.busiyi.world/api/s?id={source}" - if conn.config["plugins"].get("get_news_from_newsnow") and conn.config[ - "plugins" - ]["get_news_from_newsnow"].get("url"): - api_url = conn.config["plugins"]["get_news_from_newsnow"]["url"] + source + + news_config = conn.config.get("plugins", {}).get("get_news_from_newsnow", {}) + if news_config.get("url"): + api_url = news_config["url"] + source headers = {"User-Agent": "Mozilla/5.0"} response = requests.get(api_url, headers=headers, timeout=10) diff --git a/main/xiaozhi-server/plugins_func/functions/get_weather.py b/main/xiaozhi-server/plugins_func/functions/get_weather.py index 38770a3f..e95a40d8 100644 --- a/main/xiaozhi-server/plugins_func/functions/get_weather.py +++ b/main/xiaozhi-server/plugins_func/functions/get_weather.py @@ -158,13 +158,10 @@ def parse_weather_info(soup): def get_weather(conn, location: str = None, lang: str = "zh_CN"): from core.utils.cache.manager import cache_manager, CacheType - api_host = conn.config["plugins"]["get_weather"].get( - "api_host", "mj7p3y7naa.re.qweatherapi.com" - ) - api_key = conn.config["plugins"]["get_weather"].get( - "api_key", "a861d0d5e7bf4ee1a83d9a9e4f96d4da" - ) - default_location = conn.config["plugins"]["get_weather"]["default_location"] + weather_config = conn.config.get("plugins", {}).get("get_weather", {}) + api_host = weather_config.get("api_host", "mj7p3y7naa.re.qweatherapi.com") + api_key = weather_config.get("api_key", "a861d0d5e7bf4ee1a83d9a9e4f96d4da") + default_location = weather_config.get("default_location", "广州") client_ip = conn.client_ip # 优先使用用户提供的location参数 diff --git a/main/xiaozhi-server/plugins_func/functions/hass_init.py b/main/xiaozhi-server/plugins_func/functions/hass_init.py index 11cbb7a0..dadb190b 100644 --- a/main/xiaozhi-server/plugins_func/functions/hass_init.py +++ b/main/xiaozhi-server/plugins_func/functions/hass_init.py @@ -11,15 +11,17 @@ def append_devices_to_prompt(conn): "functions", [] ) + # 安全地获取插件配置 + plugins_config = conn.config.get("plugins", {}) config_source = ( "home_assistant" - if conn.config["plugins"].get("home_assistant") + if plugins_config.get("home_assistant") else "hass_get_state" ) if "hass_get_state" in funcs or "hass_set_state" in funcs: prompt = "\n下面是我家智能设备列表(位置,设备名,entity_id),可以通过homeassistant控制\n" - deviceStr = conn.config["plugins"].get(config_source, {}).get("devices", "") + deviceStr = plugins_config.get(config_source, {}).get("devices", "") conn.prompt += prompt + deviceStr + "\n" # 更新提示词 conn.dialogue.update_system_message(conn.prompt) @@ -30,17 +32,17 @@ def initialize_hass_handler(conn): if not conn.load_function_plugin: return ha_config + # 安全地获取插件配置 + plugins_config = conn.config.get("plugins", {}) # 确定配置来源 config_source = ( - "home_assistant" - if conn.config["plugins"].get("home_assistant") - else "hass_get_state" + "home_assistant" if plugins_config.get("home_assistant") else "hass_get_state" ) - if not conn.config["plugins"].get(config_source): + if not plugins_config.get(config_source): return ha_config # 统一获取配置 - plugin_config = conn.config["plugins"][config_source] + plugin_config = plugins_config[config_source] ha_config["base_url"] = plugin_config.get("base_url") ha_config["api_key"] = plugin_config.get("api_key") diff --git a/main/xiaozhi-server/plugins_func/functions/play_music.py b/main/xiaozhi-server/plugins_func/functions/play_music.py index 2cbc4018..be4cf618 100644 --- a/main/xiaozhi-server/plugins_func/functions/play_music.py +++ b/main/xiaozhi-server/plugins_func/functions/play_music.py @@ -118,8 +118,9 @@ def get_music_files(music_dir, music_ext): def initialize_music_handler(conn): global MUSIC_CACHE if MUSIC_CACHE == {}: - if "play_music" in conn.config["plugins"]: - MUSIC_CACHE["music_config"] = conn.config["plugins"]["play_music"] + plugins_config = conn.config.get("plugins", {}) + if "play_music" in plugins_config: + MUSIC_CACHE["music_config"] = plugins_config["play_music"] MUSIC_CACHE["music_dir"] = os.path.abspath( MUSIC_CACHE["music_config"].get("music_dir", "./music") # 默认路径修改 ) diff --git a/main/xiaozhi-server/plugins_func/functions/search_from_ragflow.py b/main/xiaozhi-server/plugins_func/functions/search_from_ragflow.py index d585a762..ec6ac426 100644 --- a/main/xiaozhi-server/plugins_func/functions/search_from_ragflow.py +++ b/main/xiaozhi-server/plugins_func/functions/search_from_ragflow.py @@ -32,9 +32,10 @@ def search_from_ragflow(conn, question=None): else: question = str(question) if question is not None else "" - base_url = conn.config["plugins"]["search_from_ragflow"].get("base_url", "") - api_key = conn.config["plugins"]["search_from_ragflow"].get("api_key", "") - dataset_ids = conn.config["plugins"]["search_from_ragflow"].get("dataset_ids", []) + ragflow_config = conn.config.get("plugins", {}).get("search_from_ragflow", {}) + base_url = ragflow_config.get("base_url", "") + api_key = ragflow_config.get("api_key", "") + dataset_ids = ragflow_config.get("dataset_ids", []) url = base_url + "/api/v1/retrieval" headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}