claude-code-router icon indicating copy to clipboard operation
claude-code-router copied to clipboard

[Bug] DeepSeek-V3.1 Tool Execution Failure

Open ianmage opened this issue 4 months ago • 15 comments

Description (描述): 在使用 DeepSeek-V3.1 时,当 transformer.use 配置为特定值时,出现严重问题:

  • 设置为 ["tooluse"] 时:弹出 API 错误 API Error: 400,详细信息为 Grammar error: Unknown format,类型为 BadRequestError
  • 设置为 ["enhancetool"] 时:模型返回文字回应正常,但实际未执行任何工具代码功能,所有工具行为无实施且无结果。

此问题导致工具使用功能完全失效,影响生产环境中的自动化流程。

Steps to Reproduce (重现步骤):

  1. 配置 DeepSeek-V3.1 的 transformer.use["tooluse"]["enhancetool"]
  2. 运行模型调用(例如,通过 API 或代码执行)。
  3. 观察错误或行为:
    • 对于 ["tooluse"]:立即返回 400 BadRequestError
    • 对于 ["enhancetool"]:收到正常文本响应,但工具未执行。

Expected Behavior (预期行为): 应正常触发工具使用功能,实际执行工具代码,返回结果。

Actual Behavior (实际行为):

  • ["tooluse"]:导致 API 错误,阻止任何操作。
  • ["enhancetool"]:工具功能静默失败,无执行或输出。

Environment (环境信息):

  • Model: DeepSeek-V3.1
  • Configuration: transformer.use set to ["tooluse"] or ["enhancetool"]
  • Error: BadRequestError with message Grammar error: Unknown format for ["tooluse"]
  • Impact: All tool-related functionalities are broken.

Additional Context (附加信息):

  • 问题可能源于配置解析或 API 请求格式错误。
  • 需要紧急修复,因为工具使用是核心功能。

ianmage avatar Aug 26 '25 08:08 ianmage

使用Anthropic Transformer直接透传呢,正常不

elvisw avatar Aug 26 '25 08:08 elvisw

使用Anthropic Transformer直接透传呢,正常不

我测试了几个平台,发现是vllm的私有化部署DeepSeek会有这个问题,启动参数包括:

 --enable-auto-tool-choice 
 --tool-call-parser deepseek_v3 
 --chat-template tool_chat_template_deepseekv31.jinja 

并且transformer.use为[tooluse]时,vllm后端的错误是ValueError: Grammar error: Unknown format: uri .

但我比较倾向于问题点在['enhancetool'], 因为架构类似的模型Kimi-K2,在此模式下是正常可用的; 而DSV3.1在此模式下看似可能遇到了某个提前结束的符号,导致进度中断

ianmage avatar Aug 26 '25 10:08 ianmage

经过多种途径的试验,现在大概率怀疑DeepSeek-V3.1的输出内容,在vllm和sglang得到的都是同样的结果(enhancetool)

ianmage avatar Aug 26 '25 16:08 ianmage

经过多种途径的试验,现在大概率怀疑DeepSeek-V3.1的输出内容,在vllm和sglang得到的都是同样的结果(enhancetool)

@ianmage 请问vllm部署的Kimi-K2你这边能正常使用吗?我和你碰到一样的问题,都是enhancetool无法调用工具

Sylar-W avatar Aug 27 '25 12:08 Sylar-W

DeepSeek-V3.1不再需要任何transformer 另外vllm需要额外适配,因为v3.1是个混合模型,而推理的时候不支持工具调用

musistudio avatar Aug 27 '25 14:08 musistudio

关注,怎么用魔塔deepseek v3.1

362228416 avatar Aug 28 '25 06:08 362228416

经过多种途径的试验,现在大概率怀疑DeepSeek-V3.1的输出内容,在vllm和sglang得到的都是同样的结果(enhancetool)

@ianmage 请问vllm部署的Kimi-K2你这边能正常使用吗?我和你碰到一样的问题,都是enhancetool无法调用工具

