python使用django调用deepseek api搭建ai网站

 更新时间:2025年02月26日 10:23:50   作者:陈王卜  
DeepSeek是一家人工智能公司,致力于通过创新的技术和算法,推动人工智能领域的发展,本文给大家介绍了python使用django调用deepseek api搭建ai网站,文中有相关的代码示例供大家参考,感兴趣的小伙伴跟着小编一起来看看吧

一、deepseek简介

DeepSeek是一家人工智能公司,专注于开发先进的人工智能模型和技术。以下是关于DeepSeek的一些详细介绍:

1.公司背景

DeepSeek由杭州深度求索人工智能基础技术研究有限公司开发,致力于通过创新的技术和算法,推动人工智能领域的发展。

2.技术与模型

  • DeepSeek-V3:这是DeepSeek开发的一个大型语言模型,具有超过600B的参数,在多项性能指标上与国际顶尖模型相当。
  • DeepSeek-R1:这是DeepSeek的第一代推理模型,通过大规模强化学习(RL)进行训练,展示出了在推理任务上的优异性能。
  • DeepSeek-R1-Distill:这些是从DeepSeek-R1中蒸馏出的小模型,具有更好的性能和效率,适合在资源受限的环境中使用。

3.应用领域

  • 自然语言处理:DeepSeek的模型在文本生成、知识问答、推理等任务中表现出色,能够为用户提供高质量的语言交互服务。
  • 智能助手:DeepSeek开发了AI智能助手,可用于搜索、写作、阅读、解题、翻译等多种任务,帮助用户提高效率。

4.优势与特点

  • 成本优势:DeepSeek的模型训练成本低,调用接口成本也较低,具有较高的性价比。
  • 中文处理能力强:对中文语法、成语、文化背景理解更深入,在中文文本生成、摘要、情感分析等任务中表现自然。
  • 开源优势:DeepSeek-R1模型权重和技术报告开源,便于开发者二次开发和创新。

5.产品与服务

  • DeepSeek API:提供与OpenAI兼容的API,方便开发者将DeepSeek的模型集成到自己的应用中。
  • DeepSeek App:提供AI智能助手应用,可在App Store上下载,支持多种功能,如智能对话、搜索、写作等。

二、获取apikey

deepseek官方的api暂时无法充值,我使用的是阿里云的百炼平台的deepseek v1模型,阿里云百炼平台注册送百万token,可以白嫖。打开百炼控制台,开通服务,随便选择一个模型,点击右上角的“查看我的apikey”,获取apikey。

三、创建django项目,并startapp

使用django创建一个新的项目,python manage.py startapp chat新建app作为主要代码文件夹。

四、编写代码

chat\views.py

from django.shortcuts import render
from openai import OpenAI
import os
from django.conf import settings
 
 
def get_ai_response(messages):
client = OpenAI(
api_key="xxx",//填写apikey
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
 
 
try:
    completion = client.chat.completions.create(
        model="qwen2.5-14b-instruct-1m",
        messages=messages
    )
    return {
        'content': completion.choices[0].message.content,
        'reasoning': getattr(completion.choices[0].message, 'reasoning_content', '')
    }
except Exception as e:
    return {
        'content': f"发生错误:{str(e)}",
        'reasoning': ''
    }
 
def chat_view(request):
if 'messages' not in request.session:
request.session['messages'] = []
 
 
if request.method == 'POST':
    user_message = request.POST.get('message', '')
    if user_message:
        request.session['messages'].append({'role': 'user', 'content': user_message})
 
        response = get_ai_response(request.session['messages'])
 
        request.session['messages'].append({
            'role': 'assistant',
            'content': response['content'],
            'reasoning': response['reasoning']
        })
 
        request.session.modified = True
 
return render(request, 'chat.html', {
    'messages': request.session['messages']
})

要将api_key="xxx"中xxx替换为自己的apikey。

urls.py

from django.contrib import admin
from django.urls import path
from chat import views
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.chat_view, name='chat'),
]

前端代码

