使用 DeepSeek AI 生成和理解代码

2025年4月23日 | 阅读 11 分钟

在技术领域,众所周知,DeepSeek Coder 主要由一系列代码语言模型组成,其中每个模型都从头开始在2T个 token 上进行训练,其中包含87% 的代码和 13% 的英语和中文自然语言。尽管如此,它提供了各种大小的代码模型,范围从 1B 到 33B 版本。

在本教程中,每个模型主要在项目级别的代码语料库上进行预训练,使用 16K 的窗口大小和一个额外的填空任务,以支持项目级别的代码补全和填充。在编码能力方面,DeepSeek Coder 在多种编程语言和基准测试中的开源代码模型中取得了最先进的性能。

>Code Generation & Understanding using DeepSeek AI
  1. 海量数据训练:在 2T 个 token 上从头开始训练,主要包括 87% 的代码和 13% 的英语和中文语言数据。
  2. 高度灵活和可扩展:它还提供 1B、5.7B、6.7B 和 33B 的模型尺寸,允许用户有效地选择最适合其需求的设置。
  3. 卓越的模型性能:在HumanEval、MultiPL-E、MBPP、DS-1000 和 APPS 基准测试上公开提供的代码模型中,性能最先进。

性能

我们已经在各种与编码相关的基准测试上评估了 DeepSeek Coder。所有这些结果基本上表明,DeepSeek-Coder-Base-33B 的性能明显优于现有的开源代码 LLM。与相应的 CodeLLama-34B 相比,在HumanEval Python、HumanEval Multilingual、MBPP 和 DS-1000 上,它分别领先 7.9%、9.3%、10.8% 和 5.9%。

>Code Generation & Understanding using DeepSeek AI

令人惊讶的是,DeepSeek-Coder-Base-7B 的性能超过了 CodeLlama-34B。在经过指令微调后,DeepSeek-Coder-Instruct-33B 模型在 HumanEval 上的性能优于 GPT-3.5-turbo,并且它还可以有效地在 MBPP 上取得与 GPT-3.5-turbo 相当的成果。

DeepSeek 这个词是什么意思?

DeepSeek basically is considered to be the Chinese artificial intelligence software company that develops large, open-source language models. Inspite of all this, "DeepSeek” has developed two large language models (LLMs) to date, R1 and V3. Furthermore, DeepSeek offers its users a much cheaper LLM experience with the similar capabilities and performance to the various popular LLMs, which may be included as GPT-4o.

>Code Generation & Understanding using DeepSeek AI

使用 DeepSeek 的优势

>Code Generation & Understanding using DeepSeek AI
  1. 考虑使用 DeepSeek 模型的主要原因之一是它们提供了显著的成本节省。它们以在价格上提供卓越的性能而闻名,仅是市场上其他模型的一小部分。事实上,DeepSeek 的定价可能比竞争对手低 10 倍,从而使企业能够大幅降低其人工智能支出。
  2. 使用相应的 DeepSeek 模型的另一个最重要的关键优势是它们在推理、数学以及编码方面的高级能力。这些模型专门设计用于在需要深度思考和解决问题的复杂任务中表现出色。
  3. 无论是解决复杂的数学问题还是编写和调试代码,DeepSeek 模型都能表现出色。它们能够通过挑战进行推理并处理复杂任务的能力,使它们成为行业的绝佳选择。

涉及该系统的各种技术,例如技术、金融和研究,在很大程度上依赖于这些类型的流程。

系统背后的可能技术

系统背后的各种技术如下所示

>Code Generation & Understanding using DeepSeek AI
  1. 自然语言处理 (NLP):这反过来用于理解各种文本描述并有效地将其转换为代码。
  2. 代码嵌入和预训练模型:大型模型,包括OpenAI 的 Codex(为 GitHub Copilot 提供支持),用于理解代码并生成准确的响应。
  3. 代码分析和静态分析:用于理解和重构现有代码。
  4. 机器学习和强化学习:用于优化代码并改进建议,这些建议更多地基于从开发人员那里持续获取的反馈。

支持的各种编程语言

DeepSeek 支持的不同编程语言如下所示

结果/成果评估

人们可以轻松地在各种与编码相关的基准测试上评估相应的 DeepSeek Coder。此处仅报告 HumanEval(Python 和多语言)、MBPP 和 DS-1000 上的pass@1 结果

>Code Generation & Understanding using DeepSeek AI

结果/成果表明,DeepSeek-Coder-Base-33B 的性能明显优于现有的开源代码 LLM。与 CodeLlama-34B 相比,在 HumanEval Python、HumanEval Multilingual、MBPP 和 DS-1000 上,它通常分别领先 7.9%、9.3%、10.8% 和 5.9%。令人惊讶的是,我们的 DeepSeek-Coder-Base-7B 达到了 CodeLlama-34B 的性能。

而且,DeepSeek-Coder-Instruct-33B 模型在经过指令微调后,性能优于 HumanEval 上的 GPT35-turbo,并且随后在 MBPP 上有效地实现了与 GPT35-turbo 相当的成果。

代码生成和理解系统(如 DeepSeek AI)的关键特性