我这边测试 vllm 跑Kimi-K2是可以调用工具的,--enable-auto-tool-choice --tool-call-parser kimi_k2你可以检查下启动有没开这两个参数

ianmage avatar Aug 28 '25 15:08 ianmage

DeepSeek-V3.1不再需要任何transformer 另外vllm需要额外适配,因为v3.1是个混合模型,而推理的时候不支持工具调用

使用了vllm当前最新版本 ver 0.10.1.1,默认非思考模式(即未开启thinking=true),配置不使用transformer。 还是不能正确使用工具,表现都是回应了它要做的事情(比如读写文件),然后就停了,没有任何实际行动发生,无后续流程.

相似的参数跑Kimi-K2/GLM4.5都能正常执行,我看vllm官方的工具模板对DS-V3.1是单独提供的https://github.com/vllm-project/vllm/blob/main/examples/tool_chat_template_deepseekv31.jinja,这里与旧版v3的区别会不会在ccr这边导致工具流程的不同行为?

ianmage avatar Aug 28 '25 19:08 ianmage

https://github.com/vllm-project/vllm/blob/main/examples/tool_chat_template_deepseekv31.jinja

ccr本质就是一个http client,你在使用vllm部署完模型后自己发个请求就知道是不是部署的问题了。 另外目前看起来deepseek v3.1三方的部署分为两派:

  1. 默认启用思考且不支持工具调用(比如魔搭)
  2. 默认不启用思考且支持工具调用(iflow) 具体你还是要找vllm的解决方案,经过测试,魔搭的deepseek v3.1不可用于claude code,但是iflow的和官网的表现都还可以。但是因为“极”的问题不推荐日常使用deepseek v3.1进行编码

musistudio avatar Aug 29 '25 02:08 musistudio

经过多种途径的试验,现在大概率怀疑DeepSeek-V3.1的输出内容,在vllm和sglang得到的都是同样的结果(enhancetool)

@ianmage 请问vllm部署的Kimi-K2你这边能正常使用吗?我和你碰到一样的问题,都是enhancetool无法调用工具

我这边测试 vllm 跑Kimi-K2是可以调用工具的,--enable-auto-tool-choice --tool-call-parser kimi_k2你可以检查下启动有没开这两个参数

你好,我是开启了的,我在CCR中使用kimi_k2也不是完全不能调用,而是调用了一两次或者不调用直接就停掉了。

下面是我的CCR配置,能否帮忙确认一下是否有问题?

      "name": "xxxx",
      "api_base_url": "http://xxx/v1/chat/completions",
      "api_key": "token-xxx",
      "model": ["kimi-k2"],
      "transformer": {
        "use": [
          [
            "maxtoken",
            {
              "max_tokens": 65536
            }
          ],
          "enhancetool",
          "kimi_k2"
        ]
      }
    },```

Sylar-W avatar Aug 29 '25 03:08 Sylar-W

enhancetool

enhancetool是为了解决LLM在调用工具时返回不合法的JSON而坐的增强解析处理,不是用来让模型支持调用工具的

musistudio avatar Aug 29 '25 05:08 musistudio

经过多种途径的试验,现在大概率怀疑DeepSeek-V3.1的输出内容,在vllm和sglang得到的都是同样的结果(enhancetool)

@ianmage 请问vllm部署的Kimi-K2你这边能正常使用吗?我和你碰到一样的问题,都是enhancetool无法调用工具

我这边测试 vllm 跑Kimi-K2是可以调用工具的,--enable-auto-tool-choice --tool-call-parser kimi_k2你可以检查下启动有没开这两个参数

你好,我是开启了的,我在CCR中使用kimi_k2也不是完全不能调用,而是调用了一两次或者不调用直接就停掉了。

下面是我的CCR配置,能否帮忙确认一下是否有问题?

      "name": "xxxx",
      "api_base_url": "http://xxx/v1/chat/completions",
      "api_key": "token-xxx",
      "model": ["kimi-k2"],
      "transformer": {
        "use": [
          [
            "maxtoken",
            {
              "max_tokens": 65536
            }
          ],
          "enhancetool",
          "kimi_k2"
        ]
      }
    },```

