一分钟带你上手Python调用DeepSeek的API

2025-02-14 05:50

本文主要是介绍一分钟带你上手Python调用DeepSeek的API,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下...

前言

最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把。

目前DeepSeek对接API是收费的,需要充值获取Tokens,在对话和推理过程会消耗token。

一分钟带你上手Python调用DeepSeek的API

免费体验

截至2025年2月8日注册都还会赠送10元,一个月有效期,相当于有一个免费体验期,10元够发起很多次对话了。

一分钟带你上手Python调用DeepSeek的API

具体能够发起多少次对话,我们不妨就基于这个问题,让DeepSeek给我rSaurY们解答下。

根据ds给出得答案,10元大概能够调用1到5千次,那位小伙伴解答下是否正确。

一分钟带你上手Python调用DeepSeek的API

API-Key申请

申请非常简单,直接在首页点击进入【API开发平台】>【API keys】>【创建API key】>【输入一个名称】,创建完成后,还可以修改名称,以及删除。

一分钟带你上手Python调用DeepSeek的API

首次调用API

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

# Please install OpenAI SDK first: `pip3 install openai`

from openai import OpenAI

client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")

response = cjslient.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)。在下一轮对话中,之前轮输出的思维链内容不会被拼接到上下文中,如下图所示:

一分钟带你上手Python调用DeepSeek的API

智能体

创建过AI应用和智能体的小伙伴都知道,都是基于界面可视化页面进行创建和使用。

对于API,实际上在代码层面进行智能体创建,基础的元素包括chat的人设(提示词Prompt)和用户提问两部分。

代码层对话

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

角色设定

先给智能体进行角色定位,就是给智能体加上提示词Prompt。

当然你也可以根据创建智能体一样进行详细设定,这里博主就简单一句话给智能体进行绑定。

一般角色设定的提示词是不会变的,只会在调优或者未能达到自己满意情况下进行提示词调整。

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

用户对话

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

一分钟带你上手Python调用DeepSeek的API

自定义界面

基于上面两个关键参数,就能够定制属于自己的一个智能体对话界面。

前提需要封装好一个api接口方法,传递用户提问的参数,最后返回DeepSeek响应的内容。

后端API

将上面代码设置成路由,可进行Get请求的API接口。

温馨提示:输出内容记得Unicode转义,同时记得设置可跨域-flask_cors。

一分钟带你上手Python调用DeepSeek的API

主要依赖Flask进行路由设置,需要先安装。

from flask import Flask, request, jsonify
from flask_cors import CORS
from openai import OpenAI
import json

app = 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/<user_content>', 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)}), 500

if __name__ == '__main__':
    app.run(debug=True)

一分钟带你上手Python调用DeepSeek的API

前端代码

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

然后进行api接口调用测试效果。

<template>
	<div class="chat-interfacjavascripte"&androidgt;
		<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>

一分钟带你上手Python调用DeepSeek的API

总结

DeepSeek的API对接,绝对是博主目前对接最快的一个,非常简洁清晰,没有那么多花里胡哨的东西和文档,从创建api-key到直接调用api和返回数据不到一分钟就搞定。

当然,后续生成vue对话界面肯定需要自己花点时间多轮对话生成,以及python封装成路由访问的api。同样也是可以使用DS完成。

到此这篇关于一分钟带你上手Python调用DeepSeek的API的文章就介绍到这了,更多相关Python调用DeepSeek API内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于一分钟带你上手Python调用DeepSeek的API的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:http://www.cppcns.com/jiaoben/python/700407.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1153427

相关文章

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用