使用Prompt设计模式编程(一) -- 小白必修

281 阅读9分钟

前言

大家好 , 我是浪遏 , 近期了解到prompt的重要性 , 也做了相关学习 .

本文将探讨Prompt设计模式,结合吴恩达教授的理念,详细阐述其概念、原则、应用实例以及如何构建高效的AI交互,带你走进这个充满魅力的领域。😀

Prompt设计模式的核心概念

Prompt设计模式,简单来说,是一种通过巧妙构造文本提示(Prompt)来引导AI模型生成特定内容的艺术。

它在基于大语言模型(LLMs)的应用开发中具有举足轻重的地位。

想象一下,你正在与一个智能伙伴对话,而Prompt就是你传达意图的清晰指令。

例如,当你希望AI为你创作一篇关于科技发展的文章时,你可以构造这样的Prompt:“你是一位资深的科技专栏作家,请撰写一篇800字左右关于科技发展对未来生活影响的文章,需涵盖人工智能、量子计算等热门领域,语言生动有趣,适合大众阅读。”通过这样精心设计的Prompt,AI模型就能更好地理解你的需求,从而生成更符合你期望的内容。

吴恩达的Prompt Engineering原则

吴恩达教授在其课程中提出了一系列至关重要的Prompt设计原则,这些原则,为我们在设计Prompt时指明方向,有助于显著提升模型的性能和输出质量。

明确性原则

清晰明确地阐述你期望模型执行的任务是关键。

比如,若你想要AI分析一份销售数据报告,你应明确表述:“分析这份销售数据报告,找出销售额最高的产品类别、对应的时间段以及该类别销售额占总销售额的百分比。”避免模糊不清的指令,确保模型确切知晓你的需求。

角色设定原则

为模型指定一个特定角色,能使其回答更具针对性。

例如,“你是一名经验丰富的市场分析师,专门研究消费者行为。请根据以下市场调研数据,分析消费者对新产品的接受程度以及影响因素。”这种角色设定有助于引导模型从特定专业视角提供更有价值的见解。

格式指导原则

当你对输出格式有特定要求时,务必在Prompt中清晰指明。

比如,“请以表格形式列出过去五年公司的营收、利润和市场份额数据,表格需包含年份、营收(单位:万元)、利润(单位:万元)、市场份额(百分比)四列。”明确的格式要求能让模型的输出更符合你的预期,便于直接使用。

提供示例原则

给出示例是帮助模型理解意图的有效方法。

假设你希望AI生成一些创意广告文案,你可以提供一些示例:“示例1:‘苹果手机,创新科技,引领潮流,畅享无限可能。’示例2:‘耐克运动鞋,超越自我,释放激情,迈向巅峰之路。’请按照这样的风格为新推出的智能手表生成广告文案。”通过示例,模型能更好地把握你期望的风格和内容方向。

多轮对话原则

利用多轮对话逐步引导模型,使其充分理解上下文。

例如,在设计一个旅游规划的AI应用中,第一轮你可以问:“我计划去欧洲旅游,有法国、意大利、西班牙三个国家可供选择,推荐一个最适合夏季旅游的国家。”根据模型的回答,第二轮你可以进一步询问:“在这个国家中,推荐三个必去的城市,并简要介绍每个城市的特色景点。”通过多轮交互,不断细化需求,获得更精准的结果。

准备工作:环境配置与依赖管理

在踏上Prompt设计之旅前🤡,完善的准备工作必不可少。

我们以Node.js作为后端语言为例,详细阐述环境配置与依赖管理的步骤。

初始化项目

首先,在命令行中执行npm init -y,这将快速构建一个后端项目框架,为后续的开发奠定基础。

安装必要库

  1. 引入openai库:执行npm install openai,这是与OpenAI API进行交互的核心库,它为我们调用AI模型提供了强大的功能支持。
  2. 安装dotenv库:执行npm install dotenv,该库用于管理环境变量。在项目根目录创建一个.env文件,添加如下内容:
OPENAI_API_KEY=your_api_key_here
OPENAI_API_BASE_URL=https://api.openai.com/v1

这里的your_api_key_here需要替换为你自己的OpenAI API密钥。

通过将API密钥等敏感信息存储在.env文件中,避免了在代码中硬编码,大大提高了安全性。

同时,将.env文件添加到.gitignore中,防止敏感信息泄露,确保项目的安全性和可维护性。当需要更改配置时,只需修改.env文件,无需改动代码本身,方便快捷。

构建基础的AI交互接口

导入依赖

在项目文件中,使用以下代码导入所需的依赖:

