You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:30:56