基于 llama2 的提示词工程案例2

news2024/11/27 4:22:23

优化大型语言模型(LLMs)

优化大型语言模型(LLMs)中的提示词(prompts)是提高模型性能和输出相关性的重要手段。以下是一些优化提示词的方向:

  • 明确性:确保提示词清晰明确,直接指向所需的信息或任务。

  • 上下文提供:在提示词中提供足够的上下文信息,帮助模型更好地理解问题。

  • 简洁性:尽量使提示词简洁,避免不必要的信息,以免造成混淆。

  • 语法正确:使用正确的语法和拼写,因为模型可能会模仿提示词中的语法结构。

  • 使用关键词:在提示词中包含与查询相关的关键词或概念。

  • 避免歧义:尽量避免模糊不清的表述,减少模型产生多种解释的可能性。

  • 指令性:如果需要模型执行特定任务,使用直接的指令性语言。

  • 逐步细化:如果问题复杂,可以将其分解为几个小步骤,在提示词中逐步引导。

  • 使用示例:提供示例或模板,帮助模型理解预期的输出格式。

  • 迭代测试:不断测试和迭代提示词,找到最有效的表达方式。

  • 利用反馈:根据模型的输出反馈调整提示词,以提高其性能。

  • 限制和边界:在需要时,明确提示词中的界限和限制,指导模型生成符合要求的输出。

  • 元提示词:使用元提示词(meta-prompts)来指导模型理解任务的高层次目标。

  • 结合搜索结果:如果模型结合了搜索能力,优化提示词以更好地利用搜索结果。

  • 用户反馈:根据用户反馈调整提示词,以提高用户满意度和模型的实用性。

元提示词

元提示词(Meta-prompts)是一种特殊的提示词,它们不仅提供给语言模型具体的任务或问题,而且还提供关于如何处理这些任务的额外指导或上下文。元提示词可以看作是“关于提示的提示”。

以下是一些元提示词的用途和例子:

  1. List item 任务说明:提供关于所需任务的详细信息。

    • 例子:“请以公正和详细的方式分析这篇文章的论点。”
  2. 格式指导:指定输出的格式或结构。

    • 例子:“请按照以下格式回答:‘问题:[问题内容] 答案:[答案内容]’。”
  3. 风格指导:指示模型采用特定的风格或语调。

    • 例子:“请用技术性的语言回答这个问题,适合发表在学术期刊上。”
  4. 思维过程:引导模型展示其思考或推理过程。

    • 例子:“在提供答案之前,请先概述你的思考过程。”
  5. 详细程度:指示所需的信息量或详细程度。

    • 例子:“请简要描述这个概念,但不要提供过多的技术细节。”
  6. 角色扮演:让模型扮演一个特定的角色或视角。

    • 例子:“以一个5岁孩子的理解水平解释这个科学概念。”
  7. 限制条件:指出在生成回答时需要考虑的限制或约束。

    • 例子:“在不超过5句话的范围内总结这个故事的主要情节。”

代码实现

模型加载

from time import time
import torch
import transformers
from transformers import AutoTokenizer, AutoModelForCausalLM
from IPython.display import display, Markdown
#`IPython`是一个交互式Python环境的增强版,`IPython.display`是其中一个模块,其中的`display`函数和`Markdown`类用于在Jupyter Notebook或IPython环境中展示富文本内容。
from torch import cuda, bfloat16

#这里也可以使用auto
#设定使用cpu 还是gpu
device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu'

#加载本地模型
model = 'D:\临时模型\Meta-Llama-3-8B-Instruct'

#加载config 文件
model_config = transformers.AutoConfig.from_pretrained(
   model,#模型路径
    trust_remote_code=True,#默认情况下,trust_remote_code 设置为 True。这意味着使用 from_pretrained() 方法加载模型配置文件时,它将下载来自 Hugging Face 模型中心或其他在线资源的配置文件。
    max_new_tokens=1024 #新生成令牌的数量
)

# 加载模型量化
#只有24G的显卡不量化耗时过久
bnb_config = transformers.BitsAndBytesConfig(
    load_in_4bit=True, # 指定以 4 位精度加载模型
    bnb_4bit_quant_type='nf4', # 选择使用 NF4(Normal Float 4)数据类型
    bnb_4bit_use_double_quant=True,# 启用嵌套量化
    bnb_4bit_compute_dtype=bfloat16 #更改计算期间将使用的数据类型 16位浮点数据类型
)

# 加载与模型相匹配的分词器
tokenizer = AutoTokenizer.from_pretrained(model)

