> 技术文档 > 【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk

【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk

【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk

目录

  • 前言
  • 免费体验
  • API-Key申请
  • 首次调用API
  • 基本概念
  • 智能体
    • 代码层对话
    • 自定义界面
  • 总结
  • 推荐文章

前言

最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把。
目前DeepSeek对接API是收费的,需要充值获取Tokens,在对话和推理过程会消耗token。

免费体验

截至2025年2月8日注册都还会赠送10元,一个月有效期,相当于有一个免费体验期,10元够发起很多次对话了。
【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk
具体能够发起多少次对话,我们不妨就基于这个问题,让DeepSeek给我们解答下。
根据ds给出得答案,10元大概能够调用1到5千次,那位小伙伴解答下是否正确。
【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk

API-Key申请

申请非常简单,直接在首页点击进入【API开发平台】>【API keys】>【创建API key】>【输入一个名称】,创建完成后,还可以修改名称,以及删除。
【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk

首次调用API

拿到API-Key之后,可以点击接口文档,使用首次调用API-Python例子开始尝试调用返回内容。

# Please install OpenAI SDK first: `pip3 install openai`from openai import OpenAIclient = OpenAI(api_key=\"\", base_url=\"https://api.deepseek.com\")response = client.chat.completions.create( model=\"deepseek-chat\", messages=[ {\"role\": \"system\", \"content\": \"You are a helpful assistant\"}, {\"role\": \"user\", \"content\": \"Hello\"}, ], stream=False)print(response.choices[0].message.content)

为什么deepseek是安装openAI SDK
这个有点意思,博主搜了下,得到回答是:DeepSeek使用OpenAI的SDK和API主要是因为OpenAI的大模型在业界具有领先地位,其标准和规范被广泛接受和使用。‌

基本概念

最小单元

Token 是模型用来表示自然语言文本的的最小单位,可以是一个词、一个数字或一个标点符号等。
DS将根据模型输入和输出的总 token 数进行计量计费。

推理模型

deepseek-reasoner 是 DeepSeek 推出的推理模型。在输出最终回答之前,模型会先输出一段思维链内容,以提升最终答案的准确性。我们的 API 向用户开放 deepseek-reasoner 思维链的内容,以供用户查看、展示、蒸馏使用。

在每一轮对话过程中,模型会输出思维链内容(reasoning_content)和最终回答(content)。在下一轮对话中,之前轮输出的思维链内容不会被拼接到上下文中,如下图所示:【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk

智能体

创建过AI应用和智能体的小伙伴都知道,都是基于界面可视化页面进行创建和使用。
对于API,实际上在代码层面进行智能体创建,基础的元素包括chat的人设(提示词Prompt)和用户提问两部分。

代码层对话

下面就创建一个《李白》智能体进行对话。

角色设定
先给智能体进行角色定位,就是给智能体加上提示词Prompt。
当然你也可以根据创建智能体一样进行详细设定,这里博主就简单一句话给智能体进行绑定。
一般角色设定的提示词是不会变的,只会在调优或者未能达到自己满意情况下进行提示词调整。

你是一位唐朝大诗人李白,你只能回答李白相关的问题,超出李白范围的友好提示。

用户对话
这里就是界面输入框用户输入的内容。

【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk

自定义界面

基于上面两个关键参数,就能够定制属于自己的一个智能体对话界面。
前提需要封装好一个api接口方法,传递用户提问的参数,最后返回DeepSeek响应的内容。

后端API
将上面代码设置成路由,可进行Get请求的API接口。
温馨提示:输出内容记得Unicode转义,同时记得设置可跨域-flask_cors。【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk
主要依赖Flask进行路由设置,需要先安装。

from flask import Flask, request, jsonifyfrom flask_cors import CORSfrom openai import OpenAIimport jsonapp = Flask(__name__)cors = CORS(app) # 这将允许所有域的跨域请求# 配置OpenAI客户端openai_client = OpenAI(api_key=\"你的deepseek的key\", base_url=\"https://api.deepseek.com\")# 系统提示(用于OpenAI API交互)system_prompt = \"你是一位唐朝大诗人李白,你只能回答李白相关的问题,超出李白范围的友好提示。\"# 用户内容(这里可以固定,也可以从GET请求的参数中获取,但为了简化,我们固定它)# 注意:在实际应用中,用户内容应该从请求参数中安全地获取和处理# user_content = \"输出一首关于月亮的李白风格的诗\"@app.route(\'/generate_text/\', methods=[\'GET\'])def generate_text(user_content): try: # 与OpenAI API交互,生成文本 response = openai_client.chat.completions.create( model=\"deepseek-chat\", messages=[ {\"role\": \"system\", \"content\": system_prompt}, {\"role\": \"user\", \"content\": user_content}, ], stream=False ) # 从响应中提取生成的文本(这里假设响应结构是已知的) generated_text = response.choices[0].message.content # 默认输出的是编码值:\\u300a\\u6708\\u4e0b\\u72ec\\u914c\\u300b # 返回生成的文本作为API的响应 #return jsonify(json.loads(json.dumps({\"generated_text\": generated_text}))) return jsonify({\"generated_text\": generated_text}) except Exception as e: # 在出现异常时返回错误信息 return jsonify({\"error\": str(e)}), 500if __name__ == \'__main__\': app.run(debug=True)

