码农之家

专注优质代码开发,为软件行业发展贡献力量

提速 RAG 应用:用 DeepSeek API 替换本地 Ollama 模型,LlamaIndex

概述
如何用 30秒和 5 行代码写个 RAG 应用? ,我们介绍了如何利用 LlamaIndex 结合 Ollama 的本地大模型和在 Hugging Face 开源的 embedding 模型用几行 Python 代码轻松构建一个 RAG 应用。

从最终输出的结果上看是满意的,理论上是可以针对本地的知识库内容进行精准的问答。然而执行效率却不尽人意。原因是:无论 LLM 还是 embedding 模型的调用都是在本地,而我本地电脑的性能确属一般(几乎只能利用到 CPU 资源,没有 GPU 资源),这样就导致代码运行速度缓慢。

本文我们将介绍,如何通过调用国产大模型 DeepSeek 的 API 为我们的 RAG 应用提速,我们将把对本地 Ollama 的模型调用替换成对 DeepSeek API 的调用。

DeepSeek
首先来明确几个问题

为什么不用 OpenAI 的 API?
当然可以,而且 LlamaIndex 默认支持的就是通过 API Key 访问 OpenAI 的 API。 问题是成本太高了,有更高性价比的所以不用它。

DeepSeek 是什么 ?
DeepSeek 这个词在不同的上下文中有不同的含义,为了避免概念和语义的混淆,我们在这里分别说明一下:

DeepSeek 代表一个公司:杭州深度求索人工智能基础技术研究有限公司,专注于大模型研发、AI 技术创新和企业解决方案,是幻方量化的子公司。
DeepSeek 代表一个大语言模型 :具有 236B 参数量(2360 亿个参数)的开源大语言模型。严格上讲,DeepSeek 不只是一个单一的模型,而是包含多个针对不同任务和应用场景的模型系列,这些模型在 DeepSeek 的基础上进行了专门的优化和训练,以满足特定的需求,如:DeepSeek-Chat、 DeepSeek-Math、DeepSeek-Coder 等。
DeepSeek 是一个 API: 由 DeepSeek 公司开发对外提供付费的大模型功能的接口,支持文本生成、对话系统、文本摘要、问答系统和多模态任务等。
在本文中,我们利用 DeepSeek 的 API 间接调用 DeepSeek 所提供的模型,具体模型是 DeepSeek V2.5(DeepSeek V2 Chat 和 DeepSeek Coder V2 两个模型已经合并升级,升级后的新模型为 DeepSeek V2.5)

为什么用 DeepSeek ?
使用 DeepSeek 主要出于成本和效果的综合考虑。

虽然 DeepSeek 是开源大模型(在大模型领域,类似这样的国产中文开源大模型还有许多),但是部署这样的具有大规模参数的模型是需要很多硬件资源的,我们手上的个人电脑没有这个条件。更别说运维和微调这样的模型。所以通过 API 直接调用已经部署好的模型是最便捷的方式,当然,这是有成本的,人家部署和运维这样规模的模型也是需要成本的,所以这些 API 是需要付费使用的。

从成本考量,DeepSeek 几乎是最佳方案,因 DeepSeek API 调用价格之便宜曾被戏称为 “AI 界的拼多多”。在 DeepSeek 价格公开后不久,多家模型厂商卷入价格战,现在的模型调用价格是真真正正的被 “打下来”了。多家公司频繁更新自家模型价格,截止目前,可以说 “没有最低,只有更低”。

从效果考量 ,因之前使用过 deepseek-coder、和 deepseek-chat 两个模型,效果上可以说是在中文模型领域的第一梯队。当然这只是我个人的使用体验。

从权威的角度,通过 LMSYS Chatbot Arena Leaderboard(LMSYS Chatbot Arena Leaderboard 是一个大型语言模型的评测排行榜,提供了一个匿名竞技场,用于评估和比较不同模型的性能。) 这个大型语言模型的评测排行榜可以了解 DeepSeek 的能力如何

最近的几个月里,国产模型中与 DeepSeek 排名竞争最激烈的是阿里的 Qwen2.5

DeepSeek 的使用费用
前文中我们提到 DeepSeek 的 API 是需要付费调用的,所以到底收多少钱是一个关键的问题。

首先,如果你是一个新用户,那么 DeeepSeek 会送你 500w 个 tokens (在自然语言处理中,Token 是指将文本分割成的最小单位。这些单位可以是单词、子词、字符等,具体取决于所使用的分词策略)。简单理解就是 500w 个字。需要注意的是,送的 tokens 有有效期,一个月后就过期了。

其次,如果送的 tokens 用完了,就需要花真金白银去充值了。

DeepSeek API 的使用
无论是通过赠送还是付费,当你拥有了 tokens,你就可以根据文档创建自己的 API key 并进行 API 调用了。

由于是走网络 API 的这种方式,在编程语言上就没有限制了,你可以选用你觉得合适的语言。 DeepSeek 官方也比较贴心的给出了各种语言调用的示例:

这里我用 Python 写了一个简单的调用 Demo, 以下是具体代码:

from openai import OpenAI

class DeepSeekChat:
    def __init__(self, api_key, base_url="https://api.deepseek.com"):
        self.client = OpenAI(api_key=api_key, base_url=base_url)

    def chat(
        self,
        system_message,
        user_message,
        model="deepseek-chat",
        max_tokens=1024,
        temperature=0.7,
        stream=True,
    ):

        response = self.client.chat.completions.create(
            model=model,
            messages=[
                {"role": "system", "content": system_message},
                {"role": "user", "content": user_message},
            ],
            max_tokens=max_tokens,
            temperature=temperature,
            stream=stream,
        )

        if stream:
            return self._stream_response(response)
        else:
            return response.choices[0].message.content

    def _stream_response(self, response):
        full_response = ""
        for chunk in response:
            if chunk.choices[0].delta.content is not None:
                content = chunk.choices[0].delta.content
                print(content, end="", flush=True)
                full_response += content
        
        print("\r\n===============我是分隔线===============")
        return full_response

# 使用示例
if __name__ == "__main__":
    deepseek_chat = DeepSeekChat(api_key="[你的 API Key]")
    response = deepseek_chat.chat(
        system_message="你是一个聪明的 AI 助手",
        user_message="请问昆明有几个区?",
        stream=True,
    )
    print("完整回答:", response)


可以看到我们只引入了 openai 这一个库,原因是 DeepSeek 的 API 和 OpenAI 的 API 是兼容的。

DeepSeek API 使用与 OpenAI 兼容的 API 格式,通过修改配置,您可以使用 OpenAI SDK 来访问 DeepSeek API,或使用与 OpenAI API 兼容的软件。
--源自 DeepSeek 文档
引入 openai 这个库以后我们不需要再引入其他多余的库就可以进行 API 请求了。

AI探究员小豆

0 评论数