简介:清华新闻与传播学院新媒体研究中心元宇宙文化实验室余梦珑博士后团队编写的《DeepSeek从入门到精通》PDF,以一百零四页篇幅系统讲解DeepSeek-R1的核心能力、应用场景与提示语设计。内容覆盖智能对话、文本生成、语义理解、代码生成补全等落地场景,并支持联网搜索、深度思考与文件上传;同时对比推理模型与通用模型在不同任务中的适用边界,适合提示词优化者、AI产品运营、技术开发者及希望用好国产大模型的普通用户。压缩包仅含一个PDF文件,整体大小6.45MB,便携易用。目前已有三千余人学习浏览,文档在基础之上进一步拆解提示语链设计、CIRS与SPECTRA模型、三链融合,以及新手常见的缺乏迭代、过度指令、幻觉生成等陷阱,并结合气候变化写作、网络安全策略、智能家居产品设计等实战案例展示从基础使用到创新应用的进阶路径,是系统掌握提示词技能的高性价比资料。
1. 104页的DeepSeek手册,最值得读的不是最后一章
这份标题带着“2025清华”前缀的《DeepSeek从入门到精通(104页).pdf》,最近在各技术群里被转得相当频繁。我第一次看到时也以为又是一份PPT式科普,但翻完才回过味:104页的容量里,真正值钱的不是“精通”这个结果,而是它把从“知道DeepSeek”到“能把DeepSeek用进生产”中间那些默认你会、却没人讲的环节补全了。它适合两类人:一类是刚接触大模型,想搞懂API怎么调、本地怎么部署的工程师;另一类是已经在用ChatGPT或类似产品,但想把同样一套能力迁移到DeepSeek体系里的业务方。如果你只想泛读,这份PDF确实不需要;但如果你想照着它动手落地,后面的内容是一套现成路线图。
2. DeepSeek到底有多大本事:先搞清能力边界,再谈怎么用
接入DeepSeek最常犯的错,是拿一个模型干所有事。DeepSeek虽然对外只给一个“DeepSeek”品牌,但实际产品线里能明显分出“通用对话”和“推理模型”两个方向,接口层面也会区分成 deepseek-chat 与 deepseek-reasoner 这类不同路由。读完这份手册给我的第一感触是:它花了不少篇幅讲这两类模型的差异,因为选错模型,后面调提示词、配参数、看效果全都会走弯路。
2.1 推理模型和通用模型的分工:不是“谁强谁弱”
推理模型的特点是“先想后答”。传给它的请求如果涉及数学题、逻辑推导、多步骤代码分析,它会先生成一段内部推理过程,再给出最终结论。代价是响应时间明显变长,token消耗也更大。通用模型则更接近“快问快答”,日常对话、文本改写、信息抽取、代码补全都用它,延迟低、单价便宜。
实操里我一般这么做:做代码审查、解算法题、拆复杂需求时走推理模型,因为它能把“为什么是这个方案”推给你看;而写周报、整理会议纪要、做文案初稿这类任务,用通用模型就够了。很多团队翻车,就是把推理模型挂在生产接口上,用户等三秒嫌慢,或者拿通用模型去解复杂题,发现逻辑漏洞百出。手册里反复强调的边界,落到工程上就一句话:按任务类型路由,不要按品牌路由。
顺带说一句,DeepSeek底层用了MoE这类稀疏激活结构,单个请求实际激活的参数量并不大,这也是它能把单次调用成本压下来的原因之一。但这不意味着它可以无限并发做重型推理,部署形态选错了照样卡。
2.2 一个常被忽略的事实:DeepSeek是文本模型,不是“文件阅读器”
很多人拿到这份PDF,第一个想法是“能不能把PDF整个丢给DeepSeek,让它给我总结”。这里必须说清楚:DeepSeek是纯文本模型,不能直接“看”PDF,也不支持直接分析图片里的文字。所谓让DeepSeek读PDF,真正发生的是你先把PDF里的文本抽出来,再作为提示词内容喂进去。
拿这份104页的手册举例,如果我想让它总结某一章的要点,我不会直接把PDF文件传给接口,而是先用解析工具把那一页或那一节转成纯文本,再按章节切好,拼到提示词里。遇到扫描版PDF,还得先过一层OCR,把图片中的中文文字识别出来。这是DeepSeek落地时最典型的一类前置工程,很多新手在这里栽跟头——以为模型能读文件,结果喂进去一堆二进制乱码。
文本模型这个特性也决定了它的输出上限:它能生成JSON、Markdown、代码,但它不会因为你传了一个损坏的PDF就报“文件损坏”,它只会把你给的文本按它理解的方式处理。所以处理PDF文档这类需求,工作重心要放在“文本抽取干不干净”上,而不是模型选型上。
2.3 三种部署形态怎么选:官方API、Ollama本地、vLLM内网服务
这份手册覆盖的部署内容不算深,但对入门者来说,搞清楚三种形态的适用场景比学会某一条命令更重要。我按自己的项目经验列了个对比:
| 形态 | 成本曲线 | 适用场景 | 主要注意点 |
|---|---|---|---|
| 官方API | 按token计费,缓存命中会便宜 | 快速验证、生产小流量 | 数据要出域,敏感信息不能传 |
| Ollama本地 | 一次性买显卡,电费可忽略 | 个人学习、原型验证 | 显存决定模型规模,量化要会选 |
| vLLM内网服务 | 硬件投入高,吞吐好 | 企业内网、高并发、数据合规 | 部署复杂,需要维护模型版本 |
我一般会建议:如果你的业务数据涉及用户隐私或公司内网,就直接跳过官方API,从Ollama起步做原型,验证通之后再迁到vLLM;如果只是个人学提示词、跑脚本,官方API的免费额度或低价套餐反而是最快路径,别为了“本地部署”买一张显卡回来吃灰。这里没有绝对正确,只有合不合适。
3. 把手册变成本地能力:DeepSeek API调用与离线部署的最小闭环
读手册不能只读不练。我见过不少同事把这份PDF从头划到尾,笔记记了一堆,第二天打开电脑还是不知道第一行代码写什么。真正的入门,是先把“调通一次接口”这个闭环跑起来,后面所有提示词技巧才有地方验证。这一章就按最小可用的标准来:API调用、本地部署、参数配置三件事。
3.1 用Python调通DeepSeek API:最小代码长这样
无论你最终用不用官方接口,先跑通一次HTTP调用都是值得的。它能让你理解大模型接口的通用结构:URL、鉴权头、请求体、响应解析。下面是我不加任何封装的最小示例:
import requests # 换成你实际申请的网关地址和密钥 API_URL = "https://gateway.example.com/v1/chat/completions" API_KEY = "sk-xxxx" payload = { "model": "deepseek-chat", "messages": [ {"role": "system", "content": "你是一个严谨的运维工程师,回答尽量用步骤列表。"}, {"role": "user", "content": "帮我检查这段配置文件的错误。"} ], "temperature": 0.3, "max_tokens": 1024, "stream": False } resp = requests.post( API_URL, headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}, json=payload, timeout=60 ) data = resp.json() print(data["choices"][0]["message"]["content"])这段代码的逻辑很直观:messages里第一条system负责定基调,相当于给模型交代身份和回答风格;后面的user才是你真正要问的内容。model字段决定走通用模型还是推理模型,我在这里用的是deepseek-chat,如果你想验证推理能力,把它换成deepseek-reasoner,响应里会多出一段思考过程字段。
三个参数值得说明。temperature控制随机性,代码检查这类确定性任务我通常调到0.3以下,文案创作才会上到0.7以上。max_tokens是本次回答的最大长度,设太短长报告会被腰斩,设太长又浪费钱。stream是流式开关,做聊天应用必须开True,否则用户要等整个回答生成完才看到第一个字;做离线批处理则保持False即可。实际生产里,我还会补一个状态码判断,400和401是最常见的两类报错,前者多半是请求体字段写错,后者是密钥无效。
3.2 本地部署DeepSeek要几步:Ollama与vLLM两条路
API跑通之后,就该考虑本地部署了。最轻的路径是用Ollama,它把模型下载、量化、启动都封装成了三条命令:
# 安装完Ollama之后,拉取DeepSeek的蒸馏版模型 ollama pull deepseek-r1:7b # 启动交互式对话 ollama run deepseek-r1:7b # 查看模型列表,确认部署成功 ollama listOllama适合个人电脑,7B量化模型在6GB左右显存就能跑起来。但要注意,这个“6GB”是指纯推理占用,如果你同时开浏览器、IDE,显存会被抢,系统直接OOM。我自己的做法是拉模型之前先看nvidia-smi确认空闲显存,低于5GB就换更小的量化版本。
如果目标是企业内网的高并发服务,Ollama就不够了。vLLM是生产环境更常见的选择,它通过PagedAttention和连续批处理把吞吐拉高不少,启动命令长这样:
vllm serve deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \ --port 8000 \ --max-model-len 8192 \ --gpu-memory-utilization 0.85 \ --tensor-parallel-size 1这里的--max-model-len是上下文窗口长度,设越大显存吃得越狠;--gpu-memory-utilization控制在0.85,是给KV cache和调度留出余量。模型名里的蒸馏版本可以换成你实际下载到的目录,关键是理解这几个参数决定了你能处理多长的输入、能支撑多大的并发。
3.3 三个必调参数:temperature、max_tokens、上下文长度
参数配置是整个部署里最像“玄学”的部分,但其实有规律可循。第一个必调是temperature。它的取值范围一般是0到2,0意味着每次都选概率最高的词,输出几乎可复现;1以上则开始明显发散。工程任务的建议是固定0.1到0.3,不要让它“自由发挥”。
第二个是max_tokens。这个参数要结合业务场景估算:一页A4纸中文大约500到600字,折算成token大约700到900。如果让模型生成一份20页的报告,max_tokens至少要给到14000以上,否则输出到一半就断。很多“答案不完整”的投诉,根源都是这个值设小了。
第三个是上下文长度,也就是模型能“记住”多少前文。这个值由模型决定,不是你想给多少给多少。超过上限的输入,不同网关的处理方式不一样,有的直接报错,有的静默截断。我见过最坑的是后者,模型把中间一大段吃了,你还浑然不觉。所以长文本任务一定要先对输入做长度估算,超了就分块或摘要,别硬塞。
4. 从会问到会出活:提示词设计照着这四个套路做
手册后半部分花了很多篇幅讲提问技巧,但“会提问”的第一步不是话术,而是任务拆解。我在实际项目里验证过,同一个模型,提示词写得粗糙跟写得细致,输出质量可以差出几个量级。这一章把最实用的四个套路拆开讲。
4.1 先拆任务,再写角色设定
很多人的提示词只有一句话:“给我写一份项目周报。”模型确实能写,但写出来的东西往往面目模糊。原因不是模型笨,而是任务本身没拆开。我的做法是把大任务拆成三步,然后用提示词把这三步“钉死”:
你是数据分析师。请按以下顺序处理这份文本: 1. 先抽取文本里的三个核心结论; 2. 再用列表列出每个结论的支持证据; 3. 最后指出文本中可能存在的反例或漏洞。 按顺序输出,不要跳过任何一步。这段提示词的逻辑是:模型本质上是在做“下一步预测”,你给它明确的步骤序列,它就不容易跳步。反过来,如果你只说“分析这份文本”,它会默认挑最显眼的内容先讲,很可能漏掉你要的深层信息。拆任务不限于提示词本身,也包括任务粒度。复杂需求我会在提示词里加一句“如果信息不足,先问我三个澄清问题”,这比让模型瞎猜高效得多。
角色设定也很重要,但它不是万能的。“你是一个资深的…”这种句式能约束回答风格,约束不了事实准确性。角色设定的作用,是让模型调用它学过的对应领域的表达方式和结构习惯,而不是让它真的“懂”某个行业。
4.2 让模型按JSON或Markdown交结果,而不是交作文
与模型对接最头疼的,是它给你大段散文,你还得写正则去抠关键信息。商业项目里的模型接口,一般不会直接对用户,而是先让模型输出结构化数据,再由代码去渲染。这就需要在提示词里明确“响应格式”。
请把下面这段会议纪要解析成JSON: { "title": "会议主题", "decisions": ["决策1", "决策2"], "action_items": ["待办1", "待办2"], "deadline": "截止日期" } 只输出合法JSON,不要输出解释文字,不要用markdown代码块包裹。这里有两个细节容易被忽略。第一,“只输出合法JSON”这句话要写,否则模型会给你来一段“好的,以下是您需要的JSON”这种废话,解析直接报错。第二,要求它“不要用markdown代码块包裹”,因为很多模型默认会把JSON包进```json代码块里,你的解析器得再做一次剥离。如果你用的是较新的接口,也可以尝试JSON Schema之类的约束字段类型,但最保险的做法还是先把提示词约束做对。
结构化输出同样适用于文本类任务。想让模型交一份格式统一的分析报告,就在提示词里写“用二级标题、表格、要点列表组织内容,代码放在最后”。DeepSeek对Markdown语法的遵循度总体不错,只要提示词里的模板够具体,导出到文档、网页、PDF的排版成本会大幅下降。
4.3 多轮会话与“对话上限后怎么续”的交接笔记
用DeepSeek的过程中,几乎所有人都会遇到一个问题:长对话到达上下文上限,新消息发不出去,或者模型开始“忘记”前面聊了什么。这时候很多人会硬开一个新对话,然后发现之前讨论的结论全丢了,被迫重复一遍。
我的做法是给“交接”做一个固定动作:在对话末尾,让模型自己生成一段交接摘要,然后我把这段摘要带进新会话里。
对话即将达到上限。请用最多100字总结我们已经确认的结论, 列出我们当前的分歧点,以及下一步需要处理的事项。新会话打开后,把这段摘要贴在第一条消息里,并补充“基于上面这些已确认结论继续,不要重复讨论已经定下的方案”。这样新对话能无缝承接旧任务,不用从零复述。手册里讲“上下文管理”,落地到实际就是这一件事:把长对话切成短对话,靠交接摘要保持连续性。这比盲目把整个对话历史复制过去要省太多token,也更不容易触发上下文截断。
5. 避坑指南:DeepSeek项目里最常见的5个翻车点
再完整的手册也覆盖不了所有实战中的怪问题。这一章是我自己踩过、或者帮别人排过的高频坑,按“现象到原因到解决”写在下面,希望能帮你少走几趟夜路。
5.1 长文档还没读完就被截断
现象:给DeepSeek喂了一份很长的PDF解析文本,模型的回答前言不搭后语,或者压根没提文本后半部分的内容。原因:输入长度超过了模型的上下文窗口,网关静默截断了中间部分,模型根本“看”不到后面的内容。这是我见过最多的一个坑,尤其是从PDF抽出来的文本,动辄几万字,新手习惯整段丢进去。
解决:先估算输入token量,明显超长就切块。切块后有两种策略,一种是只把相关段落喂进去,适合“提炼指定章节”这种需求;另一种是先让模型为每块生成摘要,再把摘要汇总,适合“总结全文”这种需求。我在处理这份104页手册时会按章切分,一章一个请求,最后再让模型把各章摘要合成总览。
5.2 “深度思考”模式把响应时间拖到翻车
现象:接口调用有时候要等十几秒才返回,用户端体验极差,甚至触发超时重试。原因:走的是推理模型路由,模型先生成一大段内部思考过程,再生成最终答案。我一个项目里曾把deepseek-reasoner挂在聊天接口上,单个请求耗时直接翻倍。
解决:按任务路由。聊天、抽取、改写这类“即问即答”的请求走通用模型;只有数学推理、复杂代码审查等任务才切到推理模型。如果必须用推理模型又嫌慢,可以在提示词里明确“直接给出结论,不需要展示分析过程”,虽然不保证完全生效,但能明显减少思考内容的长度。
5.3 本地部署一启动就OOM
现象:模型拉下来,ollama run跑起来,没过几秒进程被杀,dmesg里能看到内存耗尽的记录。原因:显存不够。很多人只看了模型文件大小,忽略了一个模型跑起来还需要额外的KV cache空间,实际占用往往是模型体积的1.5倍以上。7B模型网上说“最低6GB显存”,指的是纯推理,真开对话窗口、批处理,占用会更高。
解决:换更小的量化版本,比如从7b换成7b:q3,或者干脆用deepseek-r1:1.5b做学习验证。另外一个办法是把max-model-len调小。上下文越长KV cache占用越大,把上下文从32K压到8K,显存占用能立刻降下来。硬件的路走不通时,别死磕大模型。
5.4 temperature设置不当,模型原地复读
现象:模型生成的内容出现大量重复,一句话翻来覆去说,调高temperature后更严重。原因:这个现象在工程任务里很常见,temperature设得太高,模型在概率分布上“打转”,尤其在代码生成或格式化输出场景,随机性增大反而导致结构崩坏。
解决:把temperature压到0.2以下,同时把top_p设成0.9或直接留默认。更有效的做法是从提示词上治本,比如在末尾加上“不要重复上文已有的结论”。另一个我常用的招是开frequency_penalty惩罚重复词,让模型必须换词表达。调参是治标,提示词才是治本。
5.5 返回“无法处理”但提示词本身没问题
现象:提示词写得很正常,没有违规内容,但模型拒绝了请求或给出一段“我无法处理”的套话。原因:模型的合规策略可能把某些行业术语、历史名词当成了敏感词,触发拒答。它不是没看懂,而是把内容映射到了“不该答”的类别上。
解决:不要尝试研究“绕过”或“破限”,那个方向既不稳定也不合规。正确做法是换一种提问角度,把问题拆得更细。比如它拒答“帮我分析这个协议”,你可以改成“请从这个文档中提取涉及责任方的条款,按条目列出”,后者是客观的信息抽取,模型通常不会拒绝。我踩过这个坑之后养成的习惯是:提示词里少用“绕过”“规避”这类词,多用“提取”“对比”“列出”这类中性的操作动词。
6. 精通的最后一步:给DeepSeek搭一个20条的回归测试台架
读完整份PDF、跑通API、调好参数之后,很多人会误以为“精通”已经到手。实际上,真正让我觉得自己“精通”某个模型的时刻,不是它能回答我的问题,而是我能用数据说明一个问题:同一个提示词调整前后,到底好了多少。大模型是黑匣子,你没法看穿它,但你能用输入输出对给它织一张网,每次改动都拿网去接。
具体做法是建一个回归测试集,不需要大,20条足够起步。每一条包含三列:输入提示词、期望回答中必须出现的关键词、不应出现的关键词。然后写一段脚本自动跑,给每次模型参数或提示词的改动打分。拿我之前做过的一个客服问答场景为例,评估脚本可以写成下面这样:
import requests test_cases = [ {"prompt": "退款多久到账?", "must_contain": ["3-5", "工作日"]}, {"prompt": "发票怎么开?", "must_contain": ["订单号", "发票"]}, ] def run_case(case): resp = requests.post(API_URL, json={ "model": "deepseek-chat", "messages": [{"role": "user", "content": case["prompt"]}], "temperature": 0.2, "max_tokens": 128 }, timeout=30) answer = resp.json()["choices"][0]["message"]["content"] score = sum(1 for kw in case["must_contain"] if kw in answer) return score, answer total_score = 0 for c in test_cases: score, _ = run_case(c) total_score += score print(f"回归得分: {total_score}/{len(test_cases) * 2}")这个脚本的评分逻辑很粗糙,关键词命中只是一个代理指标,但它的价值在于把“感觉变好了”变成“从83分变成91分”。我每改一次系统提示词,就全量跑一遍这20条,分数不降才敢上生产。这个习惯救过我一次:有一次我把系统提示词改得更“详细”,人工抽查觉得挺好,回归测试一跑,分数掉了15分,才发现新提示词把“发票怎么开”的答案引到了退款流程上。
如果你已经有日志系统,可以把真实用户的问题持续补充进测试集,20条滚成200条,角色就从“调参的”变成了“定义模型行为的人”。这也是我读完那份104页手册之后最大的收获:手册能教你的只是起点,真正的“精通”藏在你的验收方法里。希望你也能从第一个20条的回归集开始,把自己的DeepSeek调成一只听得懂人话、也经得住追问的可靠工具。以上是我个人的实操习惯,不一定适合所有团队,但方向大概率没错,希望帮到你。
本文还有配套的精品资源,点击获取