#实例化模型
model = transformers.AutoModelForCausalLM.from_pretrained(
    model,#模型的名称或地址
    trust_remote_code=True,#信任的存储库设置为True
    config=model_config, #加载配置文件
    quantization_config=bnb_config,#加载模型量化
    device_map='auto',#使用cpu 或GPU
)

#构建管道
pipeline = transformers.pipeline(
    "text-generation",
    model=model,
    torch_dtype=torch.float16,
    tokenizer=tokenizer,  # 显式指定分词器
    device_map=device,
)

模型测试

def query_model(
    prompt, 
    temperature=0.7,#温度0.7 相对比较活跃的恢复
    max_length=512
    ):
    start_time = time()
    sequences = pipeline(
        prompt,
        do_sample=True,#模型将生成确定性的输出,即在给定输入的情况下,每次运行都会产生相同的结果
        top_k=10,#模型将只考虑概率最高的10个词汇 top_k通常与另一个参数top_p一起使用,
        temperature=temperature,
        num_return_sequences=1,#对于给定的输入,生成模型将只产生一个输出序列。
        eos_token_id=pipeline.tokenizer.eos_token_id,#eos_token通常用于表示句子结束标记
        max_length=max_length,
    )
    answer = f"{sequences[0]['generated_text'][len(prompt):]}\n"
    end_time = time()
    ttime = f"Total time: {round(end_time-start_time, 2)} sec."

    return prompt + " " + answer  + " " +  ttime

#美化输出
def colorize_text(text):
    for word, color in zip(["Reasoning", "Question", "Answer", "Total time"], ["blue", "red", "green", "magenta"]):
        text = text.replace(f"{word}:", f"\n\n**<font color='{color}'>{word}:</font>**")
    return text

提示词

prompt = """
You are an AI assistant designed to answer simple questions.
Please restrict your answer to the exact question asked.
Please limit your answer to less than {size} tokens.
Question: {question}
Answer:
"""

你是一个人工智能助理,旨在回答简单的问题。 请将你的答案限制在所问的确切问题上。 请将您的回答限制为小于{size}个tokens。
问题:{问题} 答复

不同token长度和 max_length长度的比对

token大小控制在32

#token大小控制在32
response = query_model(
    prompt.format(question="What is the surface temperature of the Moon?",#月球表面的温度是多少?
                 size=32), #一个toaken 的大小
    max_length=256)
display(Markdown(colorize_text(response)))

在这里插入图片描述

token大小控制在64

#token大小控制在64
response = query_model(
    prompt.format(question="What is the surface temperature of the Moon?",#月球表面的温度是多少?
                 size=64), #一个toaken 的大小
    max_length=256)
display(Markdown(colorize_text(response)))

在这里插入图片描述

token大小控制在128

#token大小控制在128
response = query_model(
    prompt.format(question="What is the surface temperature of the Moon?",
                 size=128), #一个toaken 的大小
    max_length=256)
display(Markdown(colorize_text(response)))

在这里插入图片描述

不采用 prompt.format 不控制token 的情况下输出

#不采用 prompt.format 不控制token 的情况下输出
response = query_model("What is the surface temperature of the Moon?",
     max_length=256)
display(Markdown(colorize_text(response)))

在这里插入图片描述

max_length=128 且 token长度128

response = query_model(
    prompt.format(question="What is the surface temperature of the Moon?",
                 size=128), #一个toaken 的大小
    max_length=128)
display(Markdown(colorize_text(response)))

在这里插入图片描述

其他提问的返回

response = query_model(
    prompt.format(question="Who was the next shogun after Tokugawa Ieyasu?",
                 size=128), #一个toaken 的大小
    max_length=256)
display(Markdown(colorize_text(response)))

在这里插入图片描述

#不采用 prompt.format
response = query_model("Who was the next shogun after Tokugawa Ieyasu?",
    max_length=256)
display(Markdown(colorize_text(response)))

在这里插入图片描述

修改提示词的返回

提示词1

prompt = """
You are an AI assistant designed to write poetry.
Please answer with a haiku format (17 words poems).
Question: {question}
Answer:
"""
response = query_model(
    prompt.format(question="Please write a poem about Boris Becker wins in tennis",#请写一首关于鲍里斯·贝克尔赢得网球比赛的诗
                 size=256), 
    max_length=256)
display(Markdown(colorize_text(response)))

你是一个人工智能助理,专门用来写诗。 请用俳句形式回答(17个字的诗)。 问题:{问题} 答复
在这里插入图片描述

