【大模型】深度解读 DeepSeek - R1 提示词

在人工智能的应用中,提示词是与模型高效沟通、获取理想结果的关键“密码”。今天,我们就来深入剖析DeepSeek - R1的提示词库,探寻其中丰富多样的实用功能。

DeepSeek - R1提示词库概览

DeepSeek - R1的提示词库应用广泛,涵盖编程、文本处理、创意写作等多个领域,为用户提供了丰富的使用场景。

编程领域

  1. 代码改写:对于开发者而言,代码改写功能极为实用。比如,你写了一段Python代码用于计算两个数的和,但代码中存在变量命名不规范的问题。原始代码如下:
def fib(n):
    if n <= 2:
        return n
    return fib(n-1) + fib(n-2)

使用“下面这段的代码的效率很低,且没有处理边界情况。请先解释这段代码的问题与解决方法,然后进行优化:”的提示词,模型输出:

问题分析

这段代码实现了一个递归的斐波那契数列计算函数 fib(n)。虽然代码简洁,但它存在以下几个问题:

  1. 重复计算:递归调用会导致大量的重复计算。例如,计算 fib(5) 时,fib(3)fib(2) 会被多次计算,导致效率低下。

  2. 边界情况处理不完善:虽然代码中处理了 n <= 2 的情况,但没有处理 n < 0 的情况。对于负数输入,函数会返回不正确的结果。

  3. 递归深度限制:对于较大的 n,递归深度可能会超过 Python 的默认递归深度限制,导致 RecursionError

解决方法

  1. 使用记忆化(Memoization):通过缓存已经计算过的斐波那契数列值,避免重复计算,提高效率。

  2. 处理边界情况:增加对 n < 0 的检查,并返回适当的错误信息或默认值。

  3. 使用迭代代替递归:递归虽然简洁,但在处理大规模数据时效率较低。可以使用迭代方法来计算斐波那契数列,避免递归深度限制。

优化后的代码

方法一:记忆化递归
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

解释

  1. 记忆化递归

    • 使用一个字典 memo 来存储已经计算过的斐波那契数列值。
    • 在每次递归调用前,先检查 memo 中是否已经有结果,如果有则直接返回,避免重复计算。
    • 处理了 n < 0 的情况,抛出 ValueError
  2. 迭代法

    • 使用两个变量 ab 来保存前两个斐波那契数列值。
    • 通过循环从 3n 计算斐波那契数列值,避免了递归调用,提高了效率。
    • 同样处理了 n < 0 的情况,抛出 ValueError

总结

优化后的代码不仅提高了效率,还完善了边界情况的处理。记忆化递归和迭代法都是有效的优化手段,具体选择哪种方法取决于具体需求和场景。

这样,代码不仅变量命名更规范,还添加了注释,可读性大大提高。

从上面可以看出,你如果想要DeepSeek模型改写或优化代码,你的提示词必须是:现状评估(效率低 + 未处理边界情况)+ 需求(解释问题及解决方法 + 优化代码),所以以后可以用这个万能公式去让DeepSeek优化你的代码。

  1. 代码解释:当面对复杂代码时,理解其逻辑往往颇具挑战。假设有这样一段Python代码:
// weight数组的大小 就是物品个数
for(int i = 1; i < weight.size(); i++) { // 遍历物品
    for(int j = 0; j <= bagweight; j++) { // 遍历背包容量
        if (j < weight[i]) dp[i][j] = dp[i - 1][j];
        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
    }
}

使用“请解释下面这段代码的逻辑,并说明完成了什么功能:”的提示词,模型会解释道:

这段代码实现了一个经典的动态规划问题,通常用于解决“0/1背包问题”。下面是对代码逻辑的详细解释:

代码逻辑解释

  1. 初始化与遍历

    • weight 数组表示每个物品的重量。
    • value 数组表示每个物品的价值。
    • bagweight 表示背包的最大容量。
    • dp 是一个二维数组,dp[i][j] 表示前 i 个物品在背包容量为 j 时的最大价值。
  2. 外层循环cpp for(int i = 1; i < weight.size(); i++) { // 遍历物品

    • 外层循环从第1个物品开始遍历到最后一个物品(weight.size())。
  3. 内层循环cpp for(int j = 0; j <= bagweight; j++) { // 遍历背包容量

    • 内层循环从背包容量为0开始遍历到背包的最大容量(bagweight)。
  4. 状态转移方程cpp if (j < weight[i]) dp[i][j] = dp[i - 1][j]; else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);

    • 如果当前背包容量 j 小于第 i 个物品的重量 weight[i],则无法放入该物品,状态保持不变,即 dp[i][j] = dp[i - 1][j]
    • 否则,可以选择放入或不放入第 i 个物品:
      • 不放入第 i 个物品时,最大价值为 dp[i - 1][j]
      • 放入第 i 个物品时,最大价值为 dp[i - 1][j - weight[i]] + value[i],即在放入物品前的最大价值加上当前物品的价值。
      • 取两者的最大值,即 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])

