DeepSeek-Coder 深度解析:16K 长上下文,代码自己写自己
2026/9/5 18:29:28 网站建设 项目流程

DeepSeek-Coder 深度解析:16K 长上下文,代码自己写自己

【免费下载链接】DeepSeek-CoderDeepSeek Coder: Let the Code Write Itself项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder

DeepSeek-Coder 是一套从 2T token 从头训练出来的开源代码语言模型,覆盖 1B 到 33B 共 4 个尺寸,核心卖点是一次能读进 16K token 的上下文,并专门支持项目级代码补全与"代码中间填空"。它跑在普通的 PyTorch + CUDA GPU 环境里,装好依赖、拉起 demo,几分钟就能看到效果。

它想解决什么问题

现有代码补全工具最大的短板,是"看不到整个项目"。传统模型的有效窗口通常只有几千 token,而现实里的编辑动作往往跨文件:新写一个函数要调用utils.py里的工具,补一段逻辑要遵守另一个文件里类的签名。窗口一旦装不下依赖关系,模型只能靠猜,给出的代码编译不过、跑不对。DeepSeek-Coder 的思路很直接:把窗口拉到 16K,再用跨文件的依赖解析重排训练语料,让模型见过"一个项目"而不只是"一个文件"。

技术亮点是怎么做到的 ⚙️

三个技术点,分别对应"读得广、补得准、见得全"。

16K 长上下文。窗口一次装下约 4 万字符,相当于十多个屏幕的源码,接近一个中大型模块的全部代码。好比老师傅改老房子电路之前先把整张图纸铺开看一遍,而不是只盯着眼前那面墙;跨文件调用、全局重构这类操作,模型才不会"断片"。

FIM(fill-in-the-middle)填空训练。代码不只是往后续写的,中间也常常缺一段。FIM 相当于专门练"接龙反着接":把for i in range(1, len(arr)):这样的片段挖成空格,让模型根据前后文把洞填上。README 里的 Code Insertion 示例正是这个机制,用特殊 token 标出待填的洞。

三阶段课程式训练。先看 pictures/model_pretraining.png 这张流程图,训练像上学一样分三步走:

  • 代码预训练:4K 窗口、1.8T token,先学会写代码,语料构成 87% 代码、10% 代码相关文本、3% 中文;
  • 长上下文预训练:窗口扩到 16K,再用 200B token,学会读长项目;
  • 指令微调:2B token,得到能对话的 Instruct 版本。

语料侧同样围绕"项目级"做文章:从 GitHub 抓取后,按文件依赖解析重排顺序、把相互依赖的文件拼成一个样本、再做 repo 级 minhash 去重,最后筛掉语法错误和低可读性代码。相当于把一堆散页按装订顺序拼回整本书再发给模型:

能力对应机制
项目级代码补全16K 窗口,跨文件依赖可见
代码中间填空(infilling)FIM 预训练 + 特殊标记 token
对话式代码助手2B token 指令微调
覆盖 80+ 编程语言训练语料 87% 代码 + 13% 自然语言

效果与数据 📊

开源阵营里,33B 版本全面领跑。对比同量级的 CodeLlama-34B,DeepSeek-Coder-Base-33B 在 HumanEval Python、HumanEval 多语言、MBPP、DS-1000 四个基准上分别领先 7.9%、9.3%、10.8% 和 5.9%。

基准(pass@1)CodeLlama-34BDeepSeek-Coder-Base-33B
HumanEval Python48.2%56.1%
HumanEval 多语言(8 语言平均)41.0%50.3%
MBPP55.0%66.0%
DS-100034.3%40.2%

更值得注意的是效率:7B 版本的多语言平均分 44.7%,已追平 34B 的 41.0%,小卡也能跑。指令版同样能打,DeepSeek-Coder-Instruct-33B 的 MBPP 为 70.0%,与 GPT-3.5-turbo 的 70.8% 基本持平,HumanEval Python 单语言得分 79.3%。多语言各语言维度的雷达图如下,外圈即 33B 的得分:

五分钟跑起来

先克隆仓库并装依赖:

git clone https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder cd DeepSeek-Coder pip install -r requirements.txt

拉本地聊天 demo(Gradio 界面):

python demo/app.py

不想看界面,直接加载模型也行,以 6.7B 补全版为例:

from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-coder-6.7b-base", trust_remote_code=True)

四种用法(代码补全、代码插入、对话、仓库级补全)的完整示例见 README.md 的 How to Use 一节。需要微调的话,入口是 finetune/ 下的脚本,支持 DeepSpeed,准备每行含instructionoutput两个字段的 JSON 数据即可;所有基准的复现代码放在 Evaluation/,想自己验证上面的表格数字,直接跑那里就行。

16K 长上下文加项目级 FIM 的组合,把"补全工具只在单文件里打转"这个问题基本解决了,代码与模型均允许商用。接下来可以盯着仓库里 33B 指令版和量化生态的更新;有想法欢迎直接在项目仓库提 issue 或提交 PR 一起打磨。

【免费下载链接】DeepSeek-CoderDeepSeek Coder: Let the Code Write Itself项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询