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

在Azure AI Foundry上使用DeepSeek-R1时无法调用Semantic Kernel插件

问题:Semantic Kernel插件在DeepSeek-R1上无法生效

问题背景

通过Semantic Kernel的OpenAI连接器对接Azure部署的DeepSeek-R1大模型,已成功建立连接并获取模型响应,但自定义插件(如包含GetCurrentDate函数的DatePlugin)完全被忽略。询问"当前日期是什么?"时,模型返回"您好!建议您联网获取实时信息。如果您有其他问题,请随时告诉我!",而非调用插件函数获取本地日期。

可能原因

  1. 模型工具调用支持不足:部分兼容OpenAI接口的模型可能未原生支持工具调用(Function Calling),或对工具描述的格式识别存在差异。
  2. Semantic Kernel配置遗漏:使用ChatCompletionAgent时,可能未正确触发工具调用的自动执行逻辑;或FunctionChoiceBehavior配置未被模型正确识别。
  3. Azure端点API版本不匹配:Semantic Kernel的OpenAI连接器依赖特定API版本(如支持工具调用的2024-02-15-preview),若端点使用旧版本可能导致工具调用失效。

解决方案

1. 验证模型的工具调用能力

先通过直接API请求验证DeepSeek-R1是否支持工具调用:

  • 构造如下请求发送到Azure模型端点(替换占位符为实际信息):
POST https://<your-azure-endpoint>/openai/deployments/DeepSeek-R1/chat/completions?api-version=2024-02-15-preview
Headers:
Content-Type: application/json
api-key: <your-api-key>
Body:
{
  "messages": [{"role": "user", "content": "当前日期是什么?"}],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "GetCurrentDate",
        "description": "返回当前UTC日期,格式为完整日期字符串",
        "parameters": {
          "type": "object",
          "properties": {},
          "required": []
        }
      }
    }
  ],
  "tool_choice": "auto"
}
  • 若响应包含tool_call字段,说明模型支持工具调用;若返回普通文本,需确认模型部署是否开启工具调用能力,或联系模型提供商确认支持情况。

2. 调整Semantic Kernel代码配置

替换ChatCompletionAgent为直接调用IChatCompletionService,并明确配置工具调用逻辑:

// 原代码中ChatCompletionAgent相关部分替换为:
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
var executionSettings = new OpenAIPromptExecutionSettings
{
    // 自动选择是否调用工具,测试阶段可改为强制调用指定函数
    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(),
    // FunctionChoiceBehavior = FunctionChoiceBehavior.ForceFunction("GetCurrentDate")
};

// 启用自动工具调用
var result = await chatCompletionService.GetChatMessageContentAsync(
    history,
    executionSettings,
    kernel);

Console.WriteLine(result.Content);

3. 指定兼容的API版本

在添加OpenAI连接器时明确指定支持工具调用的API版本:

builder.AddOpenAIChatCompletion(
    modelId: "DeepSeek-R1",
    endpoint: new Uri(MY_AZURE_OPENAI_ENDPOINT),
    apiKey: MY_API_KEY,
    apiVersion: "2024-02-15-preview"); // 确保版本支持工具调用

4. 优化插件函数描述

确保插件函数的描述足够清晰,帮助模型识别用途:

public class DatePlugin
{
    [KernelFunction()]
    [Description("获取当前UTC日期,返回格式为完整的日期字符串(例如:2024年5月20日)")]
    [return: Description("当前UTC日期的字符串表示")]
    public string GetCurrentDate() => DateOnly.FromDateTime(DateTime.UtcNow).ToString("D");
}

5. 查看日志排查流程

利用已配置的Trace日志,查看以下关键信息:

  • 是否有工具描述被发送到模型的日志
  • 模型响应是否包含tool_call指令
  • Semantic Kernel是否尝试执行插件函数

结论

该场景是可行的,核心前提是DeepSeek-R1模型支持工具调用能力,同时Semantic Kernel的配置需匹配模型的接口要求。通过上述步骤逐一排查,可解决插件被忽略的问题。

内容的提问来源于stack exchange,提问作者jbl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:26:04