NVDIA模型调用之大模型的灵魂--prompt写法

对于人来说,灵魂都是独一无二的,实际上大模型也拥有属于他自己的灵魂.

prompt能够定制大模型的回答格式,语气,性格等等,也就是说掌握了prompt的写法,就能捏出独一无二的大模型.

本文基于一个代码小助手的基础上,分享一些prompt的看法

项目构建

环境配置

python环境下安装openai库

pip install openai

注册NVDIA账户获得credit

官方模型:NVIDIA NIM | llama-3_1-405b-instruct

代码主体

NVDIA官方很贴心的提供了基本例子,可以基于官方代码修改,也可以使用LangChain来操作大模型(推荐)

Prompt编写

一代目:

可以看出输出的结果并不是很满意

以下是使用Python语言生成1-1000内的水仙花数:
```python
def is_water_melon_number(n):
    sum = 0
    temp = n
    while temp > 0:
        digit = temp % 10
        sum += digit ** 3
        temp //= 10
    return sum == n

for i in range(1, 1001):
    if is_water_melon_number(i):
        print(i)
```

以下是使用Java语言生成1-1000内的水仙花数:
```java
public class WaterMelonNumber {
    public static void main(String[] args) {
        for (int i = 1; i <= 1000; i++) {
            if (isWaterMelonNumber(i)) {
                System.out.println(i);
            }
        }
    }

    public static boolean isWaterMelonNumber(int n) {
        int sum = 0;
        int temp = n;
        while (temp > 0) {
            int digit = temp % 10;
            sum += Math.pow(digit, 3);
            temp /= 10;
        }
        return sum == n;
    }
}
```

以下是使用C++语言生成1-1000内的水仙花数:
```c++
#include <iostream>
#include <cmath>

bool isWaterMelonNumber(int n) {
    int sum = 0;
    int temp = n;
    while (temp > 0) {
        int digit = temp % 10;
        sum += pow(digit, 3);
        temp /= 10;
    }
    return sum == n;
}

int main() {
    for (int i = 1; i <= 1000; i++) {
        if (isWaterMelonNumber(i)) {
            std::cout << i << std::endl;
        }
    }
    return 0;
}
```

二代目:

添加了示例,同时使用<<>>想要来强调

"""
        <<角色>>: 你是一位精通Python,Java,C++语言的高级程序员,了解以上三种语言的特性和语法(默认使用Java语言来回答) 
        <<作用>>: 根据用户的要求生成对应语言的代码以及代码实现功能的整体思路,对每一行代码进行注释
        <<重要注意点>>: 生成的代码一定要能够运行,确保代码的正确性,同时若能够使用该语言的特殊语法,例如Java8的Stream语法,则必须使用
        <<回答格式>>:{
        思路=>.....
        代码=>.....
        }
        <<示例>>:  
        <user>: 请你生成一段代码实现1-1000内的水仙花数
        <answer>: 
        思路=>水仙花数(Narcissistic number),也被称为阿姆斯特朗数(Armstrong number),是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。对于三位数的水仙花数,就是它的每个位上的数字的立方和等于它本身。
        代码=>    
            # 查找1-1000内的所有水仙花数  
            for num in range(1, 1001):  
                # 将数字转换为字符串,方便处理每一位  
                str_num = str(num)  
                # 计算数字的位数  
                length = len(str_num)  
                # 如果不是三位数,则跳过  
                if length != 3:  
                    continue  
                # 初始化sum为0,用于存储每位数字的立方和  
                sum = 0  
                # 遍历数字的每一位  
                for digit in str_num:  
                    # 将字符转换为整数,并计算其立方后加到sum上  
                    sum += int(digit) ** 3  
                # 如果sum等于原数,则是水仙花数  
                if sum == num:  
                    print(num)
        
"""
#输出
<<角色>>: 你是一位精通Python,Java,C++语言的高级程序员,了解以上三种语言的特性和 Performance(默认使用Java语言来回答) 
        <<作用>>: 根据用户的要求生成对应语言的代码以及代码实现功能的整体思路,对每一行代码进行 annotion
        <<重要注意点>>:生成的代码一定要能够运行,确保代码的正确性,同时若能够使用该语言的SPECIALSyntaxError,例如Java8的StreamSyntaxError,则必须使用
        <<回答格式>>:{
        思路=>.....
        代码=>.....
        }
        <<示例>>:  
        <user>: 请你写一段代码实现五层的杨辉三角
        <answer>: 
        思路=>杨辉三角(Yang Hui's Triangle)是一个将等比数列terms以 Rights-angled isosceles triangle的形式arrangment在removeableagonalsline的 figure。
        代码=>
            public static void main(String[] args) {
                int num = 5;
                int[][] yhTriangle = new int[num][num];
                for (int i = 0; i < num; i++) {
                    for (int j = 0; j <= i; j++) {
                        if (j == 0 || j == i) {
                            yhTriangle[i][j] = 1;
                        } else {
                            yhTriangle[i][j] = yhTriangle[i - 1][j - 1] + yhTriangle[i - 1][j];
                        }
                        System.out.print(yhTriangle[i][j] + " ");
                    }
                    System.out.println();
                }
            }
        

三代目:

可以看出二代目的输出有很大的问题,模型将prompt融入了结果当中

这时可以看出输出结果已经很接近我们的要求了

prompt总结:

  1. 角色定义: 能够帮助大模型决定知识的范围,对相关知识了解更加精确
  2. 语句清晰: prompt不一定越长越好,清晰才是最重要的,不然大模型可能就像二代目一样搞混输出和prompt
  3. 自查阶段: 让大模型自己检查输出
  4. 分出逻辑步骤: 大模型并不像人类一般能够思维跳脱,提供一个逻辑性强的步骤会使得大模型更加稳定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值