DeepSeek实战指南:API调用、论文写作与本地部署
简介这是一份DeepSeek从入门到精通的中文操作指南适合想在学术、内容创作与日常办公中借助AI提升效率的初学者及进阶用户。手册按六大部分渐进展开先讲解账户创建与界面熟悉再通过五个黄金法则和魔法指令打好对话基础随后进入文档分析、代码编写等复杂任务并用大量实例覆盖学术论文辅助、自媒体运营、个性化学习计划等真实场景最后介绍专业知识库搭建与个人生产力自动化流程帮助读者构建可持续使用的工作流。资源为1个PDF文件压缩包大小约1.51MB已有221人学习浏览。除了功能演示手册还穿插避坑指南和小技巧例如区分低效提问与高质量提问、学术内容防模糊表述、文档拆分处理、代码报错排查思路等能让新手少走弯路也让老用户进一步挖掘DeepSeek的高级潜力。1. DeepSeek 入口与第一轮有效对话打开 DeepSeek 网页对话框很多人第一反应是问“帮我写一篇论文”结果得到一堆正确的废话。这个标题表面是工具手册实际要解决的是怎么把 DeepSeek 从聊天玩具变成能交付文档初稿、选题清单、脚本分镜、甚至能批量调用 API 的生产力流水线。下面围绕三个入口展开网页端、开放平台 API、本地部署。适合正在做论文、运营账号或准备把 DeepSeek 接进自己项目的工程师和新媒体从业者。我会给出能直接抄的参数、提示词和代码也会说明哪些位置容易踩坑。记住第一轮问对问题后面每一轮都在节省时间。2. 上下文窗口、对话继承与 API 参数先弄清 DeepSeek 的记忆边界2.1 网页端会话机制DeepSeek 怎么继承上一个对话网页端同一会话内会自动继承全部历史消息这也是“DeepSeek 怎么继承上一个对话”最常见的答案什么都不用做在同一个会话里继续问即可。但当对话变长平台会提示“DeepSeek 达到对话长度上限请开启新对话”这时不要硬顶。我一般会开一个新会话然后在开头粘贴上一轮的关键结论既保留记忆又避免模型在长上下文中注意力涣散。为什么会出现这种上限因为模型对输入长度有硬约束超过窗口后请求会失败。如果你用的是 API还可能看到类似request extension preparation failed的报错通常就是请求体过长或 messages 格式不合法。遇到这类错误先检查是否把完整历史都塞进了 messages再压缩冗余内容。2.2 用 API 显式管理历史消息DeepSeek API 如何调用要用代码控制记忆常见做法是使用兼容 OpenAI 的 SDK。DeepSeek API 如何调用把 base_url 指到官方开放平台再传入 messages 数组即可from openai import OpenAI client OpenAI( api_keysk-你的密钥, # 从开放平台生成不要硬编码在仓库里 base_urlhttps://api.deepseek.com ) messages [ {role: system, content: 你是学术写作助手给出的句子必须可以直接放进论文草稿。}, {role: user, content: 帮我列出三个因果推断综述的检索关键词。}, {role: assistant, content: 1. confounding control\n2. counterfactual framework\n3. difference-in-differences}, {role: user, content: 把第一个关键词扩展成 PubMed 检索式} ] resp client.chat.completions.create( modeldeepseek-chat, messagesmessages, temperature1.0, max_tokens2048, top_p0.9 ) print(resp.choices[0].message.content)这段代码的逻辑很直接messages 数组就是模型看到的全部历史。要实现“继承上一个对话”就把历史消息按顺序塞回去只想继承结论时只把 summary 放进 user 消息即可。模型不保留服务端状态每次请求都必须携带上下文。下面几个参数值得反复调它们直接决定输出风格参数作用建议值踩坑点temperature控制随机性越高越发散写作 1.0代码/数学 0.2学术摘要任务调高会编造不存在的结论max_tokens单次最大输出长度2048设太小长文会被截断且不报错top_p核采样概率0.9与 temperature 同时调会互相抵消stream流式返回true长文本建议开启避免请求超时temperature 不是越高越好。做论文辅助时设置为 1.0 只是保留多样性如果是生成检索式、代码或表格我会调到 0.2 以下减少幻觉。2.3 导出对话记录DeepSeek 导出的三种常见做法“DeepSeek 导出”并不是一个独立按钮而是看你想要什么格式。最简单的是直接复制正文要保留结构我一般用浏览器打印为 PDF如果对话很长可以装一个把网页 DOM 转成 Markdown 的浏览器扩展一次导出整个会话。如果需要程序化处理就在调 API 时每条消息追加“本轮摘要”字段最后统一导出为 JSON 或 Markdown。这样下次开启新对话时粘贴摘要即可无缝续上。2.4 报错排查request extension preparation failed 先查这三项如果你在调用 API 时看到request extension preparation failed我一般按顺序查三个地方。第一messages 是否超过模型上下文长度超长时把历史摘要化而不是随意截断。第二消息数组里每个元素是否都有合法 role常见错误是给 assistant 消息塞了 tool_calls 但后面没有对应的 tool 消息。第三参数类型是否写错比如 temperature 传了字符串或者 max_tokens 为 0。把这三项过一遍大部分请求错误都能定位。3. 学术论文辅助把 DeepSeek 当研究助理而不是代写工具3.1 论文六类高频任务与提示词结构学术场景里DeepSeek 最稳的用法不是“帮我写完整论文”而是拆成六个可验证的小任务选题联想、文献检索式生成、摘要解读、方法复述、审稿意见回复、论文润色。每个任务用同一个提示词结构给角色、给材料、给输出格式、给约束。任务推荐提示词结构参数建议选题联想“你是领域研究者。基于方向X列出10个可做的问题并标出每个问题的数据来源。”temperature 1.2检索式生成“把以下关键词转成PubMed检索式要求使用MeSH字段。”temperature 0.0摘要解读“逐句解释这段摘要的贡献与局限每句不超过30字。”temperature 0.5审稿回复“针对审稿意见1给出一段可直接回复的文本语气礼貌。”temperature 0.8下面是一个可复制的审稿回复模板。注意占位符要自己填越具体回复越能直接用你是某期刊的通讯作者。审稿人提出了这条意见 {审稿意见} 我的原始实验设置是 {实验设置} 请按下面结构写回复 1. 先复述审稿人观点确认你理解了他的担忧 2. 说明本次修改做了什么 3. 如果没有改实验解释原因并提供补充材料。 不要使用“We are sorry”作为开头。这里的要点是“先复述再回应”模型会把审稿意见拆成可执行修改点。如果你只丢一句“帮我回复审稿人”模型会猜你的实验背景写出来的都是正确的空话。3.2 文献检索与综述让 DeepSeek 生成检索式并人工校验做综述时我通常让 DeepSeek 先生成检索式再拿回 PubMed 或 Web of Science 里跑一遍。例如输入研究方向“机器学习预测术后并发症”让模型输出 PICOS 结构的检索式。这样做的价值不是替代数据库而是快速补全同义词、逻辑算符和字段标签。一个容易踩的坑是模型可能生成看起来合法但实际上是自造的期刊名或作者名。所以凡是检索结果里的具体项目必须回到原文验证。让 DeepSeek 给的是策略不是结论。这类任务的 prompt 可以写成角色医学信息学专家。 任务把下面这个临床问题转成 PubMed 检索式。 问题{临床问题} 要求 - 拆出 Population、Intervention、Comparator、Outcome - 用 MeSH 词和自由词分别列出 - 给一个可以直接粘贴的完整检索式。3.3 关于“降AI率”正确做法是重写不是洗稿网上流行的“降AI率工具免费版”大多只是做同义词替换处理后的文本在论文里仍然过不了同行评审原因很简单它不改变论证结构。我处理 AI 草稿的顺序是先让 DeepSeek 生成骨架和表达再把每个段落的实验方法、数据细节和引用文献替换成自己掌握的真实材料最后按期刊政策声明 AI 使用情况。如果一定要在本地做类似检查可以自己统计句首连接词分布把连续三个“此外”拆开这比外部“降AI率工具”可控得多。核心思路是保留模型的结构替换掉它的语言指纹主动语态、具体数字、个人写作习惯。3.4 读统计输出让 DeepSeek 解释回归表而不是替你做分析论文里经常出现回归表、置信区间和显著性星号。我一般把统计软件输出的摘要粘贴给 DeepSeek让它用一两句话解释主效应和交互项再让它列出“读者可能会问的三个问题”。这个任务的关键是给模型上下文不仅给它输出表格还要告诉它变量含义和样本量。否则模型容易根据列名猜测生成不准确的解释。提醒一点涉及具体 p 值和统计量的数字必须和原始输出核对不能直接抄进论文。4. 自媒体运营与接入把 DeepSeek 接进 VSCode、CC Switch 和本地部署4.1 自媒体内容流水线用 DeepSeek 批量生成选题与脚本自媒体运营最耗时间的不是写而是把“选题-脚本-分镜-标题”这一串动作连续做出来。我会在一条提示词里要求 DeepSeek 一次输出四层结构然后逐层审核。批量场景下把选题列表放进 CSV用 Python 循环调用 API。import pandas as pd from openai import OpenAI client OpenAI(api_keysk-..., base_urlhttps://api.deepseek.com) template 你是一个短视频编导。 选题{topic} 观众{audience} 请输出 1. 3个抓人的开场 2. 60秒脚本口语化 3. 分镜表镜头/画面/台词 4. 5个备选标题 df pd.read_csv(topics.csv) for _, row in df.iterrows(): resp client.chat.completions.create( modeldeepseek-chat, messages[{role: user, content: template.format(topicrow[topic], audiencerow[audience])}], temperature1.2, # 自媒体内容保留随机性避免每一期都一个腔调 max_tokens2048 ) print(topic:, row[topic]) print(resp.choices[0].message.content)这个脚本的可复制点在于把 prompt 模板参数化换一批选题就能生成一批脚本。运行前先确认 CSV 的列名否则会得到 KeyError。自媒体内容需要保留口播感所以 temperature 开到 1.2 是有意保留随机性不是参数设错了。4.2 把 DeepSeek 接进 VSCode、CC Switch 与 Spring AIVSCode 接入 DeepSeek 通常通过 Continue 或 Cline 这类 AI 编程插件。配置思路是把插件里的模型提供商设为“OpenAI Compatible”然后填三个字段API Key、Base URL、Model。Base URL 一般不需要加/v1我填的是https://api.deepseek.com如果插件要求路径再补上/v1。{ continue.apiBaseUrl: https://api.deepseek.com, // DeepSeek 的 OpenAI 兼容端点 continue.apiKey: sk-你的密钥, continue.model: deepseek-chat, continue.apiProvider: openai }注意这段 JSON 是 Continue 插件常见的配置骨架不同版本字段名会有变化配置完成后先用一句“写出一个读取 CSV 的 Python 函数”做最小验证。工具配置位置关键字段常见失败点VSCode Continue插件设置apiBaseUrl / apiKey / model未选 custom providerCC Switch自定义服务商Base URL、API Key、模型名类型选成 OpenAI 后仍失败Spring AIapplication.ymlspring.ai.openai.base-url、api-key版本不匹配导致 ChatModel 装配失败CC Switch 配置 DeepSeek 的做法类似新增自定义服务商Base URL 填官方开放平台地址模型名填deepseek-chatAPI Key 从开放平台生成。它的价值是切换不同模型时不用反复改客户端配置。Spring AI 项目想接 DeepSeek可以用 OpenAI 兼容协议。在 application.yml 常见配法是spring: ai: openai: base-url: https://api.deepseek.com api-key: ${DEEPSEEK_API_KEY} chat: options: model: deepseek-chat temperature: 0.7如果启动后报 ChatModel 装配失败先检查 spring-ai-openai 依赖版本和 base-url 是否带/v1。因为 DeepSeek 兼容层在不同版本里路径处理不一样我一般在平台文档里搜 base_url 确认。4.3 本地部署 DeepSeek用 Ollama 跑出可离线调用的模型本地部署 DeepSeek 的好处是数据不出内网适合代码补全和敏感文本处理。常见做法是用 Ollama# 拉取 7B 蒸馏版显存不够时这是最稳的选择 ollama pull deepseek-r1:7b # 启动交互式对话 ollama run deepseek-r1:7b拉取完成后Ollama 会在本地开启一个兼容 OpenAI 的服务地址http://localhost:11434/v1把上面所有代码的 base_url 换成它就能用。本地部署需要注意三点一是蒸馏版效果和线上版差距明显二是 CPU 推理速度慢三是显存不够时用 7B 而不是 14B。取舍上我一般这样判断需要最新能力和长上下文写作用官方 API处理内部数据、做离线实验、想免费无限调用用本地 Ollama。两者可以同时存在代码里根据环境变量切换 base_url 即可。5. 用 DeepSeek 函数调用搭一个能写会查的 AI Agent5.1 function calling 最小实现DeepSeek 模型的 chat 接口支持 tools 参数这让“AI Agent”不只是一个噱头模型可以决定调用你定义的函数拿到结果后继续生成。常见做法是三步先声明工具再把结果写回 messages最后让模型组织最终回复。import json from openai import OpenAI client OpenAI(api_keysk-..., base_urlhttps://api.deepseek.com) # 用 JSON Schema 声明工具模型会按这个结构返回参数 tools [ { type: function, function: { name: get_server_load, description: 读取服务器当前负载返回 0 到 1 的浮点数, parameters: { type: object, properties: { host: {type: string, description: 主机名} }, required: [host] } } } ] def get_server_load(host: str) - float: # 这里替换成你的真实监控接口 return 0.42 messages [{role: user, content: 现在 dev-01 的负载是多少}] resp client.chat.completions.create( modeldeepseek-chat, messagesmessages, toolstools ) msg resp.choices[0].message calls msg.tool_calls or [] for call in calls: args json.loads(call.function.arguments) result get_server_load(**args) messages.append(msg) messages.append({ role: tool, tool_call_id: call.id, content: str(result) }) final client.chat.completions.create( modeldeepseek-chat, messagesmessages, toolstools ) print(final.choices[0].message.content)这个例子里tools是给模型的“手”tool_calls是模型说要调用哪个函数函数执行结果以role: tool返回模型再基于真实数字生成回答。如果不把工具名和参数写进 JSON Schema模型大概率会猜参数名导致运行时才报错。5.2 验证技巧用断言卡住工具调用跑通之后我会做一件事把工具调用断言写进测试。比如用 pytest 检查model_response.choices[0].message.tool_calls[0].function.name get_server_load并在 CI 里跑一个包含 20 条运维问题的回归集。这样既防止 prompt 被后来者改坏也让“AI Agent”变成可维护的代码。把这几条断言放进仓库你就拥有了一个能防回归的 DeepSeek 工作台。本文还有配套的精品资源点击获取