"""
Golden racket's song Boris Becker's triumphant Victory's sweet echo
金色球拍的歌声鲍里斯·贝克尔胜利的甜蜜回响
"""
response = query_model(
    prompt.format(question="Please write a poem about Shakespeare being lame at playing poker",#请写一首关于莎士比亚不擅长打扑克的诗
                 size=256), 
    max_length=256)
display(Markdown(colorize_text(response)))

在这里插入图片描述

提示词2

prompt = """
You are an AI assistant designed to write poetry.
Please answer with a short poem, with rime, in the style of Shakespeare's poems.
Question: {question}
Answer:
"""
response = query_model(
    prompt.format(question="Please write a poem about Nadia Comaneci winning Montreal Olympiad",
                 size=256), 
    max_length=256)
display(Markdown(colorize_text(response)))

你是一个人工智能助理,专门用来写诗。 请用莎士比亚诗歌风格的带有雾凇的短诗来回答。 问题:{问题} 答复
在这里插入图片描述

提示词3

prompt = """
You are an AI assistant designed to write simple Python code.
Please answer with the listing of the Python code.
Question: {question}
Answer:
"""
response = query_model(
    prompt.format(question="Please write a function in Python to calculate the area of a circle of radius r",
                 size=256), 
    max_length=256)
display(Markdown(colorize_text(response)))

在这里插入图片描述

代码能力的测试

prompt = """
You are an AI assistant designed to write simple Python code.
Please answer with the listing of the Python code.
Question: {question}
Answer:
"""
response = query_model(
    prompt.format(question="Please write a function in Python to calculate the area of a circle of radius r",
                 size=256), 
    max_length=256)
display(Markdown(colorize_text(response)))

在这里插入图片描述

response = query_model(
    prompt.format(question="""Please write a class in Python 
                        to model a phone book (storing name, surname, address, phone) 
                        with add, delete, order by name, search operations.
                        The class should store a list of contacts, each
                        with name, surname, address, phone information stored.
                        """,
                 size=1024), 
    max_length=1024)
display(Markdown(colorize_text(response)))

在这里插入图片描述
以上是文本的全部内容,感谢阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1650703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java 刷题记录】前缀和

前缀和 25. 一维前缀和 示例1&#xff1a; 输入&#xff1a; 3 2 1 2 4 1 2 2 3输出&#xff1a; 3 6import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(S…

【强化学习】公平性Actor-Critic算法

Bringing Fairness to Actor-Critic Reinforcement Learning for Network Utility Optimization 阅读笔记 Problem FormulationLearning AlgorithmLearning with Multiplicative-Adjusted RewardsSolving Fairness Utility Optimization Evaluations 在网络优化问题中&#xff…

PyGame 文字显示问题及解决方法

在 Pygame 中显示文字时可能会遇到一些问题&#xff0c;例如文字显示不清晰、字体不正确或者文字位置不准确等。以下是一些常见的问题及其解决方法&#xff0c;具体情况可以看看情况。 1、问题背景 一位用户在使用 PyGame 库进行游戏开发时&#xff0c;遇到了一个问题&#xf…

[AI OpenAI-doc] 迁移指南 Beta

我们已经改变了助手 API 在 beta 的 v1 版本和 v2 版本之间工具和文件的工作方式。今天&#xff0c;通过 API&#xff0c;两个 beta 版本仍然可以访问&#xff0c;但我们建议尽快迁移到我们 API 的最新版本。我们将在 2024 年底之前废弃 beta 的 v1 版本。 如果您今天不使用助手…

套管外径测量仪 多尺寸型号 规格全可定制

套管&#xff08;bushing&#xff09;是一种将带电导体引入电气设备或穿过墙壁的一种绝缘装置。前者称为电器套管&#xff0c;后者称为穿墙套管。套管通常用在建筑地下室&#xff0c;是用来保护管道或者方便管道安装的铁圈。套管的分类有刚性套管、柔性防水套管、钢管套管及铁皮…

SpringBoot中HandlerInterceptor拦截器的构建详细教程

作用范围&#xff1a;拦截器主要作用于Spring MVC的DispatcherServlet处理流程中&#xff0c;针对进入Controller层的请求进行拦截处理。它基于Java的反射机制&#xff0c;通过AOP&#xff08;面向切面编程&#xff09;的思想实现&#xff0c;因此它能够访问Spring容器中的Bean…

Python-VBA函数之旅-property函数