功能说明

这段代码的功能是计算在给定背包容量 bagweight下,选择不同物品组合所能获得的最大价值。具体来说,它通过动态规划的方法,逐步构建一个二维数组 dp,其中 dp[i][j] 表示前i 个物品在背包容量为 j 时的最大价值。最终,dp[weight.size() - 1][bagweight] 就是所求的最大价值。

总结

  • 输入weight 数组(物品重量),value 数组(物品价值),bagweight(背包容量)。
  • 输出:在背包容量为 bagweight 时,选择不同物品组合所能获得的最大价值。
  • 算法:动态规划,通过构建二维数组 dp 来记录每一步的最优解。

这句话可以直接套用无需修改,如果你想要DeepSeek为你解释某段代码你就可以这样直接对它发问。

  1. 代码生成:借助代码生成提示词,能大幅提高开发效率。比如,你想生成一段HTML 代码,用于生成一个五子棋游戏。使用“ 请帮我用 HTML 生成一个五子棋游戏,所有代码都保存在一个 HTML 中。”的提示词,模型生成如下回答:

当然!下面是一个简单的五子棋游戏的 HTML
代码。这个代码包含了一个基本的五子棋棋盘,玩家可以通过点击棋盘上的格子来下棋。游戏会检测是否有玩家获胜。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>五子棋游戏</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background-color: #f0f0f0;
            font-family: Arial, sans-serif;
        }
        #board {
            display: grid;
            grid-template-columns: repeat(15, 30px);
            grid-template-rows: repeat(15, 30px);
            gap: 1px;
            background-color: #d18b47;
            padding: 10px;
            border-radius: 5px;
        }
        .cell {
            width: 30px;
            height: 30px;
            background-color: #ffce9e;
            border: 1px solid #d18b47;
            display: flex;
            justify-content: center;
            align-items: center;
            cursor: pointer;
        }
        .cell.black::before, .cell.white::before {
            content: '';
            width: 20px;
            height: 20px;
            border-radius: 50%;
        }
        .cell.black::before {
            background-color: black;
        }
        .cell.white::before {
            background-color: white;
        }
        #message {
            margin-top: 20px;
            font-size: 24px;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div id="board"></div>
    <div id="message"></div>

    <script>
        const boardSize = 15;
        let currentPlayer = 'black';
        let board = Array.from({ length: boardSize }, () => Array(boardSize).fill(null));

        function createBoard() {
            const boardElement = document.getElementById('board');
            for (let i = 0; i < boardSize; i++) {
                for (let j = 0; j < boardSize; j++) {
                    const cell = document.createElement('div');
                    cell.classList.add('cell');
                    cell.dataset.row = i;
                    cell.dataset.col = j;
                    cell.addEventListener('click', handleCellClick);
                    boardElement.appendChild(cell);
                }
            }
        }

        function handleCellClick(event) {
            const row = parseInt(event.target.dataset.row);
            const col = parseInt(event.target.dataset.col);

            if (board[row][col] !== null) return;

            board[row][col] = currentPlayer;
            event.target.classList.add(currentPlayer);

            if (checkWin(row, col, currentPlayer)) {
                document.getElementById('message').textContent = `${currentPlayer === 'black' ? '黑棋' : '白棋'}获胜!`;
                document.querySelectorAll('.cell').forEach(cell => cell.removeEventListener('click', handleCellClick));
                return;
            }

            currentPlayer = currentPlayer === 'black' ? 'white' : 'black';
        }

        function checkWin(row, col, player) {
            const directions = [
                { dr: 0, dc: 1 },  // 水平
                { dr: 1, dc: 0 },  // 垂直
                { dr: 1, dc: 1 },  // 主对角线
                { dr: 1, dc: -1 }  // 副对角线
            ];

            for (const { dr, dc } of directions) {
                let count = 1;

                // 检查一个方向
                for (let i = 1; i < 5; i++) {
                    const r = row + dr * i;
                    const c = col + dc * i;
                    if (r < 0 || r >= boardSize || c < 0 || c >= boardSize || board[r][c] !== player) break;
                    count++;
                }

                // 检查相反方向
                for (let i = 1; i < 5; i++) {
                    const r = row - dr * i;
                    const c = col - dc * i;
                    if (r < 0 || r >= boardSize || c < 0 || c >= boardSize || board[r][c] !== player) break;
                    count++;
                }

                if (count >= 5) return true;
            }

            return false;
        }

        createBoard();
    </script>
</body>
</html>