你这个描述看起来可能是max_tokens截断了?

ianmage avatar Aug 29 '25 07:08 ianmage

经过多种途径的试验,现在大概率怀疑DeepSeek-V3.1的输出内容,在vllm和sglang得到的都是同样的结果(enhancetool)

@ianmage 请问vllm部署的Kimi-K2你这边能正常使用吗?我和你碰到一样的问题,都是enhancetool无法调用工具

我这边测试 vllm 跑Kimi-K2是可以调用工具的,--enable-auto-tool-choice --tool-call-parser kimi_k2你可以检查下启动有没开这两个参数

你好,我是开启了的,我在CCR中使用kimi_k2也不是完全不能调用,而是调用了一两次或者不调用直接就停掉了。 下面是我的CCR配置,能否帮忙确认一下是否有问题?

      "name": "xxxx",
      "api_base_url": "http://xxx/v1/chat/completions",
      "api_key": "token-xxx",
      "model": ["kimi-k2"],
      "transformer": {
        "use": [
          [
            "maxtoken",
            {
              "max_tokens": 65536
            }
          ],
          "enhancetool",
          "kimi_k2"
        ]
      }
    },```

你这个描述看起来可能是max_tokens截断了?

试了一下去除掉maxtoken后,任务好像执行的顺畅了一些,但是还是没执行完就中断了 检查了一下vllm的日志,确实像是token超限了,你这边运行任务顺畅吗?可以完成复杂任务吗?

(APIServer pid=569) DEBUG 08-29 16:04:27 [kimi_k2_tool_parser.py:133] delta_token_ids: [8195]
(APIServer pid=569) DEBUG 08-29 16:04:27 [kimi_k2_tool_parser.py:261] Not enough token
(APIServer pid=569) DEBUG 08-29 16:04:27 [kimi_k2_tool_parser.py:132] delta_text: >
(APIServer pid=569) DEBUG 08-29 16:04:27 [kimi_k2_tool_parser.py:133] delta_token_ids: [29]
(APIServer pid=569) DEBUG 08-29 16:04:27 [kimi_k2_tool_parser.py:261] Not enough token
(EngineCore_0 pid=834) DEBUG 08-29 16:04:27 [core.py:728] EngineCore waiting for work.
(APIServer pid=569) DEBUG 08-29 16:04:27 [kimi_k2_tool_parser.py:132] delta_text:
(APIServer pid=569) DEBUG 08-29 16:04:27 [kimi_k2_tool_parser.py:133] delta_token_ids: [163586]
(APIServer pid=569) DEBUG 08-29 16:04:27 [kimi_k2_tool_parser.py:261] Not enough token
Image

Sylar-W avatar Aug 29 '25 08:08 Sylar-W

#681

jeffery9 avatar Aug 30 '25 08:08 jeffery9

https://github.com/vllm-project/vllm/blob/main/examples/tool_chat_template_deepseekv31.jinja

ccr本质就是一个http client,你在使用vllm部署完模型后自己发个请求就知道是不是部署的问题了。 另外目前看起来deepseek v3.1三方的部署分为两派:

  1. 默认启用思考且不支持工具调用(比如魔搭)
  2. 默认不启用思考且支持工具调用(iflow) 具体你还是要找vllm的解决方案,经过测试,魔搭的deepseek v3.1不可用于claude code,但是iflow的和官网的表现都还可以。但是因为“极”的问题不推荐日常使用deepseek v3.1进行编码

大佬 iflow glm 4.6 使用 ccr 该怎么开启思考推理呢? 试了下 cherry studio 中 是可以的

langyamu avatar Nov 09 '25 14:11 langyamu