import OpenAI from 'openai';
import dotenv from 'dotenv';

这一步骤将引入的依赖导入到项目中,为后续的操作做好准备。

配置环境变量

执行dotenv.config();,将.env文件中的环境变量读入process.env对象中,以便后续能够方便地引用这些变量。

例如,可以通过process.env.OPENAI_API_KEY获取API密钥,process.env.OPENAI_API_BASE_URL获取API请求的基础URL。 这种方式不仅提高了安全性,还使配置更加灵活。

创建OpenAI客户端实例

const client = new OpenAI({
    apiKeys: process.env.OPENAI_API_KEY,
    baseURL: process.env.OPENAI_API_BASE_URL
});

这里创建了一个与OpenAI API交互的客户端实例。

apiKeys配置了从环境变量中读取的API密钥,确保安全认证;

baseURL指定了API请求的基础URL,可根据需要使用国内的接口等。

定义通用函数

const getCompletion = async (prompt, model = "gpt-3.5-turbo") => {
    const message = [{
        role: "user",
        content: prompt
    }];
    const response = await client.chat.completions.create({
        model: model,
        messages: message,
        temperature: 0.9
    });
    return response.choices[0].message.content;
}

这个函数是整个AI交互的核心。

它接受prompt作为参数,允许根据不同情况灵活传入提示内容;model参数指定使用的AI模型,默认为gpt-3.5-turbo

函数内部将用户的提示封装成消息格式,然后调用OpenAI API获取响应,并返回第一个响应的消息内容。

通过这个函数,实现了对AI模型的调用封装,提高了代码的复用性和可维护性。

案例实操:分析产品评论运输方面

案例场景

假设我们是一家电子商务公司的物流分析员,收到了一位用户对购买的熊猫毛绒玩具的评论:

不过,相对于我付的价格来说,它有点小。我女儿生日时买了这个熊猫毛绒玩具,她很喜欢,到处都带着。它柔软、超级可爱,脸看起来很友好。我想,同样的价格,也许还有其他更大的选择。它比预期早到了一天,所以我有机会自己玩了一会儿,然后才把它送给她。

我们的任务是从这段评论中提取关于产品运输交付方面的信息,生成简短摘要,以便向运输部门提供反馈。

构造Prompt

根据吴恩达的Prompt Engineering原则,我们构造如下Prompt:

你的任务是生成来自电子商务网站的产品评论的有关时间运输的简短摘要, 以便向运输部门提供反馈。总结以下用三个反引号分隔的评论,最多30个字。 并重点关注任何提及产品运输和交付的方面。评论:'''不过, 相对于我付的价格来说,它有点小。我女儿生日时买了这个熊猫毛绒玩具, 她很喜欢,到处都带着。它柔软、超级可爱,脸看起来很友好。我想, 同样的价格,也许还有其他更大的选择。它比预期早到了一天, 所以我有机会自己玩了一会儿,然后才把它送给她。

在这个Prompt中,我们

  • 明确了任务(生成运输方面的摘要)
  • 设定了角色(未特别设定,但可隐含为物流分析助手)
  • 进行了限定(用三个反引号分隔评论、最多30字)
  • 并提供了待分析的评论内容。

调用模板获取结果

main函数中,我们使用构造好的Prompt调用getCompletion函数:

const main = async () => {
    const prod_review = `不过,相对于我付的价格来说,它有点小。我女儿生日时买了这个熊猫毛绒玩具,她很喜欢,到处都带着。它柔软、超级可爱,脸看起来很友好。我想,同样的价格,也许还有其他更大的选择。它比预期早到了一天,所以我有机会自己玩了一会儿,然后才把它送给她。`;
    const prompt = `你的任务是生成来自电子商务网站的产品评论的有关时间运输的简短摘要,以便向运输部门提供反馈。总结以下用三个反引号分隔的评论,最多30个字。并重点关注任何提及产品运输和交付的方面。评论:'''${prod_review}'''`;
    const response = await getCompletion(prompt, 'gpt-4o');
    console.log(response);
}
main();

运行这段代码,AI将根据我们提供的Prompt分析评论,并返回关于运输方面的摘要,

例如:“产品比预期早到一天,用户有机会提前体验。”

总结

  • Prompt设计模式的概念、
  • 吴恩达教授的Prompt Engineering原则、
  • 环境配置与依赖管理、
  • 构建AI交互接口以及案例实

Prompt设计模式不仅提高了代码的复用性和可维护性,还让我们能够更有效地与AI模型进行交互,引导其生成符合我们需求的内容。