【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk

前端代码
同样是使用DeepSeek进行代码生成,直接生成一个对话vue3前端界面,需要进行多轮对话进行调整满意的vue代码。
然后进行api接口调用测试效果。

<template><div class=\"chat-interface\"><el-card shadow=\"hover\"><div class=\"chat-history\"><div v-for=\"(message, index) in messages\" :key=\"index\" class=\"chat-message\"><div :class=\"{\'message-user\': message.type === \'user\', \'message-bot\': message.type === \'bot\'}\"><span class=\"avatar\" :style=\"{ backgroundColor: message.type === \'user\' ? \'#409EFF\' : \'#F56C6C\' }\">{{ message.type === \'user\' ? \'我\' : \'李白\' }}</span><div class=\"content\">{{ message.content }}</div></div></div></div><div class=\"input-area\"><el-input v-model=\"userInput\" placeholder=\"输入你的问题\" class=\"input-box\" clearable></el-input><el-button type=\"primary\" @click=\"sendMessage\" :loading=\"loadingFlag\">发送</el-button></div></el-card></div></template><script setup lang=\"ts\" name=\"batchPortfolio\">import { ref } from \'vue\';import axios from \'axios\';const loadingFlag=ref(false)const userInput = ref(\'\');const messages: { type: \'user\' | \'bot\'; content: string }[]= ref([]);const sendMessage = async () => {if (userInput.value.trim()) {messages.value.push({ type: \'user\', content: `${userInput.value}` });loadingFlag.value=true;const response = await axios.get(`http://127.0.0.1:5000/generate_text/${userInput.value}`);loadingFlag.value=false;// 机器人回复setTimeout(() => {messages.value.push({ type: \'bot\', content: `${response.data.generated_text}` });}, 100);// // 模拟机器人回复// setTimeout(() => {// messages.value.push({ type: \'bot\', content: `机器人回复: ${userInput.value.split(\' \').join(\' \')} 的回复` });// }, 1000);userInput.value = \'\';}};</script><style scoped lang=\"scss\">.chat-interface { max-width: 600px; margin: 0 auto; padding: 20px; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1); border-radius: 8px; background-color: #fff;}.chat-history { padding: 16px; overflow-y: auto; max-height: 400px; border-bottom: 1px solid #ebeef5;}.chat-message { margin-bottom: 16px; align-items: center;}.message-user { display: flex; align-items: center; justify-content: flex-end;line-height: 40px;text-align: center;color: #fff;}.message-bot { display: flex; align-items: center;line-height: 40px;text-align: center;color: #fff;}.avatar { width: 40px; height: 40px; border-radius: 50%; margin-right: 12px;}.message-user .avatar { background-color: #409EFF;}.message-bot .avatar { background-color: #F56C6C;}.content { max-width: calc(100% - 52px); /* 40px avatar + 12px margin */ padding: 8px 16px; border-radius: 4px; background-color: #f0f0f0; color: #333;}.message-bot .content { background-color: #fff3e0; justify-content: flex-start;}.message-user .content { background-color: #e6f7ff;}.input-area { display: flex; padding: 16px; border-top: 1px solid #ebeef5;}.input-box { flex: 1; border-radius: 4px;}.el-button { margin-left: 12px;}</style>

【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用_deepseek-sdk

总结

DeepSeek的API对接,绝对是博主目前对接最快的一个,非常简洁清晰,没有那么多花里胡哨的东西和文档,从创建api-key到直接调用api和返回数据不到一分钟就搞定。
当然,后续生成vue对话界面肯定需要自己花点时间多轮对话生成,以及python封装成路由访问的api。同样也是可以使用DS完成。

推荐文章

【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用

【AI大模型】为什么说更倾向于使用DeepSeek,清爽简洁,输出内容质量高,清晰明了得思考过程,真的值得拥有

【大模型】DeepSeek与chatGPT的区别以及自身的优势