<!DOCTYPE html>
<html>
<head>
    <title>AI对话助手(Markdown支持版)</title>
    <!-- Markdown 渲染依赖 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/github-markdown-css@5.2.0/github-markdown.min.css" rel="external nofollow" >
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/github-dark.min.css" rel="external nofollow" >
    <style>
        :root {
            --user-color: #1a73e8;
            --assistant-color: #0b8043;
        }
        body {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
            background-color: #f8f9fa;
        }
        .chat-container {
            background: white;
            border-radius: 12px;
            box-shadow: 0 2px 8px rgba(0,0,0,0.1);
            padding: 20px;
            margin-bottom: 20px;
        }
        .message {
            margin: 15px 0;
            padding: 12px 16px;
            border-radius: 8px;
        }
        .user-message {
            background-color: #e8f0fe;
            border: 1px solid var(--user-color);
            margin-left: 30px;
        }
        .assistant-message {
            background-color: #e6f4ea;
            border: 1px solid var(--assistant-color);
            margin-right: 30px;
        }
        .role-label {
            font-weight: 500;
            margin-bottom: 8px;
            display: flex;
            align-items: center;
            gap: 8px;
        }
        .role-label::before {
            content: '';
            display: inline-block;
            width: 12px;
            height: 12px;
            border-radius: 50%;
        }
        .user-message .role-label::before {
            background: var(--user-color);
        }
        .assistant-message .role-label::before {
            background: var(--assistant-color);
        }
        form {
            display: flex;
            gap: 10px;
            margin-top: 20px;
        }
        input[type="text"] {
            flex: 1;
            padding: 12px;
            border: 1px solid #ddd;
            border-radius: 8px;
            font-size: 16px;
        }
        button {
            padding: 12px 24px;
            background-color: var(--user-color);
            color: white;
            border: none;
            border-radius: 8px;
            cursor: pointer;
            transition: background 0.2s;
        }
        button:hover {
            background-color: #1557b0;
        }
        .markdown-body pre {
            padding: 16px;
            border-radius: 8px;
            overflow-x: auto;
        }
        .reasoning-box {
            margin-top: 12px;
            padding: 12px;
            background: #fff8e5;
            border-left: 4px solid #ffd700;
            border-radius: 4px;
        }
    </style>
</head>
<body>
    <div class="chat-container">
        <h1 style="color: var(--user-color); text-align: center;">AI对话助手</h1>
 
        <div class="messages">
            {% for message in messages %}
                <div class="message {% if message.role == 'user' %}user-message{% else %}assistant-message{% endif %}">
                    <div class="role-label">
                        {% if message.role == 'user' %}
                            👤 用户
                        {% else %}
                            🤖 助手
                        {% endif %}
                    </div>
                    <!-- Markdown 内容容器 -->
                    <div class="markdown-body"
                         data-markdown="{{ message.content|escape }}"
                         data-raw="{{ message.content|escape }}">
                        {{ message.content|safe }}
                    </div>
 
                    {% if message.reasoning %}
                    <div class="reasoning-box">
                        <div class="reasoning-label">💡 思考过程</div>
                        <div class="markdown-body"
                             data-markdown="{{ message.reasoning|escape }}"
                             data-raw="{{ message.reasoning|escape }}">
                            {{ message.reasoning|safe }}
                        </div>
                    </div>
                    {% endif %}
                </div>
            {% endfor %}
        </div>
 
        <form method="post">
            {% csrf_token %}
            <input type="text" name="message" placeholder="请输入您的问题..." required autofocus>
            <button type="submit">发送</button>
        </form>
    </div>
 
    <!-- 依赖库 -->
    <script src="https://cdn.jsdelivr.net/npm/marked@12.0.0/lib/marked.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/dompurify@3.0.5/dist/purify.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js"></script>
 
    <script>
        // 初始化配置
        marked.setOptions({
            breaks: true,
            highlight: (code, lang) => {
                const language = hljs.getLanguage(lang) ? lang : 'plaintext';
                return hljs.highlight(code, { language }).value;
            }
        });
 
        // Markdown 渲染函数
        const renderMarkdown = () => {
            document.querySelectorAll('.markdown-body').forEach(container => {
                try {
                    // 优先使用 data-markdown 属性
                    const raw = container.dataset.markdown || container.dataset.raw;
                    const clean = DOMPurify.sanitize(raw, {
                        ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'code', 'pre', 'blockquote',
                                     'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'a', 'p', 'br', 'hr'],
                        ALLOWED_ATTR: ['href', 'target']
                    });
                    container.innerHTML = marked.parse(clean);
                } catch (e) {
                    console.error('Markdown渲染失败:', e);
                    container.innerHTML = container.dataset.raw;
                }
            });
 
            // 触发代码高亮
            hljs.highlightAll();
        };
 
        // 确保依赖加载完成后执行
        const checkDependencies = () => {
            if (window.marked && window.DOMPurify && window.hljs) {
                renderMarkdown();
            } else {
                setTimeout(checkDependencies, 100);
            }
        };
 
        // 启动渲染流程
        document.addEventListener('DOMContentLoaded', checkDependencies);
    </script>
