所有文章 > AI驱动 > 模型引擎的技术债务?一个Deepseek三种API引发的连锁反应
模型引擎的技术债务?一个Deepseek三种API引发的连锁反应

模型引擎的技术债务?一个Deepseek三种API引发的连锁反应

本地部署的Deepseek调优方法

上篇文章中,我们讲了本地部署的Deepseek,无论什么规模的都存在一个不思考的问题,感兴趣的同学可以回顾一下。本地部署的Deepseek为什么不思考?调优方法来了!自己在本地部署过的小伙伴会发现一些问题,比如用OpenWebUI这个大家比较常用的工具举例。显示思考过程,但是没有思考标签的,比如这种。

image

也有怎么问都不思考,而且每次问问题都等很久才有反应的。

image

我们本篇文章就来详细说说这个问题。OpenAI API相信开发过大模型的小伙伴们都知道OpenAI API,这是由OpenAI最早定义的一套API标准,其中最著名的就是大家常说的AI对话接口。

原文地址:https://platform.openai.com/docs/api-reference/chat

image

鉴于大模型对外提供的核心能力比较简单,大多数场景下就是一问一答。所以绝大多数厂商都采用了完全相同或兼容OpenAI API的方式来提供服务,这样大家在切换模型的时候就会变得非常简单。Deepseek也不例外,在官方的api平台,可以看到样例https://api-docs.deepseek.com/zh-cn/guides/reasoning_model

image

思维链的输出与OpenAI不同,Deepseek最大的贡献在于完整的向用户展示了模型的思维链为了展示这个思维过程,Deepseek在输出字段中增加了一个字段。

image

这就导致了目前大家用的各类开源、闭源产品都要重新去适配这个新增的思维链字段,进一步出现了上述存在的各式各样显示问题,我们挨着说。

原生Deepseek的OpenAI API

我们测试原生Deepseek API,用一个简单的脚本输入一个你好,可以看到如下结果,模型输出了思考的过程和给出的结果,这个与官网上的输出基本上是类似的。

image

image

目前有不少公司比如腾讯、硅基流动、阿里云等等,都是类似的结构,可以在他们的官网找到详细说明。

开源工具本地部署

在这里大家常用的ollama、VLLM、SGLang、KTransformer等等开源产品部署出来的Deepseek却是完全另外一个样子。

未开启强制思考模式

image

开启强制思考模式

image

从这里我们看到不仅我们用开源工具部署的Deepseek-r1不仅没有reasoning_content,也居然会出现两种不同的情况。未强制开启思考模式时,思考内容会在中;强制开启思考模式时,就只剩下了这也就解释了文章一开头说到的,为什么接入了不同的API后,有的显示思维链,有的完全不显示,有的显示一半。

解决思路

为了解决这个问题,最好的方法当然是统一API,但是各类工具的研发速度可能没有那么快,有能力的大佬们可以手搓修改。我这里给出几个我自己使用的修复思路。

思路一:等

无论你是用的OpenWebUI、chatbox、fastgpt、dify还是客户端工具,还是ollama、vllm、sglang、KTransformer这种引擎关注他们的最新版本,社区会逐步修复问题。

思路二:手搓

鉴于现在Deepseek的影响力,在api中加入reasoning_content字段几乎已成为标准所以这里手搓的思路,还是可以把各类的奇怪的OpenAI API中content包含的思考过程重新写入reasoning_content是一个合理方式。

API版

这里可以使用了一个开源产品叫做one-api,用来把所有模型的接口都转换为统一的接口。https://github.com/songquanpeng/one-api

image

使用方法也很简单,只需要安装好docker,然后用官方给出的命令就能跑起来了。

简单配置一下,就可以把各种不同的厂商的模型接进去了,以腾讯云为例。

image

本地部署版

本地部署ollama、vllm、sglang的推理引擎部署的大模型,暂时无法使用上述这种方式核心原因是目前包括one-api在内也未在标签中的思维链抽取出来放在reasoning_content中。这里我手搓了一个版本,如果你也遇到了相同的问题,可以用下面这个镜像来替代官方one-api镜像。

image

配好了之后,你本地部署的Deepseek也就可以正常输出啦!代码我就不公布了,因为这段代码写的也着实不怎么样,社区也不会接纳这段代码,大致思路是在正常输出的过程中把标签中的内容抓出来硬塞到reasoning_content中。其实这是一种在屎山上拉新屎的解决方案,但是为了最快解决问题,也是一种无奈之举。技术债务,其实也就这么形成了。

测试和结论

开放测试一些聪明的同学可能会想到,这个由开源软件导致产生的技术债务,各个提供API的厂家是怎么解决的呢?我们可以准备一个问题来测试一下:请给我解释一下这个标签是啥意思?

Deepseek官方的测试

没有任何问题,展示完美,还得是官方!鉴于官方的API现在已经关闭了,测试不了只能在界面上进行测试。侧面说明了Deepseek是自研的推理引擎,完全不存在这个问题。

image

某厂1 API

我们用chatbox来做测试,可以看到Deepseek-R1直接就中断了思考,说明他们也是去匹配第一个标签的,但可以清晰的看到,真实的思考过程并没有结束。说明大厂的小哥哥也有他的无奈呀~

image

界面上就卡死掉了,多次尝试也是重复的问题。

image

某厂2 API

尝试了多次,某厂2貌似用了一种另辟蹊径的方式屏蔽了标签?但是多轮对话之后依然出现了思维中断的问题。

image

但是如果在多轮对话场景下,依然可以诱导模型标签来中断思考。

image

我们修改提示词并进行强调,马上就原形毕露了。

image

某厂3 界面

深度思考同样中断。

image

某厂4 界面

输出几乎全部错乱了,一会在思考,一会没有思考,一会又开始思考。大概率是把所有全给匹配了。

image

某厂5 APP

已完全错乱,跟上面一样。

image

技术债务产生的根本原因

这个问题本质上是由Deepseek模型输出思维链时是按照模板进行输出的,各大开源推理引擎都是直接输出到回答内容里面的。如果输入内容有类似的模板标签时,就会出现错乱。虽然这不是什么安全问题,但是显示的乌七八糟的也会让用户迷惑,尤其是在涉及到写代码/联网搜索的时候。我们自己的修复虽然原理上差不多,还是稍微改进了那么一丢丢,用文章上面的docker可以解决这个问题。不完美,算是抛砖引玉,希望有大牛能来推动社区解决这个问题。

image

大家都在看的硬核博主技术分享真·生产级满血版Deepseek-r1 671B部署实例真·生产级满血版Deepseek-r1 671B部署实例篇2-后续问题、调优以及压测本地部署的Deepseek为什么不思考?调优方法来了!

原文转载自:https://mp.weixin.qq.com/s/J28ivSORY8GBAx2Tz1oO1g

#你可能也喜欢这些API文章!