使用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'), ]
前端代码
AI对话助手(Markdown支持版) :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; }
AI对话助手
{% for message in messages %} {% if message.role == 'user' %} 👤 用户 {% else %} 🤖 助手 {% endif %} { message.content|escape }}" data-raw="{{ message.content|escape }}"> {{ message.content|safe }} {% if message.reasoning %} 💡 思考过程 { message.reasoning|escape }}" data-raw="{{ message.reasoning|escape }}"> {{ message.reasoning|safe }} {% endif %} {% endfor %} {% csrf_token %} 发送 // 初始化配置 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);迁移数据库
python manage.py makemigrations
python manage.py migrate
五、效果展示
六、将模型切换为deepseek
切换模型只要修改model="qwen2.5-14b-instruct-1m"为deepseek.
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。