代码说明:

  1. HTML 结构

    • #board 是棋盘的容器,使用 grid 布局来创建 15x15 的格子。
    • .cell 是每个格子的样式,点击时会触发 handleCellClick 事件。
    • #message 用于显示游戏结果。
  2. CSS 样式

    • 棋盘和格子的样式,包括背景色、边框、棋子的样式等。
  3. JavaScript 逻辑

    • createBoard 函数用于生成棋盘。
    • handleCellClick 函数处理格子的点击事件,更新棋盘状态并检查是否获胜。
    • checkWin 函数检查当前玩家是否在点击的位置上连成五子。

如何使用:

  1. 将上述代码复制到一个 .html 文件中。
  2. 在浏览器中打开该文件,即可开始游戏。

这个代码是一个简单的五子棋实现,你可以根据需要进一步扩展和优化。

文本处理领域

  1. 内容分类:在信息繁多的当下,内容分类功能可快速整理文本。假设你有一段新闻文本:“今日,央行宣布下调贷款利率,这一举措旨在刺激经济增长,促进企业投资和个人消费。”使用“请对这段文本进行分类”的提示词,模型会输出“经济类”。
  2. 结构化输出:将文本转化为Json格式,便于程序处理。例如,有一段关于书籍的文本:“《百年孤独》,作者是加西亚·马尔克斯,出版于1967年,是魔幻现实主义文学的经典之作。”使用“将这段文本转化为Json格式”的提示词,模型输出:

{
“书名”: “百年孤独”,
“作者”: “加西亚·马尔克斯”,
“出版年份”: “1967年”,
“作品类型”: “魔幻现实主义文学的经典之作”
}

这段提示词可以直接粘贴使用,不用做过多修改。

创意写作领域

  1. 角色扮演(自定义人设):喜欢角色扮演的朋友可以尽情发挥想象。设定“你是一位精通历史的老学者,知识渊博,说话带有古风”的人设,然后问“请您讲讲秦朝统一六国的关键因素有哪些”,模型会这样回答:

“秦能并六国者,其一,商鞅变法后,秦之国力大增,法治严明,耕战之策行之有效,使民勇于公战,怯于私斗;其二,秦王嬴政善用人才,李斯、尉缭等皆为其所用,谋略得当;其三,秦国地理位置优越,据崤函之固,拥雍州之地,进可攻,退可守。此数者,乃秦统一六国之关键也。”

这段提示词你可以理解为定义模型的身份和地位(你是一位精通历史的老学者,知识渊博,说话带有古风)+ 想要它做的事情(讲讲秦朝统一六国的关键因素有哪些),所以后面你就可以根据这个语句去让Deepseek做一些角色扮演。

  1. 角色扮演(情景续写):给出“在一个古老的城堡里,你发现了一本神秘的魔法书,刚打开它,一道耀眼的光芒就射了出来”的场景,使用提示词“请根据这个场景续写一段对话”,模型续写:

你(惊讶又好奇):这……这到底是什么魔法书?怎么会有如此奇异的光芒?
神秘声音(空灵回荡):外来之人,你竟敢擅自打开本魔法书,可知此举将带来何种后果?
你(鼓起勇气):我只是出于好奇,并无恶意。这魔法书究竟隐藏着什么秘密?
神秘声音(沉默片刻):罢了,既已打开,便与你有些缘分。此书蕴含着强大的魔法力量,但也隐藏着巨大的危险……

这段提示词的主要因素为:故事的场景(在一个古老的城堡里)+ 故事开展(你发现了一本神秘的魔法书,刚打开它,一道耀眼的光芒就射了出来)

  1. 散文写作:以“海边的黄昏”为提示词,让模型创作散文。模型写出:

“海边的黄昏,宛如一幅绚丽的油画。太阳渐渐西沉,将天空染成了橙红色,余晖洒在波光粼粼的海面上,仿佛给大海披上了一层金色的纱衣。海浪轻轻拍打着沙滩,发出温柔的声响,像是在诉说着古老的故事。漫步在沙滩上,感受着海风的轻抚,心中的烦恼也随着海浪渐渐远去。”

  1. 诗歌创作:输入“以春天的花朵为主题,创作一首现代诗”的提示词,模型创作如下:

春之花

在春天的怀抱里,
花朵们纷纷醒来。
桃花粉嫩如少女的脸颊,
在枝头羞涩地笑着。
油菜花一片金黄灿烂,
像给大地铺上了金色的地毯。
樱花如雪般飘落,
编织着浪漫的梦。
春天的花朵啊,
你们是大自然的精灵,
用色彩和芬芳,
唤醒了沉睡的世界。

  1. 文案大纲生成:当你需要为一款智能手表写宣传文案时,使用“请为一款具备健康监测、运动记录和时尚外观的智能手表生成文案大纲”的提示词,模型生成:
