吴恩达系列之:Prompt Engineering——提示词工程

在这个AI盛行的大模型时代,越来越多的工程都可以交给我们的AI;在编程领域中,使用AI工具同样也能够给我们带来许多的便利;想要AI大模型能够输出我们期望的输出,我们就得设计出详细的prompt(提示词)去引导AI输出我们的想要的结果;今天就让我们来学习一下吴恩达系列中的Prompt Engineering------提示词工程。

何为Prompt ?

如果说LLM大模型 是一座宝藏金库 的话,那Prompt 可以说是打开这座宝藏的钥匙;因为我们可以给大模型说清楚我们的需求,即Prompt提示词,大模型的NLP自然语言处理能力会理解这段Prompt并生成相应的内容,所以说掌握了对Prompt的设计,就能拿到大模型里面丰富的内容;就相当于开启了LLM大模型这座宝藏。

接下来,让我们一起创建一个node后端文件,来感受AI的力量;

kotlin 复制代码
// 如下命令可以初始化后端文件,并导入ai的包
npm init -y  package.json 文件
npm i openai  安装了openai sdk
// 会向package.json 添加dependencies 依赖

Key 安全问题

在使用我们的AI大模型之前,我们要思考一个问题那就是如何妥善处理我们的api-key;因为我们在调用openai这个包时,就要通过api-key去访问大模型,所以api-key的安全问题是首当其冲的;我们不应该让api-key轻易地就暴露在代码之中,这时候就该引出我们的.env文件了。

环境变量储存

.env 文件是一种用于存储环境变量的配置文件;env是环境变量对象,它包含着所有的环境变量;通过console.log(process.env,'------');这条命令时,就能拿到所有的环境变量。

dotenv 是一个零依赖的Node.js库,用于从.env文件加载环境变量到process.env对象中。这个操作通过调用dotenv.config()方法完成,它默认查找项目根目录下的.env文件,并把文件中的键值对(key=value)格式 的数据添加到process.env对象中;这样就能在代码中读取到env对象了。

php 复制代码
require('dotenv').config();
const client = new OpenAI({
    apiKey: process.env.OpenAI_API_KEY,
    baseURL: 'https://api.chatanywhere.tech/v1'
})

其中的process.env是一个特殊的属性,它是一个进程对象 ,包含了当前进程的所有环境变量 。在Node.js中,process是一个全局对象 ,它代表了当前Node.js进程。当你运行一段代码的时候,就是开启了一个新的进程;进程是分配资源的最小单元

与进程关系密切的还有线程,那什么是线程呢? 如果说进程是董事长,那线程就是小弟,是CEO;线程是归进程管理的,它可以说是代码执行的最小单位 。进程负责分配大致资源,而线程就是把从进程那边拿到的资源进行更加详细的工作分配。 层级管理关系: 操作系统 (window/mac/linux)<- 进程(process)<- 环境变量(env)<- project

.env文件:

ini 复制代码
# OPENAI
OPENAI_API_KEY = *******
# 数据库
MYSQL_USER=root
MYSQL_PASSWORD=123456

这样就用env对象储存好了我们的api-key;可以通过process.env.OpenAI_API_KEY去获取,这样就解决好了Key的安全问题。

prompt设计模式

在吴恩达系列中,关于prompt的设计,可以大概分为三点:

  • 提供清晰、明确的提示,
  • 长提示效果更好
  • 给它一些例子 ,few shot 展示LLM的学习能力

如果说大模型是弹药库,那prompt就是它的目标,我们设计清晰、明确的提示词,就相当于给了大模型一个准确的定位,让它能够指哪打哪。

javascript 复制代码
// node 里面的模块化里的关键字,引入模块
// 从本地node_modules 引入openai模块,以OpenAI 类作为代表
require('dotenv').config();
// 环境变量
// console.log(process.env);
const OpenAI = require('openai')

const client = new OpenAI({
    apiKey: process.env.OpenAI_API_KEY,
    baseURL: 'https://api.chatanywhere.tech/v1'
})

const getChatResponse = async function(model,prompt){
    const response = await client.chat.completions.create({
        model : model,// 适合聊天的模型 很多种大模型
        messages: [
            {
                role: 'user',
                content: prompt
            }
        ]
    })
    return response.choices[0].message.content
}

async function main() {
    // es6 模板字符串 比"" '' 动态解析
    // 多行 特别适合详细的设置prompt 
    let text = `
    您应该提供尽可能清晰、具体的指示,以表达您希望模型执行的任务\
    这将引导模型朝向所需的输出,并降低收到无关或不正确响应的可能性。\
    不要将写清晰的提示词与写简短的提示词混淆。\
    在许多情况下,更长的提示词可以为模型提供更多的清晰度和上下文信息,
    从而导致更详细和相关的输出
    `
    // llm 的 nlp 总结能力
    // 转译
    let prompt = `
    把用三个反引号括起来的文本总结成一句话,20字以内,输出英文。    
    \`\`\`${text}\`\`\`
    `
    const chatCompletion = await getChatResponse('gpt-3.5-turbo', prompt)
    // console.log(chatCompletion.choices);
    console.log(chatCompletion);

    let prompt2 = `
    您的任务是以一致的风格回答问题。

    <孩子>: 教我耐心。

    <祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。

    <孩子>: 教我韧性。
    `

    const response = await getChatResponse('gpt-3.5-turbo', prompt2)
    console.log(response);
}

main();

有时候好的问题比答案也许更重要;把时间花在设计prompt上,能够让我们得出更加准确的答案!

OPENAI_API_KEY 获取方法

最后附上Key的获取方法,有需要的可以自取。

github.com/chatanywher...

相关推荐
新加坡内哥谈技术18 分钟前
Mistral推出“Le Chat”,对标ChatGPT
人工智能·chatgpt
GOTXX26 分钟前
基于Opencv的图像处理软件
图像处理·人工智能·深度学习·opencv·卷积神经网络
IT古董31 分钟前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
CV学术叫叫兽1 小时前
快速图像识别:落叶植物叶片分类
人工智能·分类·数据挖掘
WeeJot嵌入式1 小时前
卷积神经网络:深度学习中的图像识别利器
人工智能
脆皮泡泡1 小时前
Ultiverse 和web3新玩法?AI和GameFi的结合是怎样
人工智能·web3
机器人虎哥1 小时前
【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测
人工智能·机器学习
码银2 小时前
冲破AI 浪潮冲击下的 迷茫与焦虑
人工智能
飞哥数智坊2 小时前
使用扣子实现一个文章收集智能体(升级版)
人工智能
用户37791362947552 小时前
【循环神经网络】只会Python,也能让AI写出周杰伦风格的歌词
人工智能·算法