简介:这是一份面向DeepSeek初学者、AI工具爱好者及个人开发者的PDF实战指南,围绕免费AI平台DeepSeek的个人应用全攻略展开,帮助读者降低自然语言处理与AI平台使用门槛。内容涵盖网页端对话、API密钥获取与代码集成、移动端App访问,以及基础提问、CSV/Excel数据清洗分析、代码生成调试、报告大纲和文案创作等典型场景。文档还梳理了深度思考、联网搜索及两者都不选三种模式的适用边界,并提示交叉验证与信息来源可靠性;高效问答的“背景+需求+约束条件”模板、角色设定、复杂任务分步拆解、“说人话”等技巧均有说明。包内共1个PDF文件,大小2.41MB,已有635人学习浏览,适合通读或按主题检索,用于快速建立DeepSeek个人使用框架。
1. 网页版够用,为什么还要折腾 DeepSeek 的接口和本地接入
不少人第一次用 DeepSeek 是在网页版对话框里,问几轮就觉得够用,直到想把摘要、翻译、批量改代码塞进自己的脚本和编辑器,才发现网页版给不了这个入口。这篇攻略按一个人的真实动线走:先去开放平台拿 Key 跑通接口,再把 DeepSeek 接进 VS Code 和终端,接着处理对话变长后必然遇到的长度上限与继承问题,最后才谈本地部署和企业微信接入这两条偏重的路线。适合会写一点 Python 或 shell、想把 DeepSeek 从聊天窗口搬进工作流的个人开发者,也适合先摸清边界再决定投入多少的团队同学。中间会给可直接复制的 curl、Python、bash,参数为什么这么设也一并交代。
2. DeepSeek API 从拿 Key 到跑通第一次调用
2.1 先搞清楚 Key、额度与计费口径
在开放平台注册后,第一件正事是建一个 API Key。这类 Key 一般只在创建时完整显示一次,关掉页面就只剩掩码,所以拿到后立刻存进密码管理器,别贴进聊天记录,也别硬编码进仓库里的脚本。紧接着要确认三件事,它们决定了后面所有报错的性质。
| 要先确认的东西 | 在哪看 | 不确认会怎样 |
|---|---|---|
| API Key | 控制台密钥管理页 | 泄露只能作废重建,历史脚本全要改 |
| 模型名 | 文档里的模型列表 | 名字写错直接返回 400,报错信息还很含糊 |
| 余额与用量 | 控制台用量页 | 余额耗尽时接口返回 402,看起来像 Key 失效 |
| 单价口径 | 计费说明页 | 长文档任务里输入侧 token 占大头,估错预算 |
关于 deepseek价格,网上流传的截图和表格多半年份久远,单价会调整,靠谱做法是每次动手前看一眼控制台里的计费说明,把自己场景的输入输出比例代进去算一遍。一个常见误区是只盯输出单价:做长文摘要、代码库问答时,你每轮都要把整段历史或整份材料重新发过去,输入 token 往往是输出的十几倍。
2.2 用 curl 跑通最小请求
拿到 Key 之后不要急着写业务代码,先用一条 curl 确认链路是通的。下面把 Key 放进环境变量,而不是写死在命令里,这样复制给别人或存进历史记录时不会连密钥一起带出去。
export DEEPSEEK_API_KEY="sk-换成你自己的" # 只在当前 shell 生效,别写进代码仓库 curl https://api.deepseek.com/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $DEEPSEEK_API_KEY" \ -d '{ "model": "deepseek-chat", "messages": [ {"role": "system", "content": "你是中文技术助手,回答控制在 200 字内"}, {"role": "user", "content": "用三句话解释什么是 token"} ], "temperature": 0.3, "stream": false }'这段请求里有四个关键点。Authorization头必须是Bearer加 Key,中间的空格少一个就 401;messages是数组,system放角色约束,user放本次问题,角色顺序影响模型对指令的服从度;temperature设 0.3 是因为解释概念这类任务要的是准确而不是发散;stream先设 false,方便你把完整 JSON 打印出来看结构,等调试完再打开流式输出。返回体里真正要取的是choices[0].message.content,另外usage字段会告诉你这次实际消耗了多少输入和输出 token,是核对计费口径最直接的依据。
Python 侧更省事的写法是走 OpenAI 兼容的 SDK,只改base_url:
import os from openai import OpenAI client = OpenAI( api_key=os.environ["DEEPSEEK_API_KEY"], base_url="https://api.deepseek.com", # 部分 SDK 需要写成 .../v1,报 404 时换另一种 ) resp = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": "把这段话改成更短的版本:……"}], temperature=0.3, max_tokens=800, ) print(resp.choices[0].message.content) print(resp.usage) # 用来核对输入输出 token 数量base_url带不带/v1是最常见的 404 来源,两种写法在社区里都有人用,取决于 SDK 会不会自动补路径。判断方法很直接:如果报错是 404 而不是 401,基本就是路径问题,换一种写法重试即可。
2.3 model、temperature、max_tokens 三个必调参数
| 参数 | 常见取值 | 影响什么 | 什么时候改 |
|---|---|---|---|
| model | 对话模型 / 推理模型 | 速度与推理深度 | 要一步步推导时用推理模型,日常改写用对话模型 |
| temperature | 0.2 到 0.7 | 输出的发散程度 | 抽取、分类、改写调到 0.2~0.3;写文案再往上抬 |
| max_tokens | 512 到 4096 | 单次输出上限 | 按你期望的最长回答留 1.5 倍余量,别一路拉满 |
| stream | true / false | 是否边生成边返回 | 交互式终端和编辑器里开 true,批处理保持 false |
推理类模型的输出里通常包含一段思考内容和一段最终答案,取字段时要确认拿的是哪个部分,否则你会把推理过程原样写进日志。批处理场景里建议固定temperature和max_tokens,让同一批数据的结果可比;临时调参只放在交互式会话里。
2.4 401、402、429 和超时的排查顺序
报错分两类:一类是配置问题,改一次就好;一类是节奏问题,要改调用方式。401 基本是 Key 错、过期,或者请求头格式不对;402 是余额不足,去控制台充值或换 Key;429 是触发频率或并发限制,处理方式是加指数退避重试,而不是立刻重发;连接超时一般出现在长请求或本地网络出口受限时,先确认能否用 curl 复现,能复现就说明是链路问题而不是代码问题。429 的重试至少要区分「可重试」和「不该重试」:参数错误重试一百次也是同样的 400。
3. 把 DeepSeek 接进 VS Code 和终端工作流
3.1 VS Code 接入 DeepSeek 的两种常见路径
第一条路径是用支持 OpenAI 兼容接口的编辑器插件,把apiBase、model、apiKey三项填对就能用;不同插件的字段名不一样,但需要你提供的信息永远是这三项,其余都是插件自己的行为开关。
{ "models": [ { "title": "DeepSeek Chat", "provider": "openai", "model": "deepseek-chat", "apiBase": "https://api.deepseek.com/v1", "apiKey": "env:DEEPSEEK_API_KEY" } ] }注意apiKey写的是env:前缀而不是明文,这样配置可以随仓库一起提交,密钥留在系统环境变量里。apiBase建议先带/v1试,因为这个字段很多插件不补路径;报 404 就去掉,报 401 则说明路径对了但 Key 不对。部分插件会记录请求日志,报request extension preparation failed这类错误时,通常不是接口挂了,而是插件侧配置校验没过——先看它读到的模型名和 apiBase 是不是你以为的那两个值。
第二条路径是不装插件,只在 VS Code 里配一个任务,调用第 3.2 节的脚本,把当前打开的文件或选中内容作为参数传进去。这条路的好处是行为完全由你的脚本决定,可控、可版本化,代价是没有内联补全那种丝滑感。习惯用命令行做代码修改的人,通常更愿意走第二条。
3.2 终端里封装一个 ds 脚本
把接口封成一条命令,日常问答就不用再开浏览器。下面这个脚本依赖jq做 JSON 拼装和结果提取,避免了手写转义带来的各种引号事故。
#!/usr/bin/env bash # ~/bin/ds —— 用法: ds "你的问题" set -euo pipefail : "${DEEPSEEK_API_KEY:?请先 export DEEPSEEK_API_KEY}" PROMPT="${1:?用法: ds \"问题\"}" BODY=$(jq -n --arg p "$PROMPT" '{ model: "deepseek-chat", messages: [{role: "user", content: $p}], temperature: 0.3, max_tokens: 800 }') curl -s https://api.deepseek.com/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $DEEPSEEK_API_KEY" \ -d "$BODY" | jq -r '.choices[0].message.content'set -euo pipefail让脚本在任一环节失败时立即停下,避免把空结果当成功写进下游文件;${VAR:?...}是参数自检,Key 没导出时会直接给出可读提示,而不是发一个 401 让你猜;jq -n --arg用变量拼 JSON,比手工字符串拼接安全得多,问题里出现引号、换行都不会破结构。存成~/bin/ds后chmod +x,再把~/bin加进 PATH 就能全局调用。想再进一步,把stream: true打开,然后用jq -r '.choices[0].delta.content // empty'逐行读,终端里就有打字机效果。
3.3 接入排错对照表
| 现象 | 大概率原因 | 怎么确认 |
|---|---|---|
| 编辑器插件无响应 | apiBase 路径不对 | 用同一个地址跑一次 curl |
| 提示无权限 | Key 未传给插件进程 | 在插件设置里看是否读到了环境变量 |
| 回答突然截断 | max_tokens 太小 | 打印 usage 看输出 token 是否贴近上限 |
| 请求偶发失败 | 触发限流 | 检查是否并发发请求,加退避重试 |
| 长文件处理变慢 | 每轮重发全部上下文 | 统计 messages 总长度,超过阈值就做摘要压缩 |
4. 对话长度上限、对话继承与导出归档
4.1 「达到对话长度上限,请开启新对话」卡在哪
这句话的含义是:这一轮请求的输入长度加预留输出长度,超过了模型单次能处理的窗口。真正容易忽略的是上下文是累积的——你每发一条消息,客户端都会把整段历史重新塞进请求里,第三十轮的输入可能已经是第一轮的几十倍。所以一个聊了很久的会话变慢、变贵、最后报长度上限,是同一件事的三个阶段,不是三个独立故障。
判断方法很简单:把usage里的输入 token 数打印出来,画一条随轮次增长的曲线。如果某一轮因为贴了一份长文档而陡增,那一轮就是后续所有问题的起点。处理方式有三种:开新会话并把必要的背景重新交代;把旧会话压缩成摘要再开新会话;把长材料改成按片段检索,只把命中的片段放进上下文,而不是整份塞进去。
4.2 用交接文档继承上一个对话
开新会话最怕的是把已经谈好的结论丢了。我一般会固定用三段式模板做交接,复制过去就能续上,比让模型「总结一下」更可控,因为总结会随机丢约束。
## 任务背景 目标是什么,交付物长什么样,给谁用。 ## 已完成 - 已确定的方案与理由(含被否掉的选项) - 已产出的文件、代码片段、字段定义 ## 待办与约束 - 还没做的事,按优先级排 - 硬约束:语言、格式、长度、必须遵守的命名关键是「已完成」里要写上被否掉的选项和理由,否则新会话里的模型很可能又建议一遍同样的方案,你还要重新解释一遍为什么不行。「待办与约束」里的硬约束要具体到可检验,比如「输出必须是 JSON,字段名为 title 和 summary」,而不是「输出要规范」。把这段模板存成文件,每次新会话开头粘贴,再追加一句「以上是背景,请确认理解后再开始」。
4.3 对话导出与本地归档
接口调用天然就是可归档的,问题在于你有没有顺手存。批处理脚本里加几行就能把每次问答落成 JSONL,一行一条,方便之后用 grep 和 jq 检索。
import json, pathlib, time LOG = pathlib.Path.home() / "ds-logs" / "chat.jsonl" LOG.parent.mkdir(parents=True, exist_ok=True) def log_turn(prompt: str, answer: str, meta: dict) -> None: record = {"ts": time.time(), "prompt": prompt, "answer": answer, **meta} with LOG.open("a", encoding="utf-8") as f: f.write(json.dumps(record, ensure_ascii=False) + "\n") # 中文不转义,方便直接读选 JSONL 而不是一个大 JSON 数组,是因为追加写不需要读回整个文件,日志写坏一行也不影响其余记录。ensure_ascii=False让中文以原字符落盘,grep能直接搜到;如果做的是敏感内容处理,落盘前记得先想清楚要不要存,存了就按数据资产管理。
5. 本地部署 DeepSeek 与企业微信接入的验证清单
5.1 本地部署先算显存,再谈量化
本地部署常见的失败不是装不上,而是装完发现跑不动。顺序应该是:先确定要跑多大的模型,再算显存,再选量化等级。下面这张表给的是量级参考,实际占用还跟上下文长度、并发数强相关,上下文越长,KV 缓存吃掉的显存越多,别按最短上下文的数字去估。
| 模型规模 | 量化等级 | 显存量级 | 适合场景 |
|---|---|---|---|
| 7B 级 | 4bit | 6GB 上下 | 单机试跑、摘要改写 |
| 7B 级 | 8bit | 10GB 上下 | 对输出质量敏感的小任务 |
| 14B 级 | 4bit | 12GB 上下 | 需要一点推理能力的日常问答 |
| 32B 级以上 | 4bit | 24GB 起步 | 认真替代在线接口,得配真显卡 |
如果显存卡在临界值,先把上下文长度调小,再考虑降量化等级;反过来的顺序会让你以为模型有问题,其实只是显存不够触发了换页。
5.2 起服务后用兼容接口自测
以常见的本地推理工具为例,拉模型、起服务、验证三步走,验证这一步别省。
# 拉取并启动一个 DeepSeek 的蒸馏版本,具体 tag 以本地工具的模型库为准 ollama pull deepseek-r1:7b ollama run deepseek-r1:7b "用一句话说明什么是向量" # 用 OpenAI 兼容路径自测,确认服务对上层应用可用 curl -s http://localhost:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-r1:7b","messages":[{"role":"user","content":"hi"}],"max_tokens":16}' \ | jq -r '.choices[0].message.content'把max_tokens压到 16 是刻意的:冒烟测试只想确认链路通不通,不想等它生成一大段。如果本地服务暴露的是 OpenAI 兼容路径,那么第 2 章、第 3 章里所有脚本只需要把base_url换成http://localhost:11434/v1,其余代码一行不用改,这也是优先选兼容路径部署的理由。
5.3 接口自测通过之后再接企业微信
企业微信这类平台接入,排错成本远高于本地测试,所以顺序必须是:先用 curl 打通本地或在线接口,再把同一个地址填进平台的应用配置,最后才去调消息格式和回调。反过来的话,一个问题会同时有「模型没起来」「地址填错」「消息体格式不对」三种可能,排查时间成倍增长。落地时记住一条:任何链路改动之后,先跑那条max_tokens为 16 的冒烟请求,链路确认无误再放长任务进去。
本文还有配套的精品资源,点击获取