- 开头:引出智能手表,强调其在现代生活中的重要性。
- 产品亮点1:详细介绍健康监测功能,如心率、睡眠监测等,以及对健康管理的帮助。
- 产品亮点2:阐述运动记录功能,包括运动模式识别、运动数据统计等,满足运动爱好者需求。
- 产品亮点3:描述时尚外观设计,如表盘样式、表带材质等,突出其时尚与实用的结合。
- 结尾:总结智能手表的优势,呼吁消费者购买。

这段提示词的主要因素是:定位(具备健康监测、运动记录和时尚外观)+ 具体事项(智能手表)+ 想要做的事(生成文案大纲)

  1. 宣传标语生成:“你是一个宣传标语专家,请根据用户需求设计一个独具创意且引人注目的宣传标语,需结合该产品/活动的核心价值和特点,同时融入新颖的表达方式或视角。请确保标语能够激发潜在客户的兴趣,并能留下深刻印象,可以考虑采用比喻、双关或其他修辞手法来增强语言的表现力。标语应简洁明了,需要朗朗上口,易于理解和记忆,一定要押韵,不要太过书面化。只输出宣传标语,不用解释。”,“请生成”希腊酸奶“的宣传标语”。模型生成:

“希腊酸奶,浓滑如诗,健康滋味,一口知!”

这段可以直接复制粘贴,只需要修改后面的宣传主题(希腊酸奶)即可。

其他实用功能

1.模型提示词生成:“你是一位大模型提示词生成专家,请根据用户的需求编写一个智能助手的提示词,来指导大模型进行内容生成,要求:

  • 以 Markdown 格式输出
  • 贴合用户需求,描述智能助手的定位、能力、知识储备
  • 提示词应清晰、精确、易于理解,在保持质量的同时,尽可能简洁
  • 只输出提示词,不要输出多余解释”,“请帮我生成一个“Linux 助手”的提示词”

模型输出:

Linux 助手提示词

定位

  • Linux 助手:一个专注于提供 Linux 操作系统相关知识和支持的智能助手。

能力

  • 系统管理:能够提供 Linux 系统安装、配置、维护和优化的指导。
  • 命令行操作:熟练掌握并解释各种 Linux 命令行工具和脚本。
  • 故障排除:帮助用户诊断和解决常见的 Linux 系统问题。
  • 软件管理:指导用户进行软件包的安装、更新和卸载。
  • 安全性:提供 Linux 系统安全设置和最佳实践的建议。

知识储备

  • 操作系统:深入了解各种 Linux 发行版,如 Ubuntu、CentOS、Debian 等。
  • 网络配置:熟悉 Linux 网络设置和配置,包括防火墙、路由和网络服务。
  • 文件系统:掌握 Linux 文件系统结构和管理。
  • 编程环境:了解在 Linux 上搭建和使用各种编程环境,如 Python、Java 等。

使用示例

  • 用户问题:如何安装 Apache 服务器?
  • 助手响应:可以使用以下命令安装 Apache 服务器:
    sudo apt update
    sudo apt install apache2

这段提示词也是和上面一样,只需要更改主体(Linux 助手)即可

2.中英翻译专家:“你是一个中英文翻译专家,将用户输入的中文翻译成英文,或将用户输入的英文翻译成中文。对于非中文内容,它将提供中文翻译结果。用户可以向助手发送需要翻译的内容,助手会回答相应的翻译结果,并确保符合中文语言习惯,你可以调整语气和风格,并考虑到某些词语的文化内涵和地区差异。同时作为翻译家,需将原文翻译成具有信达雅标准的译文。“信” 即忠实于原文的内容与意图;“达” 意味着译文应通顺易懂,表达清晰;“雅” 则追求译文的文化审美和语言的优美。目标是创作出既忠于原作精神,又符合目标语言文化和读者审美的翻译。”,“牛顿第一定律:任何一个物体总是保持静止状态或者匀速直线运动状态,直到有作用在它上面的外力迫使它改变这种状态为止。 如果作用在物体上的合力为零,则物体保持匀速直线运动。 即物体的速度保持不变且加速度为零。”

模型输出:

Newton’s First Law: An object will remain at rest or in uniform straight-line motion unless acted upon by an external force that compels it to change this state. If the net force acting on the object is zero, the object will maintain uniform straight-line motion. In other words, the object’s velocity remains constant, and its acceleration is zero.

同样这段提示词也不用做过多改变,你只需要改成你所要互相翻译的语言(中英文)即可。

DeepSeek - R1的提示词库功能丰富、实用便捷,无论是专业人士还是普通爱好者,都能从中找到适合自己的功能。希望大家通过不断探索和尝试,挖掘出更多可能,让人工智能更好地服务我们的生活和工作。

资源里面有githib大佬PeterDaveHello整理的一些提示词,有需要可以保存下来打开直接复制粘贴使用。

下面为大家附上DeepSeek - R1的提示词库链接:https://api-docs.deepseek.com/zh-cn/prompt-library/

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值