与代码及其理解相关的各种关键特性如下

  1. 代码生成
    • 上下文代码建议人工智能系统,例如 DeepSeek,可以通过根据自然语言指令或现有代码片段生成代码来帮助开发人员。例如,我们可以要求它“生成一个 Python 函数来按键对字典列表进行排序”,它将提供代码。
    • 模板创建:它可以帮助为常见任务生成样板代码。
    • 算法解决方案:它可以有效地生成代码来解决算法问题,例如排序、搜索或复杂的数学函数。
  2. 代码理解:
    • 代码理解:DeepSeek AI 可以理解现有代码,从而有效地提供代码的洞察,包括代码的功能、结构以及潜在的改进领域。
    • 重构建议:它分析代码并提供优化建议,以提高效率、可读性或可维护性,并有效地提供替代方案。
    • 错误检测:通过理解代码逻辑,它可以突出显示易出错的部分、边缘情况或安全漏洞。
  3. 上下文辅助:
    • 上下文感知帮助:AI 可以被训练来理解当前项目的上下文,根据开发人员正在处理的内容建议相关的库或框架。
    • 集成:它可以与流行的 IDE(如 VS Code、IntelliJ IDEA)或代码协作工具(GitHub、GitLab)集成,以实时辅助代码生成和建议。
  4. 代码机器学习:
    • 代码到代码翻译:它有助于将选定的代码集从一种编程语言翻译到另一种编程语言,同时保持相同的功能,但适配不同的语法或环境。
    • 从代码库学习:DeepSeek AI 通常可以在大量的开源代码库上进行训练,以便有效地理解并生成与那些代码库中发现的解决方案类似的解决方案。
  5. 定制:
    • 用户特定适应:它可以从用户的编码风格或项目偏好中学习,随着时间的推移有效地提供个性化建议。
    • 领域特定辅助:它还提供特定领域的帮助,例如 Web 开发、数据科学或移动应用开发,并相应地调整输出以满足所有这些需求。

数据创建和模型训练的程序

1. 数据创建

步骤 1:首先,我们需要从 GitHub 收集代码数据,然后应用与 StarCoder Data 相同的过滤规则来有效地过滤数据。

步骤 2:解析同一存储库中文件的依赖关系,以便根据它们的依赖关系重新排列文件的位置。

步骤 3:连接各种依赖文件以形成单个示例,然后我们必须使用存储库级别的 minhash 进行去重。

步骤 4:进一步过滤低质量代码,例如带有语法错误或可读性差的代码。

2. 模型训练

步骤 1:最初使用包含 87% 代码、10% 代码相关语言(Github Markdown 和 StackExchange)和 3% 非代码相关中文的数据集进行预训练。模型通常在此步骤中通过使用 1.8T 个 token 和 4K 的窗口大小进行预训练。

步骤 2:使用扩展的 16K 窗口大小在额外的 200B 个 token 上进一步预训练,从而生成基础模型(DeepSeek-Coder-Base)

步骤 3:在 2B 个 token 的相应指令数据上进行指令微调,从而生成指令微调模型(DeepSeek-Coder-Instruct)

如何使用代码

因此,在继续之前,我们需要安装必要的依赖项。可以通过在有效的方式下运行以下命令来完成此操作


>Code Generation & Understanding using DeepSeek AI

1) 代码补全


>Code Generation & Understanding using DeepSeek AI

此代码将分别输出以下结果

>Code Generation & Understanding using DeepSeek AI

2) 代码插入


>Code Generation & Understanding using DeepSeek AI

此代码将分别输出以下结果

>Code Generation & Understanding using DeepSeek AI

3) 聊天模型推理


>Code Generation & Understanding using DeepSeek AI

此代码将分别输出以下结果

>Code Generation & Understanding using DeepSeek AI

如果我们不想使用提供的 API,即:apply_chat_template,它负责从 tokenizer_config.json 加载模板,我们也可以使用以下模板来与我们选择的模型集进行聊天。然后,我们可以用我们的指令替换 ['content'] 以及模型之前的(如果有)响应,模型将有效地生成对当前给定指令的响应。

>Code Generation & Understanding using DeepSeek AI

4) 存储库级代码补全


>Code Generation & Understanding using DeepSeek AI
>Code Generation & Understanding using DeepSeek AI
>Code Generation & Understanding using DeepSeek AI

通常,在以下场景中,相应的 DeepSeek-Coder-6.7B 模型将调用 model.py 文件中的类 IrisClassifier 及其成员函数,然后它将利用 utils.py 文件中的函数,以正确完成 main.py 文件中的主函数,用于模型训练和有效评估结果,而不会出现任何失败。

常见问题解答/FAQ

关于使用 DeepSeek AI 进行代码生成和有效理解的常见问题解答如下

问题 1:为 DeepSeek AI 中的模型量化提供 tokenizer.model 文件?

答案:相应的 DeepSeek Coder 主要利用 HuggingFace Tokenizer 来实现 Bytelevel-BPE 算法,并带有专门设计的预分词器以确保最佳性能。目前,没有直接的方法可以轻松地将分词器转换为 SentencePiece 分词器。我们正在为开源量化方法做出贡献,以促进 HuggingFace Tokenizer 的使用。

尽管如此,我们还向流行的量化存储库 llama.cpp 提交了一个 PR,以完全支持我们包括在内的所有 HuggingFace 预分词器。

在等待 PR 合并的同时,我们可以通过以下步骤有效地生成我们的 GGUF 模型:


>Code Generation & Understanding using DeepSeek AI

问题 2:如何有效地使用 deepseek-coder-instruct 来完成代码?

答案:虽然 deepseek-coder-instruct 模型在监督微调 (SFT) 期间没有专门针对代码补全任务进行训练,但它们仍然能够有效地执行代码补全。要启用此功能,我们只需调整 eos_token_id 参数。之后,我们必须将 eos_token_id 设置为 32014,而不是 deepseek-coder-instruct 配置中的默认值 32021。这个特定的修改会促使模型以不同的方式识别序列的结束,从而促进代码补全任务。