Semantic Kernel对接Databricks托管Sonnet-3.7时插件无法执行求助
问题:Semantic Kernel对接Databricks托管Sonnet-3.7时插件无法执行
我正在尝试用Semantic Kernel对接Databricks托管的Sonnet-3.7模型,创建带有插件的智能体时遇到插件无法执行的问题。推测是Kernel不支持该模型的函数调用,于是自己编写了DatabricksSonnetChatCompletion类,但问题仍未解决。相关代码如下:
class DatabricksSonnetChatCompletion(ChatCompletionClientBase, BaseModel): ai_model_id: str service_id: str endpoint_url: str databricks_token: str async def complete_chat_async(self, messages, settings=None, **kwargs) -> ChatMessageContent: prompt_messages = [{"role": m.role.value, "content": m.content} for m in messages] payload = { "messages": prompt_messages, "temperature": settings.extension_data.get("temperature", 0.2) if settings else 0.2, "max_tokens": settings.extension_data.get("max_tokens", 1024) if settings else 1024, } # ✅ Extract and forward function definitions if provided functions = kwargs.get("functions") if functions: payload["functions"] = functions payload["function_call"] = "auto" # Let model decide headers = { "Authorization": f"Bearer {self.databricks_token}", "Content-Type": "application/json", } # 🚀 Send the request response = requests.post(self.endpoint_url, headers=headers, json=payload) response.raise_for_status() result = response.json() choice = result['choices'][0] message = choice["message"] # ✅ Handle function call response if "function_call" in message: func_call = message["function_call"] return ChatMessageContent( role=AuthorRole.ASSISTANT, content=None, function_call=FunctionCallContent( name=func_call.get("name"), arguments=func_call.get("arguments") ) ) # ✅ Normal assistant reply return ChatMessageContent( role=AuthorRole.ASSISTANT, content=message.get("content", "") )
可能的排查方向
- 函数调用格式兼容性:Databricks托管的Sonnet-3.7可能对函数调用的JSON格式有特定要求,比如
parameters字段必须严格符合JSON Schema规范(包含type和properties)。检查传入的functions结构是否完全匹配模型的要求。 - Semantic Kernel路由逻辑:确认Kernel是否正确识别自定义客户端返回的
FunctionCallContent。可以在返回函数调用后添加日志,验证Kernel是否接收到了正确的指令并触发插件执行。 - 异步执行匹配:客户端实现的是异步方法
complete_chat_async,检查Kernel调用时是否使用了对应的异步逻辑,避免同步阻塞导致流程中断。 - 端点功能验证:直接用curl或Postman发送包含
functions的请求到Databricks端点,确认模型返回的function_call结构是否符合预期,排除端点本身不支持函数调用的可能。 - 参数格式问题:检查
func_call.get("arguments")的返回类型,如果模型返回的是字典而非JSON字符串,需要将其转为字符串格式,因为Semantic Kernel的FunctionCallContent通常期望arguments是JSON字符串。
内容的提问来源于stack exchange,提问作者Helen Prokonina
相关产品推荐
相关产品推荐

