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