这篇文章上次修改于 273 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
DeepSeek 官方提示词完整版(建议收藏)
关注后,回复“面试”
即可获取一份大厂面试的大礼包
2025年金三银四限量版pdf
来源:https://api-docs.deepseek.com/zh-cn/prompt-library/
上一篇干货:简化Maven项目依赖:优雅去除未使用Jar包
DeepSeek 官网发布了 13 个常用的提示词:
具体链接如下:
https://api-docs.deepseek.com/zh-cn/prompt-library/
官方提示词主要针对的是对AI有一定了解,甚至有一定编程能力的人,为更好的方便大家阅读,请先仔细阅读指引内容。
阅读指引
提示词:这部分是指用户发送给DeepSeek的指令,包含SYSTEM指令和USER指令。
SYSTEM指令:指提前写好的系统指令,让DeepSeek接下来扮演的角色。
USER指令:指直接发送给DeepSeek,让其回答这部分指令内容,如果有SYSTEM指令,DeepSeek会基于SYSTEM指令来回答。
DeepSeek样例输出:这部分是DeepSeek根据USER指令来回答的样例内容
API代码模式:这部分是为开发人员提供的代码样例,非开发人员可忽略
一、代码改写
对代码进行修改,来实现纠错、注释、调优等。
提示词
USER指令
下面这段的代码的效率很低,且没有处理边界情况。请先解释这段代码的问题与解决方法,然后进行优化:
def fib(n):
if n <= 2:
return n
return fib(n-1) + fib(n-2)
DeepSeek样例输出
问题分析
这段代码实现了一个递归的斐波那契数列计算函数 fib(n)。虽然代码简洁,但它存在以下几个问题:
重复计算:递归调用会导致大量的重复计算。例如,计算 fib(5) 时,fib(3) 和 fib(2) 会被多次计算,导致效率低下。
边界情况处理不完善:虽然代码中处理了 n <= 2 的情况,但没有处理 n < 0 的情况。对于负数输入,函数会返回不正确的结果。
递归深度限制:对于较大的 n,递归深度可能会超过 Python 的默认递归深度限制,导致 RecursionError。
解决方法
使用记忆化(Memoization):通过缓存已经计算过的斐波那契数列值,避免重复计算,提高效率。
处理边界情况:增加对 n < 0 的检查,并返回适当的错误信息或默认值。
使用迭代代替递归:递归虽然简洁,但在处理大规模数据时效率较低。可以使用迭代方法来计算斐波那契数列,避免递归深度限制。
优化后的代码
方法一:记忆化递归
def fib(n, memo={}):
if n < 0:
raise ValueError("Input must be a non-negative integer")
if n <= 2:
return 1
if n in memo:
return memo[n]
memo[n] = fib(n-1, memo) + fib(n-2, memo)
return memo[n]
方法二:迭代法
def fib(n):
if n < 0:
raise ValueError("Input must be a non-negative integer")
if n <= 2:
return 1
a, b = 1, 1
for _ in range(3, n+1):
a, b = b, a + b
return b
解释
记忆化递归:
使用一个字典 memo 来存储已经计算过的斐波那契数列值。
在每次递归调用前,先检查 memo 中是否已经有结果,如果有则直接返回,避免重复计算。
处理了 n < 0 的情况,抛出 ValueError。
迭代法:
使用两个变量 a 和 b 来保存前两个斐波那契数列值。
通过循环从 3 到 n 计算斐波那契数列值,避免了递归调用,提高了效率。
同样处理了 n < 0 的情况,抛出 ValueError。
总结
优化后的代码不仅提高了效率,还完善了边界情况的处理。记忆化递归和迭代法都是有效的优化手段,具体选择哪种方法取决于具体需求和场景。
API代码模式
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepseek.com/",
api_key="<YOUR_API_KEY>"
)
completion = client.chat.completions.create(
model="deepseek-chat",
messages=[
{
"role": "user",
"content": "下面这段的代码的效率很低,且没有处理边界情况。请先解释这段代码的问题与解决方法,然后进行优化:n
ndef fib(n):n if n <= 2:n return nn return fib(n-1) + fib(n-2)n
"
}
]
)
print(completion.choices[0].message.content)
二、代码解释
对代码进行解释,来帮助理解代码内容。
提示词
USER指令
请解释下面这段代码的逻辑,并说明完成了什么功能:
// weight数组的大小 就是物品个数
for(int i = 1; i < weight.size(); i++) { // 遍历物品
for(int j = 0; j <= bagweight; j++) { // 遍历背包容量
if (j < weight[i]) dpi = dpi - 1;
else dpi = max(dpi - 1, dpi - 1] + value[i]);
}
}
DeepSeek样例输出
这段代码实现了一个经典的动态规划问题,通常用于解决“0/1背包问题”。下面是对代码逻辑的详细解释:
代码逻辑解释
初始化与遍历:
weight 数组表示每个物品的重量。
value 数组表示每个物品的价值。
bagweight 表示背包的最大容量。
dp 是一个二维数组,dpi 表示前 i 个物品在背包容量为 j 时的最大价值。
外层循环:
for(int i = 1; i < weight.size(); i++) { // 遍历物品
外层循环从第1个物品开始遍历到最后一个物品(weight.size())。
内层循环:
for(int j = 0; j <= bagweight; j++) { // 遍历背包容量
内层循环从背包容量为0开始遍历到背包的最大容量(bagweight)。
状态转移方程:
if (j < weight[i]) dpi = dpi - 1;
else dpi = max(dpi - 1, dpi - 1] + value[i]);
如果当前背包容量 j 小于第 i 个物品的重量 weight[i],则无法放入该物品,状态保持不变,即 dpi = dpi - 1。
否则,可以选择放入或不放入第 i 个物品:
不放入第 i 个物品时,最大价值为 dpi - 1。
放入第 i 个物品时,最大价值为 dpi - 1] + value[i],即在放入物品前的最大价值加上当前物品的价值。
取两者的最大值,即 dpi = max(dpi - 1, dpi - 1] + value[i])。
功能说明
这段代码的功能是计算在给定背包容量 bagweight 下,选择不同物品组合所能获得的最大价值。具体来说,它通过动态规划的方法,逐步构建一个二维数组 dp,其中 dpi 表示前 i 个物品在背包容量为 j 时的最大价值。最终,dpweight.size() - 1 就是所求的最大价值。
总结
输入:weight 数组(物品重量),value 数组(物品价值),bagweight(背包容量)。
输出:在背包容量为 bagweight 时,选择不同物品组合所能获得的最大价值。
算法:动态规划,通过构建二维数组 dp 来记录每一步的最优解。
API代码模式
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepseek.com/",
api_key="<YOUR_API_KEY>"
)
completion = client.chat.completions.create(
model="deepseek-chat",
messages=[
{
"role": "user",
"content": "请解释下面这段代码的逻辑,并说明完成了什么功能:n
n// weight数组的大小 就是物品个数nfor(int i = 1; i < weight.size(); i++) { // 遍历物品n for(int j = 0; j <= bagweight; j++) { // 遍历背包容量n if (j < weight[i]) dpi = dpi - 1;n else dpi = max(dpi - 1, dpi - 1] + value[i]);n }n}n
"
}
]
)
print(completion.choices[0].message.content)
三、代码生成
让模型生成一段完成特定功能的代码。
提示词
USER指令
请帮我用 HTML 生成一个五子棋游戏,
所有代码都保存在一个 HTML 中。
DeepSeek样例输出
当然!下面是一个简单的五子棋游戏的 HTML 代码。这个代码包含了一个基本的五子棋棋盘,玩家可以通过点击棋盘上的格子来下棋。游戏会检测是否有玩家获胜。
<!DOCTYPE html>
<html lang="zh-CN">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<div id="board">