LLM: Prompt的使用

news/2024/4/29 10:25:44

本文使用的LLM是OpenAI的gpt系列。刚开始学大模型,如果出现错误内容或着描述不恰当的部分,后续会修改。

  Prompt是输入给大模型的文本或语句,用来引导大模型(Large Language Model, LLM)生成相关的输出。好的prompt可以提高大模型输出的准确性和可靠性。一般而言,好的prompt的特点是:具体、丰富、少歧义

1.Prompt

1.1 prompt典型构成

  一般情况下,一个好的prompt主要包括以下几个方面的内容:

  • 角色:给 AI 定义一个最匹配任务的角色,比如:“你是一位软件工程师”等;
  • 指示:任务描述;
  • 上下文:给出与任务相关的其它背景信息(经常用在多轮对话中);
  • 例子:示例;
  • 输入:任务的输入信息,在提示词中明确的标识出用户输入;
  • 输出:输出的格式描述,以便后继模块自动解析模型的输出结果,比如JSON、XML等;

tips: 大模型对prompt的开头和结尾部分更敏感;OpenAI GPT 对 Markdown 格式的prompt友好; 如果更换了大模型或者大模型更新了,prompt也需要跟着更新。

1.2 prompt用法

这里给出一个使用prompt操作GPT模型的例子(这里使用的是GPT的API,具体环境执行配置,这里不赘述),具体代码如下:

from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
client=OpenAI()
message=[{"role":"system","content":"你是一个微信公众号文章的写手。"},{"role":"user","content":"写一段话介绍大模型,字数要求200字以内。"},
]
response=client.chat.completions.create(model="gpt-4",messages=message,temperature=0.8)
print(response.choices[0].message.content)

GPT输出内容为(每次输出内容均不相同):

大模型,指的是通过大量数据训练得到的庞大的人工智能系统。这类模型因其庞大的参数数量和强大的数据处理能力而得名。它们能够处理复杂的任务,如自然语言理解、图像识别、语音处理等。大模型通过深度学习技术,学习数据中的模式和规律,从而实现对语言、图像等多种类型数据的理解和生成。这些模型的训练需要大量的计算资源和数据,因此常常由拥有强大计算能力的大型科技公司或研究机构开发。大模型的出现推动了人工智能技术的边界,使得机器能够在更多领域内执行复杂的任务,表现出接近甚至超越人类的能力。

关于上述GPT代码,这里只关注client.chat.completions.create中的message参数(其他参数后序博客介绍)。message参数主要用来接收prompt。关于message的说明主要有以下几点:

  • message是一个object组成的数组。每个object都必须至少包含两个字段:rolecontentcontent中的内容即为具体的信息内容。
  • 目前message支持的角色类型role有:systemuserassistanttool
  • rolesystem时,可以存放prompt中的角色信息。
  • roleuser时,可以存放prompt中的其他信息。
  • roleassistant时,代表大模型返回的内容。注意:将assistant类型的信息通过messages参数再次传递给大模型,可以实现多轮对话。GPT这些模型本身是没有多轮对话的能力的。
  • roletool时,用来保存tool_call的返回结果。(后续博客会做详细介绍)

下面举一个简单的例子验证在messages中添加rolesystem类信息时的作用,具体如下:

message=[{"role":"system","content":"你是一个微信公众号文章的写手。你叫小A"},{"role":"user","content":"你是谁?"},
]response=client.chat.completions.create(model="gpt-3.5-turbo",messages=message,temperature=0.8)print(response.choices[0].message.content)

其输出内容为:

嘿,我是小A,是这个微信公众号的写手。有什么可以帮你的吗?

如果运行命令print(response.choices[0].message),将会看到如下结果(GPT返回的信息中role的值为assistant):

