开发环境

  • 开发环境:MacBook Pro Sonoma 14.5
  • 开发工具:PyCharm 24.3.3

需求整理(提示词)

  • 直接使用PyCharm安装Continue插件,配置好deepseek参数后生成代码
  • 一次:请帮我用python编写一个程序,功能如下:功能分为服务端和客户端(浏览器),服务端启动后,用户使用浏览器提出问题,服务端调用deepseek的api接口进行消息回复。
  • 二次:index页面中的英文变成中文,提问框增加回车提交的功能,上边的问题和回答展示框做成可滚动的,防止问题过多的时候挡住看不见,每个问题发送之后进行计时,接收到回答的时候结束计时,并在问题的旁边展示时间,小字体灰色,单位秒。

服务端代码

  • 这里目录层次上有一些问题,手动调整了一下,使用deepseek生成的data也有问题,只包含了messages参数,没有其他参数。用Kimi在浏览器中生成没有这个问题。
from flask import Flask, request, jsonify, render_template
import requests, os, json

os.chdir(os.path.dirname(os.path.abspath(__file__)))
app = Flask(__name__)

# DeepSeek API的URL和API密钥
DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"
DEEPSEEK_API_KEY = "Your api-key"


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/chat', methods=['POST'])
def chat():
    user_message = request.json.get('message')
    if not user_message:
        return jsonify({"error": "No message provided"}), 400

    # 构造 DeepSeek API 请求
    headers = {
        "Authorization": f"Bearer {DEEPSEEK_API_KEY}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "deepseek-chat",  # 使用 DeepSeek-V3 模型
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": user_message}
        ],
        "stream": False
    }

    # 调用 DeepSeek API
    response = requests.post(DEEPSEEK_API_URL, headers=headers, data=json.dumps(data))
    print(response)
    if response.status_code == 200:
        response_data = response.json()
        assistant_message = response_data['choices'][0]['message']['content']
        return jsonify({"message": assistant_message})
    else:
        return jsonify({"error": "Failed to get response from DeepSeek API"}), 500

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

客户端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>与 DeepSeek 聊天</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        #chat-box {
            width: 100%;
            height: 300px;
            border: 1px solid #ccc;
            padding: 10px;
            margin-bottom: 10px;
            overflow-y: auto; /* 可滚动 */
        }
        #user-input {
            width: calc(100% - 120px);
            padding: 10px;
            margin-bottom: 10px;
        }
        #send-button {
            padding: 10px 20px;
        }
        .message {
            margin: 5px 0;
        }
        .message-time {
            font-size: 12px;
            color: #888;
        }
    </style>
</head>
<body>
    <h1>与 DeepSeek 聊天</h1>
    <div id="chat-box"></div>
    <input type="text" id="user-input" placeholder="请输入您的问题...">
    <button id="send-button">发送</button>

    <script>
        const chatBox = document.getElementById('chat-box');
        const userInput = document.getElementById('user-input');
        const sendButton = document.getElementById('send-button');

        // 添加回车键提交功能
        userInput.addEventListener('keypress', function(event) {
            if (event.key === 'Enter') {
                sendMessage();
            }
        });

        sendButton.addEventListener('click', sendMessage);

        async function sendMessage() {
            const message = userInput.value.trim();
            if (message === '') {
                alert('请输入消息。');
                return;
            }

            // 显示用户消息
            const userMessageElement = document.createElement('div');
            userMessageElement.className = 'message';
            userMessageElement.innerHTML = `<strong>您:</strong> ${message}`;
            chatBox.appendChild(userMessageElement);

            // 开始计时
            const startTime = new Date().getTime();

            // 调用 Flask 服务端
            const response = await fetch('/chat', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ message })
            });

            if (response.ok) {
                const data = await response.json();
                const assistantMessage = data.message;
                const endTime = new Date().getTime();
                const duration = (endTime - startTime) / 1000; // 计算时间,单位秒

                // 显示助手消息和时间
                const assistantMessageElement = document.createElement('div');
                assistantMessageElement.className = 'message';
                assistantMessageElement.innerHTML = `<strong>助手:</strong> ${assistantMessage} <span class="message-time">(${duration.toFixed(2)} 秒)</span>`;
                chatBox.appendChild(assistantMessageElement);
            } else {
                const endTime = new Date().getTime();
                const duration = (endTime - startTime) / 1000; // 计算时间,单位秒

                // 显示错误消息和时间
                const errorMessageElement = document.createElement('div');
                errorMessageElement.className = 'message';
                errorMessageElement.innerHTML = `<strong>助手:</strong> 未收到回复。请稍后再试。 <span class="message-time">(${duration.toFixed(2)} 秒)</span>`;
                chatBox.appendChild(errorMessageElement);
            }

            // 清空输入框并滚动到底部
            userInput.value = '';
            chatBox.scrollTop = chatBox.scrollHeight;
        }
    </script>
</body>
</html>

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