为什么选择DeepSeek?
- 智商碾压:专业领域问答能力媲美GPT-4
- 国产之光:中文理解能力超强,支持多轮复杂对话
- 开发者友好:API简单易用,额度足够个人项目
三步极速开发指南
一.获取DeepSeek API密钥(1分钟)
1.访问DeepSeek官网 → 注册/登录

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

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 即刻体验!

应用场景
- 企业智能客服
- 教育知识问答
- 个人效率助手
- 代码调试专家
避坑指南
- API调用失败:检查网络是否开启科学上网
- 回复速度慢:调整temperature参数(0.1-1.0)
- 中文乱码:确保文件编码为UTF-8
重要提醒
- 需购买套餐,如果是测试,谨慎使用
- 敏感内容需自行添加审核过滤
- 部署到公网建议添加用户认证
扫码关注公众号:【程序智享家】 回复【deepseek源码】即可获取源码文件

- 技术栈:Flask + Bootstrap + DeepSeek API
- 适合人群:Python初学者/全栈开发者/AI爱好者
- 开发成本:0元(个人足够玩转!)
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1m3hmi94zl30l
评论