ChatCompletionMessage(content=’ 嘿,我是小A,是这个微信公众号的写手。有什么可以帮你的吗?', role=‘assistant’, function_call=None, tool_calls=None)

2 Prompt使用案例

大模型适合完成文本入、文本出类的任务。

2.1 使用prompt实现文章过滤

需求:需要利用大模型依据文章标题挑选出与特定主题相关的文章。假如需要挑选出与“阅读”或者“书籍”相关的文章。
完整代码如下:

from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
client=OpenAI()def get_completion(messages,model='gpt-4'):response=client.chat.completions.create(model=model,messages=messages,temperature=0.8)return response.choices[0].message.contentprompt="""
##目标
你可以依据用户输入的文章标题,判断这篇文章是否跟阅读或者书籍相关。
##用户输入
{input_article_title}
##输出
只输出“是”或“否”,
##示例
最适合今天读的灵性书籍: 是
肾脏很怕的 8 种食物,很多人每天都吃,还吃不少: 否
"""
article_list=["用七本想象力爆棚的绘本,点燃那颗崭新的童心",
'“书香盈怀 悦读致远” 2023年北京市诵读大赛燕山赛区活动通知',
"哪本书让你流了最多的眼泪?(话费福利)",
"今日宜自我分析",
"文化和自然遗产日:考验你的时刻到啦!",
"英文故事磨耳朵:When Sophie Gets Angry-Really,Really Angry...(附亲子共读获奖名单)",
"今日宜消化情绪",
"拜托了,夏天别和我提吃,除非……",
"预约!预约!预约!",
"今日宜大胆尝试",
"预约!聆听恐龙故事,揭开恐龙足迹背后的远古谜团",
"今日宜品读经典"]messages=[{"role":"user","content":prompt.format(input_article_title=str(article_list))}]
result=get_completion(messages)
print(result)

大模型输出结果为:

是、是、是、否、否、是、否、否、否、否、是、是


http://www.mrgr.cn/p/27786434

相关文章

RISC-V特权架构 - 中断定义

RISC-V特权架构 - 中断定义 1 中断类型1.1 外部中断1.2 计时器中断1.3 软件中断1.4 调试中断 2 中断屏蔽3 中断等待4 中断优先级与仲裁5 中断嵌套6 异常相关寄存器 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 中断类型 RISC-V 架构定义的中…

数字孪生关键技术及体系架构

摘要: 数字孪生以各领域日益庞大的数据为基本要素,借助发展迅速的建模仿真、人工智能、虚拟现实等先进技术,构建物理实体在虚拟空间中的数字孪生体,实现对物理实体的数字化管控与优化,开拓了企业数字化转型的可行思路…

Codeforces Round 937 (Div. 4) A - F 题解

A. Stair, Peak, or Neither? 题解&#xff1a;直接比较输出即可。 代码&#xff1a; #include<bits/stdc.h> using namespace std ; typedef long long ll ; const int maxn 2e5 7 ; const int mod 1e9 7 ; inline ll read() {ll x 0, f 1 ;char c getchar()…

论文《Exploring to Prompt for Vision-Language Models》阅读

论文《Exploring to Prompt for Vision-Language Models》阅读 论文概况论文动机&#xff08;Intro&#xff09;MethodologyPreliminaryCoOp[CLASS]位置Context 是否跨 class 共享表示和训练 ExperimentsOverall ComparisonDomain GeneralizationContext Length (M) 和 backbon…

uni-app(使用阿里图标)

1.注册阿里矢量图标库 注册阿里图标库账号并登录&#xff0c;https://www.iconfont.cn/ 2.加入购物车 搜索适合自己的图标&#xff0c;加入购物车&#xff0c;如下图&#xff1a; 3.加入项目 我的->资源管理->我的项目->创建项目&#xff0c;然后返回购物车&#…

企微获客助手功能,行为触发如何实现回传的?

获客助手&#xff0c;这个听起来就相当酷炫的名字&#xff0c;它实际上是一个帮助企业将推广流量快速导入企业微信的神器。通过它&#xff0c;企业可以吸引越来越多的用户加为好友&#xff0c;从而建立起更紧密的客户关系。但是&#xff0c;如何进一步提升导入企业微信的流量质…

vector类(二)

文章目录 vector类的模拟实现1.默认成员变量和函数2.迭代器函数3.空间容量和长度4.[ ]下标调用5.插入操作&#xff08;尾插&#xff09;6.调整容量大小7.判空操作8.删除操作9.插入操作10.size空间大小11.消除操作 vector类的模拟实现 1.默认成员变量和函数 首先自定义构造vec…

Vite 为什么比 Webpack 快?

目录 1. Webpack 的构建原理 2. Script 的模块化&#xff08;主流浏览器对 ES Modules 的支持&#xff09; 3. Webpack vs Vite 开发模式的差异 对 ES Modules 的支持 底层语言的差异 热更新的处理 1. Webpack 的构建原理 前端之所以需要类似于 Webpack 这样的构建工具&…

C++基本语法

C是如何工作的 文章目录 C是如何工作的1、新建Hello World工程1.1使用Visual Studio新建项目1.2 HelloWorld1.2.1 命名空间1.2.2 输出输出 1.3 注释1.4 函数1.4.1 使用有返回的函数1.4.2 自定义函数 1、新建Hello World工程 1.1使用Visual Studio新建项目 按照下面的图片&…

数组---

1、数组的定义 Java中&#xff0c;数组存储固定大小的同类型元素。 数组是多个相同类型数据按一定顺序排列的集合&#xff0c;并使用一个名字命名&#xff0c;通过编号的方式对这些数据进行统一的管理。 数组的特点&#xff1a; 数组本身是引用数据类型&#xff0c;但数组中的…

计算机专业学习单片机有什么意义吗?

玩单片机跟玩计算机区别还是很大的, 单片机有众多的种类,每一种又可能有很多个系列.可以说单片机就是为了专款专用而生的.这样来达到产品成本的降低,这就是现在身边的很多的电子产品价格一降再降的原因之一.在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一…

admin端

一、创建项目 1.1 技术栈 1.2 vite 项目初始化 npm init vitelatest vue3-element-admin --template vue-ts 1.3 src 路径别名配置 Vite 配置 配置 vite.config.ts // https://vitejs.dev/config/import { UserConfig, ConfigEnv, loadEnv, defineConfig } from vite im…

Kubernetes Gateway API 介绍

Kubernetes Gateway API 诞生背景 在 kubernetes 中&#xff0c;流量的治理主要分为两个部分&#xff1a; 南北向流量东西向流量 南北向流量&#xff08;NORTH-SOUTH traffic&#xff09; 在计算机网络中&#xff0c;南北向流量通常指数据流量从一个**内部网络&#xff08;…

前后端分离开发【Yapi平台】【Swagger注解自动生成接口文档平台】

前后端分离开发 介绍开发流程Yapi&#xff08;api接口文档编写平台&#xff09;介绍 Swagger使用方式1). 导入knife4j的maven坐标2). 导入knife4j相关配置类3). 设置静态资源映射4). 在LoginCheckFilter中设置不需要处理的请求路径 查看接口文档常用注解注解介绍 当前项目中&am…

笔记本电脑死机了怎么办?

笔记本死机是常有的事&#xff0c;尤其是在玩游戏、看电影或者是使用办公软件的时候&#xff0c;电脑卡住了&#xff0c;无论你怎么按鼠标或键盘&#xff0c;显示屏始终没有反应。那么笔记本电脑死机了怎么办呢?接下来跟大家分享几个小技巧来快速解决这类死机问题&#xff0c;…

uniapp对接萤石云 实现监控播放、云台控制、截图、录像、历史映像等功能

萤石云开发平台地址&#xff1a;文档概述 萤石开放平台API文档 (ys7.com) 萤石云监控播放 首先引入萤石云js js地址&#xff1a;GitHub - Ezviz-OpenBiz/EZUIKit-JavaScript-npm: 轻应用npm版本&#xff0c;降低接入难度&#xff0c;适配自定义UI&#xff0c;适配主流框架 vi…

Ansible-1

Ansible是一款自动化运维、批量管理服务器的工具&#xff0c;批量系统配置、程序部署、运行命令等功能。基于Python开发&#xff0c;基于ssh进行管理&#xff0c;不需要在被管理端安装任何软件。Ansible在管理远程主机的时候&#xff0c;只有是通过各种模块进行操作的。 需要关…

|行业洞察·趋势报告|《2024旅游度假市场简析报告-17页》

报告的主要内容解读&#xff1a; 居民收入提高推动旅游业发展&#xff1a;报告指出&#xff0c;随着人均GDP的提升&#xff0c;居民的消费能力增强&#xff0c;旅游需求从传统的观光游向休闲、度假游转变&#xff0c;国内人均旅游消费持续增加。 政府政策促进旅游市场复苏&…

iOS - Runtime-API

文章目录 iOS - Runtime-API1. Runtime应用1.1 字典转模型1.2 替换方法实现1.3 利用关联对象给分类添加属性1.4 利用消息转发机制&#xff0c;解决方法找不到的异常问题 2. Runtime-API2.1 Runtime API01 – 类2.1.1 动态创建一个类&#xff08;参数&#xff1a;父类&#xff0…

分类任务中的评估指标:Accuracy、Precision、Recall、F1

概念理解 T P TP TP、 T N TN TN、 F P FP FP、 F N FN FN精度/正确率&#xff08; A c c u r a c y Accuracy Accuracy&#xff09; 二分类查准率 P r e c i s i o n Precision Precision&#xff0c;查全率 R e c a l l Recall Recall 和 F 1 − s c o r e F1-score F1−s…