30分钟零成本打造你的DeepSeek智能聊天机器人

作者: admin | 创建时间: 2025-03-18 16:54:18 文章分类: AI人工智能

文章简介: 为什么选择DeepSeek? 智商碾压:专业领域问答能力媲美GPT-4国产之光:中文理解能力超强,支持多轮复杂对话开发者友好:API简单易用,额度足够个人项目

为什么选择DeepSeek?

  • 智商碾压:专业领域问答能力媲美GPT-4
  • 国产之光:中文理解能力超强,支持多轮复杂对话
  • 开发者友好:API简单易用,额度足够个人项目

三步极速开发指南

一.获取DeepSeek API密钥(1分钟)

1.访问DeepSeek官网 → 注册/登录

DeepSeek官网

2.进入控制台 → 创建新应用 → 复制API Key

获取DeepSeek的ApiKey

3.保存到项目文件中

API_KEY = sk-xxxxxxxxxxxxxxxxxxxxxxxx

记录到代码里

二.搭建AI聊天引擎(15分钟)

1. 创建项目骨架

2. 安装依赖

requirements.txt编写

# requirements.txt
flask>=2.0.0
requests

执行装配

pip install -r requirements.txt

3. 核心代码(app.py)

from flask import Flask, render_template, request, jsonify
import requests
import json
from datetime import datetime
app = Flask(__name__)
# DeepSeek API配置
DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"
#您自己的DeepSeek API_Key
API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxx"
HEADERS = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}"
}
# 输入验证配置
MAX_INPUT_LENGTH = 1000
def validate_input(message):
    """验证用户输入"""
    if len(message) > MAX_INPUT_LENGTH:
        raise ValueError(f"输入内容过长(最大允许{MAX_INPUT_LENGTH}字符)")
    # 可添加其他验证逻辑
    return True
def get_deepseek_response(messages):
    """调用DeepSeek API"""
    payload = {
        "model": "deepseek-chat",
        "messages": messages,
        "temperature": 0.7,
        "stream": False
    }
    try:
        response = requests.post(
            DEEPSEEK_API_URL,
            headers=HEADERS,
            data=json.dumps(payload),
            timeout=30
        )
        response.raise_for_status()
        return response.json()['choices'][0]['message']['content']
    except requests.exceptions.RequestException as e:
        app.logger.error(f"API请求失败: {str(e)}")
        return "服务暂时不可用,请稍后再试"
@app.route('/')
def index():
    return render_template('index.html')
@app.route('/api/chat', methods=['POST'])
def chat_api():
    try:
        # 获取请求数据
        data = request.json
        user_message = data.get('message')
        history = data.get('history', [])
        # 输入验证
        validate_input(user_message)
        # 构建对话历史
        new_message = {"role": "user", "content": user_message}
        updated_history = history + [new_message]
        # 获取AI回复
        ai_response = get_deepseek_response(updated_history)
        # 更新历史记录(保留最近5轮对话)
        updated_history.append({"role": "assistant", "content": ai_response})
        trimmed_history = updated_history[-10:]  # 保留最近5组对话
        return jsonify({
            'status': 'success',
            'ai_response': ai_response,
            'new_history': trimmed_history,
            'timestamp': datetime.now().isoformat()
        })
    except Exception as e:
        app.logger.error(f"处理请求时发生错误: {str(e)}")
        return jsonify({
            'status': 'error',
            'message': str(e)
        }), 500
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

三.打造炫酷聊天界面(10分钟)

1. 前端代码(templates/index.html)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DeepSeek智能助手</title>
    <!-- 样式表 -->
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdn.bootcdn.net/ajax/libs/github-markdown-css/5.2.0/github-markdown.min.css" rel="stylesheet">
    <link href="{{ url_for('static', filename='styles.css') }}" rel="stylesheet">
