简介:这是一份DeepSeek AI平台的系统操作手册,从基础准备到高阶玩法共分六大部分,面向初次接触AI工具的新用户、想深度应用AI辅助工作的技术人员,以及需要借助AI进行内容生产与学习管理的人群。资源为单个PDF文件,约1.27MB,按章节组织、目录清晰,便于按需查阅。目前已有2748人下载学习。手册从三分钟创建账号、熟悉控制台讲起,系统教授有效提问的黄金法则和10个必学指令,并逐步深入文档分析、代码自动生成等效率技能;场景实战部分覆盖学术论文全流程辅助、自媒体运营、个人学习方案定制等真实任务,包含大量具体指令模板、案例演示和避坑指南,可帮助读者快速上手DeepSeek,将AI转化为可落地的生产力工具。
1. DeepSeek指导手册:从一次对话到一条可复现的落地路径
DeepSeek指导手册之所以值得写,是因为市面上大多数教程只教到“打开网页聊天”,而真正让它值回票价的API调用、本地部署、IDE接入和数据标注,反而没人系统讲。这篇笔记按“先分清入口、再跑通API、然后本地部署、最后接入工具链”的顺序拆开讲,每条命令和参数都能直接抄作业。适合刚注册API的开发者、准备在内网部署模型的算法工程师,以及想用DeepSeek替代重复劳动的内容团队。读完你会清楚这个方向值不值得投入,以及第一步到底该做什么。
2. 从注册到API调用:把DeepSeek装进你程序的最小路径
2.1 先分清三个入口:Web、API、开源权重
DeepSeek给了三种用法:网页版、API、开源权重,很多人一开始就在这三个选项里纠结。网页版适合零成本体验和临时写东西,但没法写进程序;API是官方提供的在线接口,采用OpenAI兼容格式,写代码时换一个base_url就能用;开源权重则要自己下载模型并部署,适合离线或私有环境。
判断用哪个入口其实很简单:业务代码里要调用、要和IDE或企业微信这类工具联动,就走API;数据不能出内网、或者要反复调整推理参数做实验,就本地部署;只是偶尔问几个问题,网页版完全够用。我见过最多的情况是,有人一上来就下载几十GB的权重,结果显卡撑不住又回来用API,白白浪费半天。
选择入口之后,建议先花十分钟把官方接口文档里关于认证、模型列表、定价页的部分看一遍。DeepSeek的使用教程在社区里很多,但接口参数以官方文档和定价页为准,版本更新后旧教程里的base_url和模型名经常对不上,这是第一个容易翻车的地方。
2.2 API调用最小示例:用Python跑通一次对话
DeepSeek的API走的是OpenAI兼容协议,所以用openai这个Python库就能调,不需要额外封装。
from openai import OpenAI client = OpenAI( api_key="sk-你的key", base_url="https://api.deepseek.com" ) resp = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "你是一个擅长写技术文档的助手"}, {"role": "user", "content": "用三句话解释什么是RAG"}, ], stream=False, temperature=0.7, max_tokens=1024, ) print(resp.choices[0].message.content)这里有几个参数要解释一下。base_url必须指向DeepSeek的接口地址,“https://api.deepseek.com”是官方开放接口的标准写法,不需要自己再拼/v1,拼了反而容易出问题。model字段目前最常用的是deepseek-chat和deepseek-reasoner两个,前者做通用对话和结构化输出,后者内置思维链,适合数学和逻辑推理。temperature控制随机性,取值范围0到2之间,写代码和解析JSON时建议调到0.2以下,写文案再放开到0.8左右。max_tokens控制单次回复长度,不设会用默认值,长文生成经常被截断,所以我一般会按任务类型给足。
调用成功之后,别急着进入下一步,先验证三件事:第一,换一个system提示词确认角色设定生效;第二,打印resp的usage字段,看输入输出的token数量,顺便算一下成本;第三,把stream改成True试一次流式输出,体验真实对话里边生成边返回的感觉。这三件事做完,DeepSeek API如何调用这个问题基本就解决了。
2.3 模型怎么选:deepseek-chat与deepseek-reasoner的边界
| 模型名 | 擅长场景 | 注意点 |
|---|---|---|
| deepseek-chat | 通用对话、代码补全、文档生成、结构化JSON输出 | 响应快、成本低,适合大部分业务 |
| deepseek-reasoner | 数学推理、逻辑分析、多步规划 | 会先输出推理过程,响应更慢,不适合高频交互 |
很多人在模型选择上有个误区,觉得reasoner更强所以所有请求都该用它。实际跑下来,deepseek-chat处理日常任务已经够用,性价比更合适;reasoner只有在需要严密推理链路时才优势明显,比如解数学题、做代码审查、推导复杂业务流程。如果发现返回结果里混着大段思维链文字导致程序解析失败,多数情况是模型选错而不是模型不行。
定价也是选型的重要变量。DeepSeek按token计费,输入和输出分开计价,官方定价页写得很清楚,整体比同档闭源模型便宜不少,这也是为什么很多人敢把流量型逻辑直接写在业务里。官方文档里还有一个容易被忽略的点:上下文窗口的长度会随版本更新调整,写代码时别把旧教程里的上限数字硬编码进去,最好动态从接口元信息里读,或者干脆多留30%余量。
3. 本地部署DeepSeek:vLLM与LM Studio两条路的选型与参数
3.1 先回答要不要本地部署:三个约束条件
本地部署DeepSeek是个让人又爱又恨的话题。爱的是数据不出内网、推理参数完全可控、不用按token付费;恨的是显存、带宽、运维成本全落在自己头上。我的判断标准就三条:数据隐私是不是硬要求,请求量是不是高到API费用不可接受,以及是否有需要反复调试推理参数的实验场景。三条里中了两条,才值得部署。
常见部署方式无非这么几种:官方API、vLLM自建服务、LM Studio这类桌面工具。API完全不碰运维,但数据要过公网,不适合敏感业务;vLLM是生产环境的主流选择,支持高并发和PagedAttention,但要求Linux加NVIDIA显卡,环境搭建有些门槛;LM Studio适合单机实验,图形界面里点几下就能跑起来,缺点是并发能力弱,不能当正式服务用。
| 部署方式 | 适合谁 | 最大优势 | 最大缺点 |
|---|---|---|---|
| 官方API | 大多数业务 | 零运维,按量付费 | 数据过公网 |
| vLLM本地服务 | 内网生产、高并发 | 并发强、吞吐高 | 环境配置复杂 |
| LM Studio | 单机实验、学习 | 上手快、可视化 | 并发弱,只适合个人 |
3.2 用vLLM部署DeepSeek:启动命令与四个关键参数
vLLM是目前本地部署DeepSeek社区里被验证最多的方案。先用huggingface-cli或modelscope把模型权重下载到本地目录,然后执行下面这条命令:
# 用 vLLM 拉起一个 OpenAI 兼容的本地服务 python -m vllm.entrypoints.openai.api_server \ --model /data/models/deepseek-chat \ --served-model-name deepseek-chat \ --host 0.0.0.0 \ --port 8000 \ --gpu-memory-utilization 0.8 \ --max-model-len 8192 \ --tensor-parallel-size 1--model指向你下载权重时保存的目录,--served-model-name是客户端调用时用的模型名,两个不一定一样,但建议保持一致免得把自己搞晕。--host和--port决定服务监听地址,内网用0.0.0.0可以让别的机器访问,单机调试就写127.0.0.1。--gpu-memory-utilization控制显存利用率,这是本地部署最大的坑,权重占用的显存只是基础,KV cache和激活值还会吃掉一大块,设成0.9很危险,我一般先从0.8开始,出现OOM就往下调0.7、0.6逐个试。--max-model-len是模型接受的最大上下文长度,别盲目设成模型上限,设得越高KV cache占的显存越大,按业务实际需求设,长文档场景再往上加。--tensor-parallel-size是多卡并行数,单卡就写1,多卡按显卡数量设。
启动日志里看到服务正常启动后,用另一个终端发一个请求验证:
curl http://127.0.0.1:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model": "deepseek-chat", "messages": [{"role": "user", "content": "你好"}]}'返回JSON里带choices字段就说明服务正常。这个过程看起来简单,实际运维里最常翻车的是显卡驱动和CUDA版本不兼容导致反复报错,建议部署前先跑一遍torch的CUDA可用性检查,确认环境没问题再拉模型。
3.3 LM Studio加载量化模型:适合单人实验的轻量方案
如果你只是想在笔记本上体验本地部署,或者公司不让碰Linux服务器,LM Studio是更现实的选择。做法是从社区或Hugging Face下载GGUF格式的量化权重,然后在LM Studio的模型列表里找到并加载。加载时有个关键选项是GPU offload层数,显存不够时可以让部分层留在CPU上,代价是推理速度变慢,这个参数得自己试,没有万能值。
LM Studio还内置了本地知识库能力,可以在对话界面挂载本地文档,让它先做向量化再回答。本质就是把文件切片、embedding、召回结果拼进上下文这一套RAG流程封装好了。做内部资料问答时很方便,但效果依赖文档切块方式和检索阈值,挂载上千页的PDF之前先拿几页测试,别一上来就把整个知识库塞进去。另外LM Studio的本地服务也兼容OpenAI协议,启动后可以在本机地址查到端点,测试脚本里把base_url换成本地地址就能脱离官方API运行。
这套轻量方案适合验证模型效果、跑通流程,不适合承载高并发的生产流量。如果想在团队里正式用,最终还得回到vLLM或同类服务上。我的建议是:先在LM Studio里确认模型能力符合预期,再花时间搭vLLM,别直接跳进生产部署。
4. 接入日常工具链:Codex、VS Code、企业微信与DeepSeek的组合
4.1 Codex接入DeepSeek:把开源模型塞进CLI编程助手
Codex是OpenAI推出的命令行编程助手,社区里很快就有人找到办法把DeepSeek接进去当后端用,这样既保留了Codex的交互体验,又用上了DeepSeek的接口。原理其实不复杂:让Codex把请求发到DeepSeek的OpenAI兼容地址。
# 在 shell 里设置环境变量,让 Codex 走 DeepSeek 的接口 export OPENAI_API_KEY="sk-你的key" export OPENAI_BASE_URL="https://api.deepseek.com" export OPENAI_API_BASE="https://api.deepseek.com" export CODEX_MODEL="deepseek-chat"不同版本Codex读取的环境变量名不完全一样,新版一般认OPENAI_BASE_URL,老版本认OPENAI_API_BASE,两个都设上最稳,再加一个CODEX_MODEL指定模型。配置完后运行:
codex exec --model deepseek-chat "检查当前目录的Python脚本并修复语法错误"如果返回结果正常,说明Codex已经通过DeepSeek工作了。这里要提醒一句,Codex本身的功能和版本迭代很频繁,不同版本对自定义模型的支持程度不同,如果发现命令行只认官方域名,别花时间在环境变量上折腾,先检查版本更新日志。把模型能力之外的调度逻辑交给外部工具、让模型只负责理解和生成,这套思路在deepseek技术社区里还有一个更正式的叫法:把模型装进一个harness里,由harness负责插件安装、提示词优化和代码回退。这里不展开说了,总之记住一句话:模型本事再大,不如给它配一个稳定的壳。
4.2 VS Code与PyCharm里接入DeepSeek:Continue插件的配置
IDE接入比命令行更直观,常见做法是装Continue这类支持自定义provider的开源插件,然后在配置文件里加一个DeepSeek入口。大部分插件都预设了OpenAI兼容协议,只需要改两个字段:接口地址和API Key。
{ "models": [ { "title": "DeepSeek Chat", "provider": "openai", "model": "deepseek-chat", "apiBase": "https://api.deepseek.com", "apiKey": "sk-你的key" } ] }配置完成并重启插件后,选中代码再让模型解释或者补全,响应应该能正常返回。如果始终转圈不出结果,检查两件事:第一,apiBase有没有拼错,DeepSeek的接口地址不需要带/v1;第二,插件里是否启用了某个固定的模型供应商模板,有些插件强行指定了OpenAI官方域名,必须新建一个自定义provider才能绕过去。PyCharm里的用法类似,即使不用插件,也可以直接在项目里写脚本调用API,把上面第2章那段Python代码封装成一个工具函数,然后绑定快捷键,实现选中代码就发送给DeepSeek。
4.3 企业微信接入DeepSeek:给团队做一个问答机器人
企业微信接入DeepSeek是团队场景里被问得最多的需求。整体链路是:企业微信群里有人发消息,回调服务器收到内容后调用DeepSeek API生成回复,再把结果通过群机器人webhook发回群里。这里给一个最小实现:
from flask import Flask, request import requests from openai import OpenAI app = Flask(__name__) client = OpenAI(api_key="sk-你的key", base_url="https://api.deepseek.com") WEBHOOK_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key" @app.route("/wechat", methods=["POST"]) def wechat(): data = request.get_json() # 企业微信回调里文本消息在 text.content 字段 msg = data.get("text", {}).get("content", "") resp = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": msg}], max_tokens=512, ) answer = resp.choices[0].message.content # 用群机器人 webhook 把回答发回群里 requests.post(WEBHOOK_URL, json={ "msgtype": "text", "text": {"content": answer} }) return "ok" if __name__ == "__main__": app.run(port=5000)代码里最关键的是消息字段的对应关系,企业微信回调的文本内容在text.content里,群机器人webhook的发送格式是msgtype加text.content,这两个字段写串了要么收不到消息要么发不出去。实际部署时,企业微信管理后台需要配置接收消息服务器的URL和Token,还要做签名校验,生产环境建议把校验逻辑加上,别裸奔在公网上。机器人上线后先小范围试用,限定触发关键词,避免群里闲聊把token消耗打上去。
5. DeepSeek避坑指南:五个让部署和调用翻车的常见问题
本地部署和API调用看着简单,实践里翻车点几乎都集中在环境和参数上。下面几条是从社区反馈和实际排查里整理出来的高频问题,每条按现象、原因、解决的顺序写,可以直接当排查手册用。
5.1 API连不上,返回401:不是代码问题,是key和地址没对齐
现象是请求发过去直接返回401 unauthorized,或者提示invalid api key,日志里只有一行HTTP状态码,看不到更具体的错误说明。原因通常很朴素:一是API key在复制时带了前导或末尾的空格,粘贴到配置文件后肉眼看不出来;二是代码里同时设置了环境变量和client参数,环境变量把代码里的配置覆盖了;三是base_url被拼成了带/v1的格式。解决办法是先用curl单独测一遍接口,确认地址和key都没问题,再回来看代码。环境变量和代码里不要同时设置api_key,否则排查时会多花不少时间。
5.2 本地部署进程被OOM杀掉:显存不是按权重大小算的
现象是vLLM启动时没报错,日志显示模型加载完成,但第一个请求进来后进程直接消失,或者启动阶段直接报CUDA out of memory。原因在于只按权重文件大小预估了显存,忘了KV cache和激活值同样占显存,上下文越长占得越多。解决办法是把gpu-memory-utilization从0.8逐步降到0.7、0.6,同时把max-model-len调小,重跑启动命令。如果降到0.5还不够,说明显卡容量确实撑不住这个尺寸的模型,考虑换量化版本或回到API。启动前用nvidia-smi看一眼显存有没有被其他进程占用,多卡机器上这个原因很常见。
5.3 上下文一长就慢到难以忍受:顺手把max-model-len调下来
现象是同样的对话,前两千字秒回,超过四千字明显变慢,再往后几乎卡死。原因有两层,一是显存里的KV cache到达瓶颈开始频繁换出,二是模型在长序列上做注意力计算本身更慢。解决办法是在vLLM或LM Studio里,把max-model-len从模型上限调低到业务真实需要的数值,减少预分配的显存浪费。API场景则要控制好messages数组里累积的历史消息,该截断就截断,别把全部历史都塞进去。有个经验值是:8K上下文任务就把max-model-len设成8192或略高,而不是按模型上限去配。
5.4 reasoner模型的输出没法解析:思维链把JSON挤坏了
现象是用deepseek-reasoner做结构化输出时,返回内容里混着大段思考过程,json.loads直接抛错。原因是reasoner模型会先输出推理过程,再输出正式回答,直接拿全部文本去解析自然失败。解决办法是区分响应里的推理字段和内容字段,取正式回答之后再解析;需要严格JSON时改用deepseek-chat,并在system提示词里给出JSON schema和“不要输出多余文字”的约束。把JSON格式校验写成断言放进代码里,挡掉这类隐蔽错误。还要注意reasoner的响应时间更长,不适合放在高并发低延迟的链路里。
5.5 IDE插件配置完一直转圈:provider根本没指到DeepSeek
现象是VS Code或PyCharm里填了apiKey,发请求一直是转圈状态,半天没反应。原因基本是插件默认走了OpenAI官方地址,配置文件里新增的模型没有单独指定apiBase,等于请求没发到DeepSeek。解决办法是新建一个自定义provider,显式把apiBase写成DeepSeek地址,确认后再重启插件加载配置。另一个常见坑是配置改完没重启,插件还在用内存里的旧配置,看起来像是没生效。遇到这类问题,先看插件日志里的网络请求,确认请求实际发到哪个域名,这个方法比反复改配置有效得多。
5.6 长文生成总被截断:max_tokens不是越大越好但也不能忘
现象是生成到一半突然停住,没有结束符号,看起来像是模型说到一半不想说了。原因是单次输出的max_tokens上限用完了,默认值不够长文场景。解决方法是按任务类型设置max_tokens,长文生成给足额度;如果单次上限还不够,就改用流式输出累积结果,或者让模型分段生成。同时把temperature调低一点,避免模型在边界处发散。这个参数是最容易被忽略的,因为它不报错,只是悄悄截断输出,等发现时文本已经少了一半。
6. DeepSeek进阶:数据标注与长文去AI味的两个实用技巧
模型跑通以后,真正值钱的是让它稳定产出可复用的结果。第一个实用技巧是数据标注。给DeepSeek一份标注规范加JSON schema,它就能按固定格式返回结果,直接落盘成训练数据或业务数据:
resp = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "你是标注员,严格按JSON输出:{\"sentiment\": \"positive|negative|neutral\", \"reason\": \"一句话解释\"},不要输出JSON以外的文字"}, {"role": "user", "content": "这个商品到货很快,但包装破了。"}, ], temperature=0.1, max_tokens=256, )temperature设0.1是为了减少随机性,标注任务追求一致性而不是多样性。批量标注时把结果加上request_id和task_id字段落盘,把模型输出直接当黑匣子处理,异常样本单独挑出来人工复核,这是数据标注流水线正常的做法。
第二个技巧是长文去AI味。很多人以为一句“写得自然一点”就能解决,实际效果很玄学。我一般拆成三步:第一步让模型先输出大纲,确认结构后再扩写,避免一上来就生成整篇;第二步在system里明确要求“加入具体数字、操作细节和例外情况”,AI味往往源于空泛;第三步单独跑一轮改写,去掉“总而言之”“值得注意的是”这类连接词,打破每段都先观点后解释的完美结构。处理DeepSeek生成的长文时,把这三步串成一个脚本,比反复投喂“去AI化”指令稳定得多。
我现在养成的习惯是,任何新场景都先用一份二十条左右的样本测出模型边界,再定提示词模板和参数,确认稳定后才放进业务。把DeepSeek当成一个需要调教的工具,而不是一开箱就完美的产品,你会少踩很多坑。希望帮到你。
本文还有配套的精品资源,点击获取