DeepSeek API 基础教学
DeepSeek API 基础教学摘要 本文介绍了DeepSeek API的使用方法,主要包含以下内容: API模式:提供两种模式 V3模式(deepseek-chat):适合快速对话和内容生成 R1模式(deepseek-reasoner):适合复杂推理和深度分析 请求格式: 包含模型名称、消息数组、以及可选参数 消息需要按角色(system/user/assistant)组织 核心参数: 通用
DeepSeek API 基础教学
前言
随着AI聊天的兴起,越来越多的网站开始融入 AI聊天功能。AI聊天能够:
- 提供更加便捷的用户指引
- 一定程度上降低客服成本
- 凸显企业技术能力
- 提供更好的用户交互体验
因此,AI 聊天开始成为新一代网页开发的重要需求。本文将着重介绍DeepSeek API的使用方式,并通过完整的代码示例教导大家如何实现 AI 聊天。
DeepSeek API 概述
两种模式介绍
DeepSeek API 提供两种不同的模式:
| 模式 | 标识符 | 主要特点 | 适用场景 |
|---|---|---|---|
| V3 | deepseek-chat |
普通对话,响应快速 | 成本有限、快速响应、内容相对固定 |
| R1 | deepseek-reasoner |
深度推理,思考过程 | 复杂多变、深入分析、内容不固定 |
API 请求格式详解
这是我们发送给 DeepSeek API 的请求格式,以及 DeepSeek API 返回的响应格式。
V3 模式 (deepseek-chat)
{
"model": "deepseek-chat",
"messages": [
{
"role": "system",
"content": "你是一个有用的AI助手"
},
{
"role": "user",
"content": "用户的问题"
}
],
"temperature": 0.7, // 可选:创意度(0-2)
"max_tokens": 2048, // 可选:最大输出长度
"top_p": 1.0, // 可选:核采样(0-1)
"stream": false // 可选:是否流式输出
}
响应格式:
{
"choices": [{
"message": {
"role": "assistant",
"content": "AI的回复内容"
}
}]
}
R1 模式 (deepseek-reasoner)
{
"model": "deepseek-reasoner",
"messages": [
{
"role": "system",
"content": "你是专业的推理助手"
},
{
"role": "user",
"content": "复杂的推理问题"
}
],
"max_tokens": 32000, // 可选:支持更大值
"stream": false // 可选:是否流式输出
}
响应格式:
{
"choices": [{
"message": {
"role": "assistant",
"content": "最终答案",
"reasoning_content": "详细思考过程"
}
}]
}
两种模式对比
| 特性 | V3 (deepseek-chat) | R1 (deepseek-reasoner) |
|---|---|---|
| 输出长度 | 默认 4K,最大 8K | 默认 32K,最大 64K |
| 请求参数 | temperature、top_p、presence_penalty、frequency_penalty等 |
仅支持 max_tokens, stream |
| 响应特点 | 直接回答 | 包含 reasoning_content 详细思考过程 |
| 适用场景 | 快速对话、内容生成 | 复杂推理、深度分析 |
以下是参数配置指南
Temperature 参数建议
| 场景 | 推荐温度值 |
|---|---|
| 代码生成/数学解题 | 0.0 |
| 数据抽取/分析 | 1.0 |
| 通用对话 | 1.3 |
| 翻译 | 1.3 |
| 创意写作/诗歌 | 1.5 |
消息格式说明
完整的 messages 数组应该包含:
[
{
"role": "system",
"content": "你是一个专业的编程助手,善于解释技术概念。"
},
{
"role": "user",
"content": "什么是API?"
},
{
"role": "assistant",
"content": "API是应用程序编程接口的缩写..."
},
{
"role": "user",
"content": "那DeepSeek API有什么特点?"
}
]
角色说明:
system:系统提示词,定义AI的角色和行为user:用户输入的问题或指令assistant:AI之前的回复(用于维持对话历史)
核心参数详解
通用参数(V3 & R1)
| 参数名 | 类型 | 说明 | 是否必填 |
|---|---|---|---|
model |
string | 模型名称:deepseek-chat 或 deepseek-reasoner |
必填 |
messages |
array | 包含对话历史的对象数组 {role, content} |
必填 |
max_tokens |
integer | AI 回复生成的最大 token 数,控制回复长度 | 可选 |
stream |
boolean | 是否启用流式响应,默认为 false |
可选 |
注意:
max_tokens指的是输出的最大长度,输入和输出的总 token 不能超过模型上限。
V3 模式专属参数
temperature (float, 可选)
控制输出的随机性和创造性:
- 值越低(接近 0.0):输出越确定、保守、一致
- 值越高(接近 2.0):输出越随机、多样、有创意
- 默认值:1.0
- 取值范围:0.0 - 2.0
{
"temperature": 0.7, // 平衡创造性和一致性
// 其他参数...
}
top_p (float, 可选)
核采样(Nucleus Sampling)参数:
- 作用:控制从累积概率超过
top_p的最小 token 集合中采样 - 取值范围:0.0 - 1.0
- 示例:
top_p=0.9意味着只考虑概率质量占前 90% 的 token - 默认值:1.0(即考虑所有 token)
重要提示:通常建议只更改
temperature或top_p中的一个,而非同时更改。
presence_penalty (float, 可选)
存在惩罚参数:
- 作用:根据 token 是否已在文本中出现过来降低其概率
- 效果:正值鼓励模型使用新词汇,避免重复
- 取值范围:-2.0 到 2.0
- 默认值:0
{
"presence_penalty": 0.6, // 鼓励使用新词汇
// 其他参数...
}
frequency_penalty (float, 可选)
频率惩罚参数:
- 作用:根据 token 在文本中已出现的频率降低其概率
- 效果:正值鼓励模型使用低频词汇,减少重复表达
- 取值范围:-2.0 到 2.0
- 默认值:0
了解到上述内容后,便能开始编写代码,实现一个简单聊天页面
基础版本
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>简单DeepSeek聊天</title>
</head>
<body>
<div id="messages"></div>
<input type="text" id="input" placeholder="输入消息...">
<button onclick="sendMessage()">发送</button>
<script>
const API_KEY = '你的api key';
const API_URL = 'https://api.deepseek.com/chat/completions';
let messages = [
{ role: 'system', content: '用中文回复' }
];
async function sendMessage() {
const input = document.getElementById('input');
const message = input.value.trim();
if (!message) return;
// 显示用户消息
addMessage('用户: ' + message);
messages.push({ role: 'user', content: message });
input.value = '';
// 调用API
try {
const response = await fetch(API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
},
body: JSON.stringify({
model: 'deepseek-chat',
messages: messages
})
});
const data = await response.json();
const aiMessage = data.choices[0].message.content;
addMessage('AI: ' + aiMessage);
messages.push({ role: 'assistant', content: aiMessage });
} catch (error) {
addMessage('错误: ' + error.message);
}
}
function addMessage(text) {
const div = document.createElement('div');
div.textContent = text;
document.getElementById('messages').appendChild(div);
}
</script>
</body>
</html>
执行流程解析
1. 初始化阶段
const API_KEY = '你的api key';
const API_URL = 'https://api.deepseek.com/chat/completions';
let messages = [
{ role: 'system', content: '用中文回复' }
];
流程说明:
- API配置:设置DeepSeek API的认证密钥和请求端点
- 消息历史初始化:创建包含系统提示词的消息数组,这是AI的"人设"定义
- 系统角色:
system角色的消息告诉AI应该如何表现
2. 用户输入处理
const input = document.getElementById('input');
const message = input.value.trim();
if (!message) return;
流程说明:
- 获取输入:从输入框获取用户输入的文本
- 输入验证:使用
trim()去除前后空格,检查是否为空 - 早期返回:如果输入为空,直接返回,避免无效的API调用
3. 消息显示与状态更新
addMessage('用户: ' + message);
messages.push({ role: 'user', content: message });
input.value = '';
流程说明:
- 即时反馈:立即在界面上显示用户输入的消息,提供即时反馈
- 历史记录:将用户消息加入
messages数组,维持对话上下文 - 界面重置:清空输入框,准备下一次输入
4. API请求构建
const response = await fetch(API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
},
body: JSON.stringify({
model: 'deepseek-chat',
messages: messages
})
});
流程说明:
- HTTP方法:使用POST方法向API发送请求
- 请求头设置:
Content-Type:指定请求体为JSON格式Authorization:使用Bearer token认证方式
- 请求体构建:
model:选择deepseek-chat模式(V3版本)messages:发送完整的对话历史,包含system、user等角色消息
5. API响应处理
const data = await response.json();
const aiMessage = data.choices[0].message.content;
addMessage('AI: ' + aiMessage);
messages.push({ role: 'assistant', content: aiMessage });
流程说明:
- 响应解析:将API返回的JSON数据解析为JavaScript对象
- 内容提取:从响应结构中提取AI的回复内容
choices[0]:获取第一个(也是唯一一个)回复选项message.content:提取实际的回复文本
- 界面更新:将AI回复显示在聊天界面上
- 历史维护:将AI回复加入消息历史,保持对话连续性
6. 错误处理机制
try {
// API调用逻辑
} catch (error) {
addMessage('错误: ' + error.message);
}
流程说明:
- 异常捕获:使用try-catch包装API调用,处理可能的网络错误
- 错误显示:将错误信息显示给用户,而不是让应用崩溃
- 用户友好:提供有意义的错误提示,帮助用户了解问题所在
7. 消息显示功能
function addMessage(text) {
const div = document.createElement('div');
div.textContent = text;
document.getElementById('messages').appendChild(div);
}
流程说明:
- DOM操作:动态创建新的div元素来显示消息
- 内容设置:使用
textContent安全地设置文本内容,避免XSS攻击 - 界面更新:将新消息添加到消息容器中,实现聊天记录的累积显示
完整执行时序图
用户输入 → 输入验证 → 显示用户消息 → 更新消息历史 →
构建API请求 → 发送请求 → 等待响应 → 解析响应 →
显示AI回复 → 更新消息历史 → 准备下一轮对话
进阶功能:流式传输
什么是流式传输?
流式传输可以让用户实时看到AI的回复过程,大大提升用户体验:
- 普通模式:发送请求 → 等待完整回复 → 一次性显示
- 流式模式:发送请求 → 实时接收片段 → 逐字显示(类似打字机效果)
流式传输实现
async function sendStreamMessage(userMessage) {
try {
const response = await fetch(API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
},
body: JSON.stringify({
model: 'deepseek-chat',
messages: [...messages, { role: 'user', content: userMessage }],
stream: true // 启用流式传输
})
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
let fullResponse = '';
// 创建AI消息容器
const aiMessageDiv = addMessage('', 'ai');
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
const lines = chunk.split('\n');
for (const line of lines) {
if (line.startsWith('data: ')) {
const data = line.slice(6);
if (data === '[DONE]') continue;
try {
const parsed = JSON.parse(data);
const content = parsed.choices[0]?.delta?.content;
if (content) {
fullResponse += content;
// 实时更新界面显示
aiMessageDiv.textContent = fullResponse;
// 保持滚动到底部
document.getElementById('messages').scrollTop = document.getElementById('messages').scrollHeight;
}
} catch (e) {
// 忽略JSON解析错误
}
}
}
}
// 将完整回复加入消息历史
messages.push({ role: 'assistant', content: fullResponse });
return fullResponse;
} catch (error) {
console.error('流式传输错误:', error);
throw error;
}
}
关键技术点解析
stream: true:在请求体中启用流式传输getReader():获取响应流的读取器TextDecoder:将二进制数据解码为文本- SSE格式解析:处理服务器发送事件格式的数据
- 实时界面更新:每接收到新内容立即更新显示
总结
通过本教程,我们学习了:
- DeepSeek API的两种模式及其特点
- 完整的API请求和响应格式
- 参数配置的最佳实践
- 基础聊天功能的实现
- 流式传输
DeepSeek API为开发者提供了强大而灵活的AI对话能力。无论是简单的客服机器人还是复杂的推理助手,都能通过合理的参数配置和代码实现来满足需求。
希望这个教程能帮助你快速上手DeepSeek API,开发出更好的AI应用!
重要提示:
- API密钥保护:生产环境中API Key不应直接暴露给前端,建议通过后端代理调用
- 内容合规过滤:必须实现关键词过滤和内容审核机制,AI可能生成违法违规、敏感或不当内容。
- 访问频率控制:实施API调用频率限制,防止滥用和恶意攻击
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)