Aigc 本地接入deepseek-api
【代码】Aigc 本地接入deepseek-api。
·
开发环境
- 开发环境: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>
更多推荐
所有评论(0)