</head>
<body>
    <div class="container py-4">
        <header class="text-center mb-5">
            <h1 class="display-4">DeepSeek智能助手</h1>
            <p class="text-muted">基于深度求索大语言模型</p>
        </header>
        <div class="card shadow-lg">
            <div class="card-header bg-primary text-white d-flex justify-content-between align-items-center">
                <span>对话窗口</span>
                <button class="btn btn-sm btn-light" id="clearHistory">
                    <i class="bi bi-trash"></i> 清空记录
                </button>
            </div>
            <div class="card-body chat-container" id="chatBox" style="height: 60vh; overflow-y: auto;">
                <!-- 初始化欢迎消息 -->
                <div class="row justify-content-start mb-2">
                    <div class="col-md-8">
                        <div class="message-bubble ai-message">
                            <div class="message-content markdown-body">
                                您好!我是DeepSeek智能助手,有什么可以帮您的吗?
                            </div>
                            <div class="text-end text-muted" style="font-size:0.8em">
                                {{ datetime.datetime.now().strftime("%H:%M") }}
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="card-footer">
                <div class="input-group">
                    <textarea
                        id="messageInput"
                        class="form-control"
                        placeholder="输入您的问题..."
                        rows="1"
                        style="resize: none"
                        aria-label="消息输入框"></textarea>
                    <button class="btn btn-primary" id="sendBtn">
                        <span class="spinner-border spinner-border-sm d-none" role="status"></span>
                        发送
                    </button>
                </div>
                <div class="mt-2 text-muted" style="font-size:0.8em">
                    支持Markdown语法,按Shift+Enter换行
                </div>
            </div>
        </div>
    </div>
    <!-- 脚本 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/bootstrap/5.1.3/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/marked/4.3.0/marked.min.js"></script>
    <script>
        $(document).ready(function() {
            const $chatBox = $('#chatBox');
            const $messageInput = $('#messageInput');
            const $sendBtn = $('#sendBtn');
            let chatHistory = [];
            // 初始化Markdown渲染器
            marked.setOptions({
                breaks: true,
                highlight: function(code) {
                    return hljs.highlightAuto(code).value;
                }
            });
            // 自动调整输入框高度
            function autoResize() {
                $messageInput.height('auto').height($messageInput[0].scrollHeight);
            }
            $messageInput.on('input', autoResize);
            // 添加消息
            function addMessage(content, isUser) {
                const timestamp = new Date().toLocaleTimeString();
                const messageClass = isUser ? 'user-message' : 'ai-message';
                const alignClass = isUser ? 'justify-content-end' : 'justify-content-start';
                const messageHtml = `
                    <div class="row ${alignClass} mb-2">
                        <div class="col-md-8">
                            <div class="message-bubble ${messageClass}">
                                <div class="message-content markdown-body">
                                    ${marked.parse(content)}
                                </div>
                                <div class="text-end text-muted" style="font-size:0.8em">
                                    ${timestamp}
                                </div>
                            </div>
                        </div>
                    </div>
                `;
                $chatBox.append(messageHtml);
                $chatBox.scrollTop($chatBox[0].scrollHeight);
            }
            // 显示加载状态
            function showLoading() {
                const loadingHtml = `
                    <div class="row justify-content-start mb-2">
                        <div class="col-md-8">
                            <div class="message-bubble ai-message">
                                <div class="d-flex align-items-center text-muted">
                                    <div class="spinner-grow spinner-grow-sm me-2"></div>
                                    正在生成回答...
                                </div>
                            </div>
                        </div>
                    </div>
                `;
                $chatBox.append(loadingHtml);
                $chatBox.scrollTop($chatBox[0].scrollHeight);
            }
            // 发送消息
            async function sendMessage() {
                const message = $messageInput.val().trim();
                if (!message) return;
                try {
                    // 禁用输入
                    $messageInput.prop('disabled', true);
                    $sendBtn.prop('disabled', true);
                    $sendBtn.find('.spinner-border').removeClass('d-none');
                    // 添加用户消息
                    addMessage(message, true);
                    showLoading();
                    // 发送请求
                    const response = await $.ajax({
                        url: '/api/chat',
                        method: 'POST',
                        contentType: 'application/json',
                        data: JSON.stringify({
                            message: message,
                            history: chatHistory
                        })
                    });
                    // 移除加载状态
                    $chatBox.children().last().remove();
                    if (response.status === 'success') {
                        addMessage(response.ai_response, false);
                        chatHistory = response.new_history;
                    } else {
                        addMessage(`错误:${response.message}`, false);
                    }
                } catch (error) {
                    const errorMsg = error.responseJSON?.message || '服务器连接失败';
                    addMessage(`系统错误:${errorMsg}`, false);
                } finally {
                    $messageInput.val('').prop('disabled', false).trigger('input');
                    $sendBtn.prop('disabled', false);
                    $sendBtn.find('.spinner-border').addClass('d-none');
                    $messageInput.focus();
                }
            }
            // 事件绑定
            $sendBtn.click(sendMessage);
            $messageInput.on('keydown', function(e) {
                if (e.key === 'Enter' && !e.shiftKey) {
                    e.preventDefault();
                    sendMessage();
                }
            });
            $('#clearHistory').click(function() {
                chatHistory = [];
                $chatBox.children().not(':first').remove();
            });
        });
    </script>
</body>
</html>

2. 运行你的AI应用

flask run --port 5000

访问 http://localhost:5000 即刻体验!

DeepSeek聊天会话

应用场景

  1. 企业智能客服
  2. 教育知识问答
  3. 个人效率助手
  4. 代码调试专家

避坑指南

  1. API调用失败:检查网络是否开启科学上网
  2. 回复速度慢:调整temperature参数(0.1-1.0)
  3. 中文乱码:确保文件编码为UTF-8

重要提醒

  1. 需购买套餐,如果是测试,谨慎使用
  2. 敏感内容需自行添加审核过滤
  3. 部署到公网建议添加用户认证

扫码关注公众号:【程序智享家】 回复【deepseek源码】即可获取源码文件

程序智享家

  1. 技术栈:Flask + Bootstrap + DeepSeek API
  2. 适合人群:Python初学者/全栈开发者/AI爱好者
  3. 开发成本:0元(个人足够玩转!)

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1m3hmi94zl30l

评论

目录

    关闭