需完成身份认证、请求构造与响应解析:一、安装requests并配置API密钥;二、构造符合OpenAI格式的JSON请求调用chat/completions接口;三、解析JSON响应提取content字段;四、封装为支持流式输出的函数;五、集成至定时自动化任务脚本。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

如果您希望在Python项目中调用DeepSeek API以实现文本生成、代码补全等自动化任务,则需要完成身份认证、请求构造与响应解析等关键环节。以下是具体实施步骤:
一、安装必要依赖并配置API密钥
DeepSeek API通过HTTP请求调用,需使用requests库发送POST请求,并将API密钥置于请求头中进行身份验证。密钥需从DeepSeek官方平台获取并安全存储。
1、在终端执行命令安装requests库:pip install requests。
2、访问DeepSeek Platform登录账户,在API Keys页面点击“Create New Key”生成密钥。
立即学习“Python免费学习笔记(深入)”;
3、将生成的密钥保存至环境变量,例如在Linux/macOS中执行:export DEEPSEEK_API_KEY="sk-xxx";Windows用户可使用set命令或系统环境变量设置。
二、构造标准请求体并调用chat/completions接口
DeepSeek API遵循OpenAI兼容格式,需按指定JSON结构组织messages字段,模型名称固定为deepseek-chat,temperature控制输出随机性。
1、在Python脚本中导入requests模块并定义API基础URL:BASE_URL = "https://api.deepseek.com/v1/chat/completions"。
2、构建headers字典,包含Authorization与Content-Type字段:{"Authorization": f"Bearer {os.getenv('DEEPSEEK_API_KEY')}", "Content-Type": "application/json"}。
3、构造data字典,包含model、messages、temperature三项,其中messages为包含role和content的字典列表,例如[{"role": "user", "content": "写一个Python函数计算阶乘"}]。
三、处理响应并提取生成文本
API返回为JSON格式,需检查response.status_code是否为200,并从嵌套结构response.json()["choices"][0]["message"]["content"]中提取模型输出内容。
1、使用response = requests.post(BASE_URL, headers=headers, json=data)发起请求。
2、添加异常处理逻辑:若status_code不为200,则打印response.status_code与response.text。
3、成功响应后执行result = response.json()["choices"][0]["message"]["content"].strip(),确保去除首尾空白字符。
四、封装为可复用函数并支持流式响应
为提升脚本复用性,可将请求逻辑封装为函数,并通过stream参数控制是否启用逐字节流式输出,适用于长文本生成场景。
1、定义函数def deepseek_call(prompt: str, stream: bool = False) -> str:,内部构造完整请求参数。
2、当stream=True时,在headers中添加{"Accept": "text/event-stream"},并使用response.iter_lines()逐行解析SSE格式数据。
3、对每行数据解码后匹配data:前缀,用json.loads()提取delta.content字段并拼接为完整响应字符串。
五、集成至自动化任务脚本示例
将API调用嵌入周期性任务中,如每日自动生成周报摘要,需结合datetime与schedule库实现定时触发,同时避免高频调用触发限流。
1、使用schedule.every().monday.at("09:00").do(deepseek_call, prompt="生成上周工作摘要")设定执行时间。
2、在请求前加入随机延迟(如time.sleep(random.uniform(0.5, 2))),防止因请求过于集中被服务端拒绝。
3、将生成结果写入本地Markdown文件,路径使用datetime.now().strftime("%Y-%m-%d-summary.md")动态生成。











