简介:面向自然语言处理领域的开发者,这份围绕DeepSeek API从入门到精通的PDF技术资料,从账号注册、获取API Key到依赖库安装、请求参数配置、请求构建与返回数据处理,覆盖API调用的完整链路,给出明确可循的操作指引。文中结合文本生成、情感分析、代码生成等典型场景展开案例讲解,并针对常见调用问题梳理排错思路,帮助有一定编程基础、希望深入了解API调用机制的研发人员快速上手。内容既适用于快速搭建智能客服系统、内容创作工具,也可为AI在教育、医疗等行业中的落地应用提供技术参考,整体编排循序渐进、注重实战。资源为单个PDF文档,压缩包大小659KB,内容结构紧凑,便于按章节阅读与检索。目前已有2353人学习下载,对于学习大模型API开发与集成的读者具有较高参考价值。1. 先别慌:DeepSeek API到底是什么,能帮你做什么第一次听说 API 这个词时,很多人都把它想象成一个很高深的黑匣子,甚至不敢点开官方文档。其实把 DeepSeek API 想成“给 AI 打电话的方式”就简单了:网页聊天是你对着屏幕打字,API 是你写程序自动拨打的一条电话线。只要你的程序能打通这条电话线,就可以让 AI 帮你生成文章、写代码、做情感分析、当客服。这门课的读者完全不需要有机器学习基础,只要会一点 Python,或者愿意照着代码一步一步敲,就能在半小时左右跑通第一个真实请求。它解决的核心问题只有一个:把大语言模型变成你自己应用里的一个“会说话的零件”。2. 学之前先配好三样东西:账号、API Key 和 Python 环境2.1 注册账号和获取 API Key:第一步其实只有十分钟我第一次学 API 时最怕的就是注册环节,总觉得会卡在某个验证码或者付费页面上。实际走一遍会发现,整个过程比注册一个普通网站还简单:打开官方平台页面,找到右上角的注册按钮,用邮箱加上密码就能创建账号。注册完记得去邮箱里点一下验证链接,激活账号,十分钟内能完成。登录之后,在页面右上角你的头像下拉菜单里找到“API Key”入口。进去以后会看到一个“创建 API Key”的按钮,点一下就生成一串由字母和数字组成的字符串。这串字符串就是你的身份凭证,相当于你调用 DeepSeek API 的“钥匙”。有一点必须记住:这串钥匙只完整显示这一次,关掉页面就再也看不到了。如果你忘了,只能重新生成一把新钥匙,而旧钥匙立刻失效。这里有个血泪经验想提前告诉你:把 API Key 保存到一个专门的笔记文件或者密码管理工具里,千万别直接放在桌面上一个名叫“key.txt”的文件里。我身边就有朋友图省事,把 Key 截图发到工作群里,结果当天额度就被刷爆了。这串 Key 就是你的钱,泄露出去等于别人拿着你的钱包在消费,所以第一个习惯就要养成:妥善保管,不给任何人。2.2 安装 requests 库:pip 一行命令搞定拿到钥匙以后,接下来的事就轻松多了:在你的电脑上准备一个可以发请求的工具。Python 里最常用的 HTTP 库叫requests,它专门负责把你的代码指令打包成 HTTP 请求,发给 DeepSeek 的服务器,再把服务器返回的结果原样带回来。安装方法很简单,打开命令行(Windows 下是命令提示符,Mac 或 Linux 下是终端),输入下面这行命令:pip install requests按回车以后,pip 会从 Python 的官方软件仓库自动下载并安装requests库连同它的依赖项。看到屏幕上出现“Successfully installed requests”的字样,说明装好了。如果你用的是 Python 3,也可以把命令换成pip3 install requests,效果完全一样。安装完成后,你可以在 Python 里输入import requests验证一下,只要不报错,就说明整个环境已经就绪。到这里,账号有了、钥匙有了、发请求的工具也有了,万事俱备,可以开始写第一行真正的调用代码了。2.3 为什么学这个要选 Python:零基础最不容易劝退很多刚上手的新手都会纠结一个问题:听说 API 不限制编程语言,为什么教程里清一色都用 Python?答案很简单:因为 Python 是当前学习成本最低、示例代码最好读懂的语言。它在处理 JSON 格式数据上特别顺手,而 DeepSeek API 的请求和响应正好都是 JSON 格式,两者像拼图一样严丝合缝。另外,Python 社区里围绕 AI 的生态已经非常成熟。你现在写下的这三四十行调用代码,放在三年前可能需要自己封装一堆底层网络逻辑。而现在,requests库把 HTTP 请求、重试、连接超时这些细节全包住了。你只需要关心三件事:往哪里发请求、发送什么内容、拿到结果怎么处理。如果你之前只学过一点点 Python,甚至完全没学过,也没关系。接下来的代码一共就三四十行,没有类和对象,没有复杂的逻辑,全部是“顺序执行”:先设置参数,再发请求,最后打印结果。你不需要成为 Python 高手,只需要能看懂字典这种{“键”: “值”}的写法就够了。我会在每一段代码后面解释每一行在干什么,你跟着敲一遍,比看十遍教程都管用。3. 跑通第一个真实请求:让 AI 回你一句话3.1 先搞懂一个概念:调用 API 的四个零件缺一不可在敲代码之前,先用一个比方理解整个调用的过程。你要给 AI 打电话,需要知道电话号码、你的身份、你要说的话、以及期望对方怎么回应。对应到代码里就是四样东西:第一是基础 URL,也就是 API 的地址。DeepSeek 的对话接口地址是https://api.deepseek.com/chat/completions,这相当于对方的“电话号码”。第二是 API Key,你的身份凭证,证明“我是谁”。第三是 Headers(请求头),它负责告诉服务器:我这里有钥匙,请检查我的身份。第四是 Body(请求体),它承载你真正要说的话,比如“帮我把这段话总结成三点”。这四个零件里面,新手最容易蒙的是 Headers 和 Body 的区别。其实不用把它想复杂:Headers 是贴在快递盒外面的快递单,上面写着寄件人和收件人信息;Body 是盒子里装的东西本身。快递员先看单子核实身份,再拆盒子看内容。服务器收到请求后也会先检查 Headers 里的Authorization字段,接着才读取 Body 里的任务内容。3.2 从零写第一段调用代码:每个字段都拆开讲下面这段代码是完整的“让 AI 回你一句话”的最小示例。我建议你新建一个test.py文件,逐行敲进去,千万别复制粘贴,打字的过程就是记逻辑的过程:import requests # 引入 requests 库,用来发送 HTTP 请求 # 第一步:设置你的 API Key,把星号部分替换成你实际的 Key api_key = "sk-你的API Key" # 第二步:设置 API 地址,这是 DeepSeek 对话接口的固定地址 url = "https://api.deepseek.com/chat/completions" # 第三步:设置请求头,带上你的 Key 和数据类型 headers = { "Authorization": f"Bearer {api_key}", # 格式固定,必须在 Key 前面加上 Bearer 加空格 "Content-Type": "application/json" # 告诉服务器,发送的内容是 JSON 格式 } # 第四步:设置请求体,这是你真正想对 AI 说的话 data = { "model": "deepseek-chat", # 告诉服务器用哪个模型 "messages": [ {"role": "system", "content": "你是一个乐于助人的助手"}, # 设定 AI 的身份 {"role": "user", "content": "请用一句话介绍什么是大语言模型"} # 用户的问题 ] } # 第五步:发送 POST 请求,把数据放到服务器上,等待返回 response = requests.post(url, headers=headers, json=data) # 第六步:检查返回状态码,200 表示请求成功 if response.status_code == 200: result = response.json() # 把返回的 JSON 数据解析成字典 generated_text = result["choices"][0]["message"]["content"] # 一层层找到 AI 的回复 print(generated_text) # 打印 AI 回复的内容 else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")这段代码里最需要用心理解的是data这个字典的结构。model字段告诉服务器调用哪个模型,deepseek-chat是 DeepSeek 的通用对话模型,适合日常问答和文本生成。messages是一个列表,里面每一项都是一条对话记录。每条记录由role和content组成,role有三个可选值:system用来设定 AI 的角色行为,user代表用户说的话,assistant代表 AI 曾经回复过的话。你可能想问:为什么明明只要问一句话,却要维护一个消息列表?这是因为大语言模型没有“记忆”,它只能从你给的上下文里看。如果你传了一个空的列表,它根本不知道你是谁、你想干嘛。如果你把之前的对话全都加进去,它就能根据上下文连续回答。这个机制稍后还会再讲,现在你只要记住:每次调用,你都在给 AI 递一小撮对话历史。3.3 处理响应:从一大坨 JSON 里捞出真正想要的回复运行刚才那段代码,如果一切正常,屏幕上会打印出 AI 的回复。但很多人第一次看响应的时候会愣住:为什么我只问了一句话,返回回来却是密密麻麻一长串内容?这是正常的。服务器返回的完整数据是一个 JSON 字符串,结构大致是这样:最外层包含一个choices列表,列表里有一个元素,元素里包含message,message里有role和content。content才是 AI 真正回复你的那段文字,其他那些字段如index、finish_reason等等,都是附带信息,告诉你这一次请求的内部状态。所以那句看起来有点绕的取值代码result["choices"][0]["message"]["content"],其实就是一层层剥洋葱:先取到choices这个列表,再取它的第一项下标 0,再取这一项里的message字典,最后取message里的content字符串。以后你在调试的时候,如果输出结果不对,优先检查是不是层级弄错了,这是 API 调用里最常见的“翻车”现场。3.4 失败时看哪里:状态码是最好的定位线索写代码最怕的就是出错,但 API 调用其实有一点很友好:服务器出错了,会直接告诉你错在哪里,而且是用状态码的方式告诉你。你只需要记住几个最常见的:状态码 200 表示一切正常,请求成功。状态码 401 表示认证出问题,通常是 API Key 不对、少了空格、或者格式写错了。状态码 429 表示你的请求频率太高,超过了每分钟的限制,服务器让你歇一歇。状态码 500 左右的开头,基本是服务器自己的问题,跟你没啥关系,过一会儿再试一次就好。我第一次调通接口的时候,卡在 401 整整半小时,最后发现是复制 API Key 时把末尾的一个空格也复制进去了。这类问题基本是每个人都会踩的坑,后面一章专门来梳理,现在你只要知道:看到状态码别慌,先看它是不是 200,不是的话,对照上面的几种情况先自查一遍,找不到问题再上网查错误信息里的文字说明。4. 三个真实场景示例:文本生成、情感分析、代码生成4.1 场景一:简单文本生成,搭建你随身的文案助手第一个场景最直接,就是把 AI 当成一个免费的文案帮手。比如你想让它帮你想一句朋友圈文案,或者写一段产品介绍,完全可以在刚才的代码基础上,把content换成你的需求,别的什么都不用动。import requests api_key = "sk-你的API Key" url = "https://api.deepseek.com/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } data = { "model": "deepseek-chat", "messages": [ {"role": "system", "content": "你是一个擅长写产品文案的运营专家,语言要生动、简洁"}, {"role": "user", "content": "帮我写一段30字以内的咖啡产品推广文案"} ] } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: result = response.json() print(result["choices"][0]["message"]["content"]) else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")这里的关键是system消息的设置。你可以把system消息理解成给 AI 的“人设指令”,它决定了 AI 回答问题的语气和方向。同一个问题“帮我写一段咖啡文案”,如果system设成“你是一个冷酷的科技测评博主”,AI 写出来的是参数和分析;设成“你是温柔的探店博主”,AI 写出来的就是体验和氛围。学会在system里精准描述需求,比不断追问 AI 更有效率,这是所有大语言模型 API 调用的基本功。4.2 场景二:情感分析,判断一条评论是好评还是差评第二个场景是情感分析。这类任务传统上需要训练单独的机器学习模型,现在用大语言模型 API 也能轻松搞定。你不需要额外下载任何工具,还是用同一个接口,只是把任务要求写进system里就行。import requests api_key = "sk-你的API Key" url = "https://api.deepseek.com/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } # 待判断的评论 comment = "这家餐厅的菜品味道很好,就是上菜速度有点慢" data = { "model": "deepseek-chat", "messages": [ {"role": "system", "content": "你是一个情感分析助手。请判断用户评论的情感倾向,只回复三个词之一:positive、negative、neutral,并给出一个0到1之间的置信度"}, {"role": "user", "content": comment} ] } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: result = response.json() print(result["choices"][0]["message"]["content"]) else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")看到这段代码,你应该已经发现了:所谓“情感分析”,本质上就是改了一套指令的文本生成。你在system里把任务说清楚,AI 就会按你的要求输出结果。这个思路可以套用到很多任务上,比如关键词提取、文章分类、翻译转换。以后遇到任何文本处理的需求,先别急着写复杂程序,问自己一句:能不能把要求写进system让 AI 直接干?有一点要提醒你:如果你在处理大量文本,最好把输出格式约束得更具体一些,比如让它只能输出“positive/negative/neutral”这三个词,不要输出多余的内容。这样后续处理结果时会更稳定,不容易出现因为 AI 自由发挥而解析失败的情况。4.3 场景三:代码生成,让 AI 从零写出可用的小函数第三个场景可能是最有吸引力也最实用的:让 AI 直接生成代码。比如你想要一个计算器函数,或者一段读取文件的脚本,你可以像下面这样要求它:import requests api_key = "sk-你的API Key" url = "https://api.deepseek.com/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } data = { "model": "deepseek-chat", "messages": [ {"role": "system", "content": "你是一个资深 Python 工程师,只输出代码,不要输出解释,代码要包含注释"}, {"role": "user", "content": "用 Python 写一个函数,接收两个数字,返回它们的和,并进行单元测试"} ] } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: result = response.json() generated_code = result["choices"][0]["message"]["content"] print(generated_code) else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")注意我在system里加了一条“只输出代码,不要输出解释”。这是因为大语言模型默认喜欢边解释边写代码,给你一段 Python 代码前面还加一段“好的,我来为你实现这个功能”。加了这条约束之后,输出内容就干净了。生成的代码质量如何?在大多数常见任务上,这类模型生成的代码达到“能直接运行”的水平一点不夸张。遇到报错,你甚至可以把报错信息原样丢回去,让它自己修订。这件事真正舒服的地方在于:AI 永远不会不耐烦,你让它改一百遍,它也会一句怨言没有地修改第一百次。5. 新手必看:五个最容易踩的坑和排查方法5.1 坑一:认证失败,状态码 401现象:请求发出去,返回状态码 401,大概率还会带一行类似“Authentication Fails”的错误说明。原因:绝大多数情况是 API Key 不对。具体来说可能是三种:一是复制的时候前后带了空格或换行符;二是字母大小写错误,Key 是区分大小写的;三是使用了旧的 Key——重新生成过后,旧 Key 会立即失效。网络代理有时也会干扰认证请求,但相对少见。解决:先把代码里的api_key变量重新赋值一下,改成手动一个个字符敲进去,不要用粘贴。如果还不行,登录官方平台,重新生成一个 Key,替换掉旧 Key。注意,替换之后,之前使用旧 Key 的程序都会失效,所以如果你有多个项目在跑,把它们都一并更新,再换新 Key。5.2 坑二:请求超时,响应迟迟不来现象:代码运行后没有输出,过了很久报出Timeout或连接超时的错误。原因:网络连接不稳定,或者服务器负载高,导致请求没有在预期时间内返回。有些公共网络会拦截对外部 API 的长连接,也会造成超时。解决:在requests.post里加一个timeout参数,例如timeout=30,给请求设置 30 秒的上限。这样如果超时,程序会明确报错,而不是卡住不动。然后换一个网络环境试试,比如从公司网络切到手机热点。如果你需要频繁调用,还可以自己实现一个简单的重试逻辑:超时后等待几秒钟再重新发送一次,最多重试三次。重试逻辑代码量不大,但能解决大部分临时性的网络波动问题。5.3 坑三:参数错误,模型名或消息结构不对现象:返回状态码 400,提示Invalid Parameter之类的信息。原因:最常见的是把模型名拼错了。DeepSeek 的通用对话模型是deepseek-chat,有段时间有开发者误写成deepseek-v2或者deepseek-coder,自然会被拒绝。另外,messages的结构也可能不对,比如忘了role字段,或者content写了非字符串的内容。解决:对照官方文档,逐字检查model的名称。messages必须是一个列表,列表的每一项必须是一个字典,字典必须包含role和content两个字段,而且两个字段的值都必须是字符串。新手最容易忘记的是给messages加外层列表,直接写成了字典,这个要特别留意。5.4 坑四:响应解析报错,拿不到 content现象:状态码是 200,请求成功了,但执行到result["choices"][0]["message"]["content"]时报错,比如KeyError或者TypeError。原因:你不一定每次都拿到同一个形状的响应。有些接口返回的字段名不完全一样,或者choices列表里没有内容,又或者响应里多了一层结构。如果你用的是旧版本的模型名称,也可能出现字段差异。解决:不要一上来就取深层字段。先用print(response.json())把完整的响应打印出来看一眼,确认实际返回了什么。再对照词典结构逐层取值。另外,取列表元素前先判断len(result["choices"]) > 0,取字段前先判断一下"message" in result["choices"][0],这样即使结构有变化,程序也不会直接崩溃,而是能告诉你到底缺了什么。5.5 坑五:API Key 泄露,被盗刷额度现象:控制台里出现你不认识的请求记录,或者账单显示大量调用,再看代码,发现 Key 写死在前端页面或公共仓库里。原因:有人把 Key 提交到了公开的 GitHub 仓库,或者写进了被分享出去的演示页面代码里。API Key 是跟着Authorization头发出去的,一旦代码本身流传出去,任何拿到代码的人都能用你的 Key。解决:重要程度排第一位。立即到平台后台把这个 Key 删除或重新生成,让旧 Key 立刻变为废弃状态。以后要养成两个习惯:第一,Key 永远保存在环境变量或本地配置文件里,不要出现在代码里;第二,不要提交到任何公开仓库。在本地写测试脚本时,Key 还要设置好文件权限,防止同电脑其他人看到。这件事我跟很多人讲过:安全意识和编码能力是两码事,后者可以慢慢练,前者必须从一开始就做好。6. 下一步学什么:从“能跑”到“会做完整应用”到了这一步,你已经跑通了第一个真实的 DeepSeek API 请求,掌握了一个能覆盖绝大多数文本任务的通用调用模板。下一步到底该怎么走?我给你一条非常实际的学习路径。先练好 Prompt 写作。用 API 做产品,本质上就是通过system消息把任务定义清楚。你可以每天拿一个真实的场景练手,比如让 AI 给一段唇枪舌剑的聊天记录做情绪分析,或者让它把你手头的工作报告压缩成五条摘要。慢慢地你就会发现,同样一个模型,在不同人的提示词之下,产出的效果天差地别。Prompt 不是玄学,它是有方法论的:先定角色,再给任务,再给格式要求,最后给约束条件。再学会管理上下文。现在每次调用你都是只发一条消息,但真实应用里用户是会连续提问的。你需要把历史记录保存在自己这边,下次请求时拼接到messages里一起发给 API。同时注意,模型能接受的上下文长度是有上限的,所以你要学会做“窗口滑动”:超出长度时把最老的对话丢掉,保留最近的几条。最后做一个完整的小项目。我建议你做一个“智能客服消息助手”:从桌面一个 txt 文件里读取用户提问,调用 API 获得回答,把回答写进另一个 txt 文件。这个项目虽然简陋,但涵盖了你未来做真实应用的所有环节:文件读写、请求调用、数据解析、错误处理。做通之后,再往界面上加东西也会顺手很多。从那以后,我每次写 API 调用代码,都强制自己走一遍这个流程:先确认 Key 没问题,再确认模型名拼写正确,然后打印一次完整响应确认结构,最后再开始写解析逻辑。这套流程帮我避开了绝大多数低级错误,希望也能帮到你。本文还有配套的精品资源,点击获取
简介:面向自然语言处理领域的开发者,这份围绕DeepSeek API从入门到精通的PDF技术资料,从账号注册、获取API Key到依赖库安装、请求参数配置、请求构建与返回数据处理,覆盖API调用的完整链路,给出明确可循的操作指引。文中结合文本生成、情感分析、代码生成等典型场景展开案例讲解,并针对常见调用问题梳理排错思路,帮助有一定编程基础、希望深入了解API调用机制的研发人员快速上手。内容既适用于快速搭建智能客服系统、内容创作工具,也可为AI在教育、医疗等行业中的落地应用提供技术参考,整体编排循序渐进、注重实战。资源为单个PDF文档,压缩包大小659KB,内容结构紧凑,便于按章节阅读与检索。目前已有2353人学习下载,对于学习大模型API开发与集成的读者具有较高参考价值。1. 先别慌:DeepSeek API到底是什么,能帮你做什么第一次听说 API 这个词时,很多人都把它想象成一个很高深的黑匣子,甚至不敢点开官方文档。其实把 DeepSeek API 想成“给 AI 打电话的方式”就简单了:网页聊天是你对着屏幕打字,API 是你写程序自动拨打的一条电话线。只要你的程序能打通这条电话线,就可以让 AI 帮你生成文章、写代码、做情感分析、当客服。这门课的读者完全不需要有机器学习基础,只要会一点 Python,或者愿意照着代码一步一步敲,就能在半小时左右跑通第一个真实请求。它解决的核心问题只有一个:把大语言模型变成你自己应用里的一个“会说话的零件”。2. 学之前先配好三样东西:账号、API Key 和 Python 环境2.1 注册账号和获取 API Key:第一步其实只有十分钟我第一次学 API 时最怕的就是注册环节,总觉得会卡在某个验证码或者付费页面上。实际走一遍会发现,整个过程比注册一个普通网站还简单:打开官方平台页面,找到右上角的注册按钮,用邮箱加上密码就能创建账号。注册完记得去邮箱里点一下验证链接,激活账号,十分钟内能完成。登录之后,在页面右上角你的头像下拉菜单里找到“API Key”入口。进去以后会看到一个“创建 API Key”的按钮,点一下就生成一串由字母和数字组成的字符串。这串字符串就是你的身份凭证,相当于你调用 DeepSeek API 的“钥匙”。有一点必须记住:这串钥匙只完整显示这一次,关掉页面就再也看不到了。如果你忘了,只能重新生成一把新钥匙,而旧钥匙立刻失效。这里有个血泪经验想提前告诉你:把 API Key 保存到一个专门的笔记文件或者密码管理工具里,千万别直接放在桌面上一个名叫“key.txt”的文件里。我身边就有朋友图省事,把 Key 截图发到工作群里,结果当天额度就被刷爆了。这串 Key 就是你的钱,泄露出去等于别人拿着你的钱包在消费,所以第一个习惯就要养成:妥善保管,不给任何人。2.2 安装 requests 库:pip 一行命令搞定拿到钥匙以后,接下来的事就轻松多了:在你的电脑上准备一个可以发请求的工具。Python 里最常用的 HTTP 库叫requests,它专门负责把你的代码指令打包成 HTTP 请求,发给 DeepSeek 的服务器,再把服务器返回的结果原样带回来。安装方法很简单,打开命令行(Windows 下是命令提示符,Mac 或 Linux 下是终端),输入下面这行命令:pip install requests按回车以后,pip 会从 Python 的官方软件仓库自动下载并安装requests库连同它的依赖项。看到屏幕上出现“Successfully installed requests”的字样,说明装好了。如果你用的是 Python 3,也可以把命令换成pip3 install requests,效果完全一样。安装完成后,你可以在 Python 里输入import requests验证一下,只要不报错,就说明整个环境已经就绪。到这里,账号有了、钥匙有了、发请求的工具也有了,万事俱备,可以开始写第一行真正的调用代码了。2.3 为什么学这个要选 Python:零基础最不容易劝退很多刚上手的新手都会纠结一个问题:听说 API 不限制编程语言,为什么教程里清一色都用 Python?答案很简单:因为 Python 是当前学习成本最低、示例代码最好读懂的语言。它在处理 JSON 格式数据上特别顺手,而 DeepSeek API 的请求和响应正好都是 JSON 格式,两者像拼图一样严丝合缝。另外,Python 社区里围绕 AI 的生态已经非常成熟。你现在写下的这三四十行调用代码,放在三年前可能需要自己封装一堆底层网络逻辑。而现在,requests库把 HTTP 请求、重试、连接超时这些细节全包住了。你只需要关心三件事:往哪里发请求、发送什么内容、拿到结果怎么处理。如果你之前只学过一点点 Python,甚至完全没学过,也没关系。接下来的代码一共就三四十行,没有类和对象,没有复杂的逻辑,全部是“顺序执行”:先设置参数,再发请求,最后打印结果。你不需要成为 Python 高手,只需要能看懂字典这种{“键”: “值”}的写法就够了。我会在每一段代码后面解释每一行在干什么,你跟着敲一遍,比看十遍教程都管用。3. 跑通第一个真实请求:让 AI 回你一句话3.1 先搞懂一个概念:调用 API 的四个零件缺一不可在敲代码之前,先用一个比方理解整个调用的过程。你要给 AI 打电话,需要知道电话号码、你的身份、你要说的话、以及期望对方怎么回应。对应到代码里就是四样东西:第一是基础 URL,也就是 API 的地址。DeepSeek 的对话接口地址是https://api.deepseek.com/chat/completions,这相当于对方的“电话号码”。第二是 API Key,你的身份凭证,证明“我是谁”。第三是 Headers(请求头),它负责告诉服务器:我这里有钥匙,请检查我的身份。第四是 Body(请求体),它承载你真正要说的话,比如“帮我把这段话总结成三点”。这四个零件里面,新手最容易蒙的是 Headers 和 Body 的区别。其实不用把它想复杂:Headers 是贴在快递盒外面的快递单,上面写着寄件人和收件人信息;Body 是盒子里装的东西本身。快递员先看单子核实身份,再拆盒子看内容。服务器收到请求后也会先检查 Headers 里的Authorization字段,接着才读取 Body 里的任务内容。3.2 从零写第一段调用代码:每个字段都拆开讲下面这段代码是完整的“让 AI 回你一句话”的最小示例。我建议你新建一个test.py文件,逐行敲进去,千万别复制粘贴,打字的过程就是记逻辑的过程:import requests # 引入 requests 库,用来发送 HTTP 请求 # 第一步:设置你的 API Key,把星号部分替换成你实际的 Key api_key = "sk-你的API Key" # 第二步:设置 API 地址,这是 DeepSeek 对话接口的固定地址 url = "https://api.deepseek.com/chat/completions" # 第三步:设置请求头,带上你的 Key 和数据类型 headers = { "Authorization": f"Bearer {api_key}", # 格式固定,必须在 Key 前面加上 Bearer 加空格 "Content-Type": "application/json" # 告诉服务器,发送的内容是 JSON 格式 } # 第四步:设置请求体,这是你真正想对 AI 说的话 data = { "model": "deepseek-chat", # 告诉服务器用哪个模型 "messages": [ {"role": "system", "content": "你是一个乐于助人的助手"}, # 设定 AI 的身份 {"role": "user", "content": "请用一句话介绍什么是大语言模型"} # 用户的问题 ] } # 第五步:发送 POST 请求,把数据放到服务器上,等待返回 response = requests.post(url, headers=headers, json=data) # 第六步:检查返回状态码,200 表示请求成功 if response.status_code == 200: result = response.json() # 把返回的 JSON 数据解析成字典 generated_text = result["choices"][0]["message"]["content"] # 一层层找到 AI 的回复 print(generated_text) # 打印 AI 回复的内容 else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")这段代码里最需要用心理解的是data这个字典的结构。model字段告诉服务器调用哪个模型,deepseek-chat是 DeepSeek 的通用对话模型,适合日常问答和文本生成。messages是一个列表,里面每一项都是一条对话记录。每条记录由role和content组成,role有三个可选值:system用来设定 AI 的角色行为,user代表用户说的话,assistant代表 AI 曾经回复过的话。你可能想问:为什么明明只要问一句话,却要维护一个消息列表?这是因为大语言模型没有“记忆”,它只能从你给的上下文里看。如果你传了一个空的列表,它根本不知道你是谁、你想干嘛。如果你把之前的对话全都加进去,它就能根据上下文连续回答。这个机制稍后还会再讲,现在你只要记住:每次调用,你都在给 AI 递一小撮对话历史。3.3 处理响应:从一大坨 JSON 里捞出真正想要的回复运行刚才那段代码,如果一切正常,屏幕上会打印出 AI 的回复。但很多人第一次看响应的时候会愣住:为什么我只问了一句话,返回回来却是密密麻麻一长串内容?这是正常的。服务器返回的完整数据是一个 JSON 字符串,结构大致是这样:最外层包含一个choices列表,列表里有一个元素,元素里包含message,message里有role和content。content才是 AI 真正回复你的那段文字,其他那些字段如index、finish_reason等等,都是附带信息,告诉你这一次请求的内部状态。所以那句看起来有点绕的取值代码result["choices"][0]["message"]["content"],其实就是一层层剥洋葱:先取到choices这个列表,再取它的第一项下标 0,再取这一项里的message字典,最后取message里的content字符串。以后你在调试的时候,如果输出结果不对,优先检查是不是层级弄错了,这是 API 调用里最常见的“翻车”现场。3.4 失败时看哪里:状态码是最好的定位线索写代码最怕的就是出错,但 API 调用其实有一点很友好:服务器出错了,会直接告诉你错在哪里,而且是用状态码的方式告诉你。你只需要记住几个最常见的:状态码 200 表示一切正常,请求成功。状态码 401 表示认证出问题,通常是 API Key 不对、少了空格、或者格式写错了。状态码 429 表示你的请求频率太高,超过了每分钟的限制,服务器让你歇一歇。状态码 500 左右的开头,基本是服务器自己的问题,跟你没啥关系,过一会儿再试一次就好。我第一次调通接口的时候,卡在 401 整整半小时,最后发现是复制 API Key 时把末尾的一个空格也复制进去了。这类问题基本是每个人都会踩的坑,后面一章专门来梳理,现在你只要知道:看到状态码别慌,先看它是不是 200,不是的话,对照上面的几种情况先自查一遍,找不到问题再上网查错误信息里的文字说明。4. 三个真实场景示例:文本生成、情感分析、代码生成4.1 场景一:简单文本生成,搭建你随身的文案助手第一个场景最直接,就是把 AI 当成一个免费的文案帮手。比如你想让它帮你想一句朋友圈文案,或者写一段产品介绍,完全可以在刚才的代码基础上,把content换成你的需求,别的什么都不用动。import requests api_key = "sk-你的API Key" url = "https://api.deepseek.com/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } data = { "model": "deepseek-chat", "messages": [ {"role": "system", "content": "你是一个擅长写产品文案的运营专家,语言要生动、简洁"}, {"role": "user", "content": "帮我写一段30字以内的咖啡产品推广文案"} ] } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: result = response.json() print(result["choices"][0]["message"]["content"]) else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")这里的关键是system消息的设置。你可以把system消息理解成给 AI 的“人设指令”,它决定了 AI 回答问题的语气和方向。同一个问题“帮我写一段咖啡文案”,如果system设成“你是一个冷酷的科技测评博主”,AI 写出来的是参数和分析;设成“你是温柔的探店博主”,AI 写出来的就是体验和氛围。学会在system里精准描述需求,比不断追问 AI 更有效率,这是所有大语言模型 API 调用的基本功。4.2 场景二:情感分析,判断一条评论是好评还是差评第二个场景是情感分析。这类任务传统上需要训练单独的机器学习模型,现在用大语言模型 API 也能轻松搞定。你不需要额外下载任何工具,还是用同一个接口,只是把任务要求写进system里就行。import requests api_key = "sk-你的API Key" url = "https://api.deepseek.com/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } # 待判断的评论 comment = "这家餐厅的菜品味道很好,就是上菜速度有点慢" data = { "model": "deepseek-chat", "messages": [ {"role": "system", "content": "你是一个情感分析助手。请判断用户评论的情感倾向,只回复三个词之一:positive、negative、neutral,并给出一个0到1之间的置信度"}, {"role": "user", "content": comment} ] } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: result = response.json() print(result["choices"][0]["message"]["content"]) else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")看到这段代码,你应该已经发现了:所谓“情感分析”,本质上就是改了一套指令的文本生成。你在system里把任务说清楚,AI 就会按你的要求输出结果。这个思路可以套用到很多任务上,比如关键词提取、文章分类、翻译转换。以后遇到任何文本处理的需求,先别急着写复杂程序,问自己一句:能不能把要求写进system让 AI 直接干?有一点要提醒你:如果你在处理大量文本,最好把输出格式约束得更具体一些,比如让它只能输出“positive/negative/neutral”这三个词,不要输出多余的内容。这样后续处理结果时会更稳定,不容易出现因为 AI 自由发挥而解析失败的情况。4.3 场景三:代码生成,让 AI 从零写出可用的小函数第三个场景可能是最有吸引力也最实用的:让 AI 直接生成代码。比如你想要一个计算器函数,或者一段读取文件的脚本,你可以像下面这样要求它:import requests api_key = "sk-你的API Key" url = "https://api.deepseek.com/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } data = { "model": "deepseek-chat", "messages": [ {"role": "system", "content": "你是一个资深 Python 工程师,只输出代码,不要输出解释,代码要包含注释"}, {"role": "user", "content": "用 Python 写一个函数,接收两个数字,返回它们的和,并进行单元测试"} ] } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: result = response.json() generated_code = result["choices"][0]["message"]["content"] print(generated_code) else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")注意我在system里加了一条“只输出代码,不要输出解释”。这是因为大语言模型默认喜欢边解释边写代码,给你一段 Python 代码前面还加一段“好的,我来为你实现这个功能”。加了这条约束之后,输出内容就干净了。生成的代码质量如何?在大多数常见任务上,这类模型生成的代码达到“能直接运行”的水平一点不夸张。遇到报错,你甚至可以把报错信息原样丢回去,让它自己修订。这件事真正舒服的地方在于:AI 永远不会不耐烦,你让它改一百遍,它也会一句怨言没有地修改第一百次。5. 新手必看:五个最容易踩的坑和排查方法5.1 坑一:认证失败,状态码 401现象:请求发出去,返回状态码 401,大概率还会带一行类似“Authentication Fails”的错误说明。原因:绝大多数情况是 API Key 不对。具体来说可能是三种:一是复制的时候前后带了空格或换行符;二是字母大小写错误,Key 是区分大小写的;三是使用了旧的 Key——重新生成过后,旧 Key 会立即失效。网络代理有时也会干扰认证请求,但相对少见。解决:先把代码里的api_key变量重新赋值一下,改成手动一个个字符敲进去,不要用粘贴。如果还不行,登录官方平台,重新生成一个 Key,替换掉旧 Key。注意,替换之后,之前使用旧 Key 的程序都会失效,所以如果你有多个项目在跑,把它们都一并更新,再换新 Key。5.2 坑二:请求超时,响应迟迟不来现象:代码运行后没有输出,过了很久报出Timeout或连接超时的错误。原因:网络连接不稳定,或者服务器负载高,导致请求没有在预期时间内返回。有些公共网络会拦截对外部 API 的长连接,也会造成超时。解决:在requests.post里加一个timeout参数,例如timeout=30,给请求设置 30 秒的上限。这样如果超时,程序会明确报错,而不是卡住不动。然后换一个网络环境试试,比如从公司网络切到手机热点。如果你需要频繁调用,还可以自己实现一个简单的重试逻辑:超时后等待几秒钟再重新发送一次,最多重试三次。重试逻辑代码量不大,但能解决大部分临时性的网络波动问题。5.3 坑三:参数错误,模型名或消息结构不对现象:返回状态码 400,提示Invalid Parameter之类的信息。原因:最常见的是把模型名拼错了。DeepSeek 的通用对话模型是deepseek-chat,有段时间有开发者误写成deepseek-v2或者deepseek-coder,自然会被拒绝。另外,messages的结构也可能不对,比如忘了role字段,或者content写了非字符串的内容。解决:对照官方文档,逐字检查model的名称。messages必须是一个列表,列表的每一项必须是一个字典,字典必须包含role和content两个字段,而且两个字段的值都必须是字符串。新手最容易忘记的是给messages加外层列表,直接写成了字典,这个要特别留意。5.4 坑四:响应解析报错,拿不到 content现象:状态码是 200,请求成功了,但执行到result["choices"][0]["message"]["content"]时报错,比如KeyError或者TypeError。原因:你不一定每次都拿到同一个形状的响应。有些接口返回的字段名不完全一样,或者choices列表里没有内容,又或者响应里多了一层结构。如果你用的是旧版本的模型名称,也可能出现字段差异。解决:不要一上来就取深层字段。先用print(response.json())把完整的响应打印出来看一眼,确认实际返回了什么。再对照词典结构逐层取值。另外,取列表元素前先判断len(result["choices"]) > 0,取字段前先判断一下"message" in result["choices"][0],这样即使结构有变化,程序也不会直接崩溃,而是能告诉你到底缺了什么。5.5 坑五:API Key 泄露,被盗刷额度现象:控制台里出现你不认识的请求记录,或者账单显示大量调用,再看代码,发现 Key 写死在前端页面或公共仓库里。原因:有人把 Key 提交到了公开的 GitHub 仓库,或者写进了被分享出去的演示页面代码里。API Key 是跟着Authorization头发出去的,一旦代码本身流传出去,任何拿到代码的人都能用你的 Key。解决:重要程度排第一位。立即到平台后台把这个 Key 删除或重新生成,让旧 Key 立刻变为废弃状态。以后要养成两个习惯:第一,Key 永远保存在环境变量或本地配置文件里,不要出现在代码里;第二,不要提交到任何公开仓库。在本地写测试脚本时,Key 还要设置好文件权限,防止同电脑其他人看到。这件事我跟很多人讲过:安全意识和编码能力是两码事,后者可以慢慢练,前者必须从一开始就做好。6. 下一步学什么:从“能跑”到“会做完整应用”到了这一步,你已经跑通了第一个真实的 DeepSeek API 请求,掌握了一个能覆盖绝大多数文本任务的通用调用模板。下一步到底该怎么走?我给你一条非常实际的学习路径。先练好 Prompt 写作。用 API 做产品,本质上就是通过system消息把任务定义清楚。你可以每天拿一个真实的场景练手,比如让 AI 给一段唇枪舌剑的聊天记录做情绪分析,或者让它把你手头的工作报告压缩成五条摘要。慢慢地你就会发现,同样一个模型,在不同人的提示词之下,产出的效果天差地别。Prompt 不是玄学,它是有方法论的:先定角色,再给任务,再给格式要求,最后给约束条件。再学会管理上下文。现在每次调用你都是只发一条消息,但真实应用里用户是会连续提问的。你需要把历史记录保存在自己这边,下次请求时拼接到messages里一起发给 API。同时注意,模型能接受的上下文长度是有上限的,所以你要学会做“窗口滑动”:超出长度时把最老的对话丢掉,保留最近的几条。最后做一个完整的小项目。我建议你做一个“智能客服消息助手”:从桌面一个 txt 文件里读取用户提问,调用 API 获得回答,把回答写进另一个 txt 文件。这个项目虽然简陋,但涵盖了你未来做真实应用的所有环节:文件读写、请求调用、数据解析、错误处理。做通之后,再往界面上加东西也会顺手很多。从那以后,我每次写 API 调用代码,都强制自己走一遍这个流程:先确认 Key 没问题,再确认模型名拼写正确,然后打印一次完整响应确认结构,最后再开始写解析逻辑。这套流程帮我避开了绝大多数低级错误,希望也能帮到你。本文还有配套的精品资源,点击获取