</body>
</html>

迁移数据库

python manage.py makemigrations
python manage.py migrate

五、效果展示

六、将模型切换为deepseek

切换模型只要修改model="qwen2.5-14b-instruct-1m"为deepseek.

到此这篇关于python使用django调用deepseek api搭建ai网站的文章就介绍到这了,更多相关django deepseek api搭建ai网站内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于logstash实现日志文件同步elasticsearch

    基于logstash实现日志文件同步elasticsearch

    这篇文章主要介绍了基于logstash实现日志文件同步elasticsearch,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • python加载DLL时出错的解决

    python加载DLL时出错的解决

    在Python中加载外部DLL文件时,常见的错误是OSError,本文就来介绍一下,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Python使用Redis实现作业调度系统(超简单)

    Python使用Redis实现作业调度系统(超简单)

    Redis作为内存数据库的一个典型代表,已经在很多应用场景中被使用,这里仅就Redis的pub/sub功能来说说怎样通过此功能来实现一个简单的作业调度系统。这里只是想展现一个简单的想法,所以还是有很多需要考虑的东西没有包括在这个例子中,比如错误处理,持久化等
    2016-03-03
  • Python pytest.main()运行测试用例

    Python pytest.main()运行测试用例

    这篇文章主要介绍了Python pytest.main()运行测试用例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Python Flask实现图片验证码与邮箱验证码流程详细讲解

    Python Flask实现图片验证码与邮箱验证码流程详细讲解

    这篇文章主要介绍了如何利用Python生成随机的图片验证码与邮箱验证码,验证码是一种区分用户是计算机还是人的公共全自动程序,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起试试
    2022-10-10
  • python中关于日期时间处理的问答集锦

    python中关于日期时间处理的问答集锦

    python中有关日期时间处理的问答集锦,有需要的朋友不妨参考下
    2013-03-03
  • 使用Python生成你的LaTeX公式基础使用

    使用Python生成你的LaTeX公式基础使用

    这篇文章主要介绍了使用Python生成你的LaTeX公式基础使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python中使用pymysql连接MySQL数据库进行数据查询

    Python中使用pymysql连接MySQL数据库进行数据查询

    在当今数字化时代,数据的重要性不言而喻,而数据库作为数据存储与管理的核心工具,在各类应用系统中扮演着关键角色,Python 作为一种广泛使用的编程语言,提供了多种与数据库交互的方式,其中 pymysql 库是连接 MySQL 数据库的常用选择之一,需要的朋友可以参考下
    2025-01-01
  • 基于Django ORM、一对一、一对多、多对多的全面讲解

    基于Django ORM、一对一、一对多、多对多的全面讲解

    今天小编就为大家分享一篇基于Django ORM、一对一、一对多、多对多的全面讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 对pytorch网络层结构的数组化详解

    对pytorch网络层结构的数组化详解

    今天小编就为大家分享一篇对pytorch网络层结构的数组化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论