From 7231403e169fb1a7f9a216b8a659f18436df4daa Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sat, 12 Apr 2025 09:47:11 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix:=20xai=20missing=20field=20p?= =?UTF-8?q?arameters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/provider/func_tool_manager.py | 8 +++++--- astrbot/core/provider/sources/openai_source.py | 10 ++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/astrbot/core/provider/func_tool_manager.py b/astrbot/core/provider/func_tool_manager.py index 354594d88..72180759a 100644 --- a/astrbot/core/provider/func_tool_manager.py +++ b/astrbot/core/provider/func_tool_manager.py @@ -339,7 +339,7 @@ class FuncCall: ] logger.info(f"已关闭 MCP 服务 {name}") - def get_func_desc_openai_style(self) -> list: + def get_func_desc_openai_style(self, omit_empty_parameter_field = True) -> list: """ 获得 OpenAI API 风格的**已经激活**的工具描述 """ @@ -356,8 +356,10 @@ class FuncCall: "description": f.description, }, } - if f.parameters.get("properties"): - func_["function"]["parameters"] = f.parameters + func_["function"]["parameters"] = f.parameters + if not f.parameters.get("properties") and omit_empty_parameter_field: + # 如果 properties 为空,并且 omit_empty_parameter_field 为 True,则删除 parameters 字段 + del func_["function"]["parameters"] _l.append(func_) return _l diff --git a/astrbot/core/provider/sources/openai_source.py b/astrbot/core/provider/sources/openai_source.py index 8023d18d1..703572b87 100644 --- a/astrbot/core/provider/sources/openai_source.py +++ b/astrbot/core/provider/sources/openai_source.py @@ -87,7 +87,10 @@ class ProviderOpenAIOfficial(Provider): async def _query(self, payloads: dict, tools: FuncCall) -> LLMResponse: if tools: - tool_list = tools.get_func_desc_openai_style() + omit_empty_param_field = "grok" not in payloads.get("model", "").lower() + tool_list = tools.get_func_desc_openai_style( + omit_empty_parameter_field=omit_empty_param_field + ) if tool_list: payloads["tools"] = tool_list @@ -121,7 +124,10 @@ class ProviderOpenAIOfficial(Provider): ) -> AsyncGenerator[LLMResponse, None]: """流式查询API,逐步返回结果""" if tools: - tool_list = tools.get_func_desc_openai_style() + omit_empty_param_field = "grok" not in payloads.get("model", "").lower() + tool_list = tools.get_func_desc_openai_style( + omit_empty_parameter_field=omit_empty_param_field + ) if tool_list: payloads["tools"] = tool_list