目录 一、property函数的常见应用场景 二、property函数使用注意事项 三、如何用好property函数&#xff1f; 1、property函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、prop…

【北京迅为】《iTOP-3588开发板源码编译手册》-第4章 Android12/Linux设备树简介

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

4.【Orangepi Zero2】Linux定时器(signal、setitimer),软件PWM驱动舵机(SG90)

Linux定时器&#xff08;signal、setitimer&#xff09;&#xff0c;软件PWM驱动舵机&#xff08;SG90&#xff09; signalsetitimer示例 软件PWM驱动舵机&#xff08;SG90&#xff09; signal 详情请看Linux 3.进程间通信&#xff08;shmget shmat shmdt shmctl 共享内存、si…

帆软报表实现填报报表

我们拿emp表举例 登记信息表 设计一个报表实现对emp表员工的登记 &#xff08;emp表为ORACLE自带用户scott下的一个表&#xff09; 首先&#xff0c;我们设计好填报界面&#xff0c;新建一个普通报表&#xff0c;将emp表中需要的输入一一回应填写进表中。 如下图所示&#xf…

代码随想录Day 40|Leetcode|Python|139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

139.单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 解题思路&#xff1a; 确定dp数组含义…

如何去官网下载windows10操作系统iso镜像

文章目录 一、先从微软中国官网https://www.microsoft.com/zh-cn/进去二、然后按图示一步步点进去三、点击下载工具这个工具会帮你生成windows操作系统iso文件四、下载好后一步步按图示要求成功操作 一、先从微软中国官网https://www.microsoft.com/zh-cn/进去 二、然后按图示一…

【牛客】排列计算

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 如果直接涂色来计算单点权重&#xff0c;2e5*2e5必然超时。 所以用差分进行优化。 3. 代码实现 #include<bits/stdc.h> using name…

【工作记录】openjdk-22基础镜像的构建

背景 近期使用到的框架底层都用的是springboot3.0&#xff0c;要求jdk版本在17甚至更高。 于是决定制作一个基于openjdk22的基础镜像&#xff0c;本文对这一过程进行记录。 作为记录的同时也希望能够帮助到需要的朋友。 期望效果 容器内可以正常使用java相关命令且版本是2…

vm虚拟机安装网络适配器驱动卡死/无响应/无限等待状态

大部分原因都是以前的vm没有卸载干净所导致的&#xff0c;只需要使用CCleaner清楚干净就好 使用控制面板里的卸载把VM卸载干净 使用CCleaner软件删除干净注册表&#xff0c;这个软件百度很容易找到&#xff0c;只有十兆左右 打开下载好的软件&#xff0c;不需要注册码&#xff…

保研面试408复习 2——操作系统、计网

文章目录 1、操作系统一、进程、线程的概念以及区别&#xff1f;二、进程间的通信方式&#xff1f; 2、计算机网络一、香农准则二、协议的三要素1. 语法2. 语义3. 时序 标记文字记忆&#xff0c;加粗文字注意&#xff0c;普通文字理解。 1、操作系统 一、进程、线程的概念以及…

Pycharm无法链接服务器环境(host is unresponsived)

困扰了很久的一个问题&#xff0c;一开始是在服务器ubuntu20.04上安装pycharm community&#xff0c;直接运行服务器上的pycharm community就识别不了anaconda中的环境 后来改用pycharm professional也无法远程连接上服务器的环境&#xff0c;识别不了服务器上的环境&#xff…

ASP.NET网上鲜花销售系统的设计

摘 要 本系统实现了一般电子商务所具备的功能&#xff0c;如商品浏览、用户登录注册、网上与购物、结算、后台数据库管理等&#xff0c;利用这些功能可以对鲜花销售信息进行较好的管理。 网上鲜花销售系统的使用者主要是客户和销售管理者&#xff0c;对于客户来说&#xff0…

小米手机miui14 android chrome如何取消网页自动打开app

搜索媒体打开应用 选择你要阻止打开的app&#xff0c;以github为例 取消勾选打开支持的链接。 参考&#xff1a;https://www.reddit.com/r/chrome/s/JBsGkZDkRZ

期权怎么开户?

今天期权懂带你了解期权怎么开户&#xff1f;近年来&#xff0c;随着股市的持续低迷&#xff0c;市场交易痛点越发明显的氛围中&#xff0c;所以有人看到了双向交易的期权。 期权怎么开户&#xff1f; 1、首先是证券账户内的资金需要满足50万保留20个交易日&#xff1b; 2、其…