当前位置: 首页 > news >正文

提示工程指南学习记录(二)

提示词要素

如果您接触过大量提示工程相关的示例和应用,您会注意到提示词是由一些要素组成的。

提示词可以包含以下任意要素:

  • 指令:想要模型执行的特定任务或指令。

  • 上下文:包含外部信息或额外的上下文信息,引导语言模型更好地响应。

  • 输入数据:用户输入的内容或问题。

  • 输出指示:指定输出的类型或格式。

为了更好地演示提示词要素,下面是一个简单的提示,旨在完成文本分类任务:

提示词

请将文本分为中性、否定或肯定  # 指令
文本:我觉得食物还可以。	# 输入数据
情绪:					# 输出指示

在上面的提示示例中,指令是“将文本分类为中性、否定或肯定”。输入数据是“我认为食物还可以”部分,使用的输出指示是“情绪:”。请注意,此基本示例不使用上下文,但也可以作为提示的一部分提供。例如,此文本分类提示的上下文可以是作为提示的一部分提供的其他示例,以帮助模型更好地理解任务并引导预期的输出类型。

# coding: utf-8
from pprint import pprint

from litellm import completion
import os

# set ENV variables
os.environ["OPENAI_API_KEY"] = "sk-ulbyeozob2jc8GYcFfC63149002647Bb8eA0840658Ef7bE9"
os.environ['OPENAI_BASE_URL'] = "http://10.25.20.243:3000/v1/"

messages = [
    {"content": """
    请将文本分为中性、否定或肯定
    文本:我觉得食物还可以。
    情绪:
    """, "role": "user"},
]

# openai call
for message in messages:
    response = completion(
        model="openai/qwen2-instruct",
        base_url="http://10.25.20.243:3000/v1/",
        # temperature=i / 10,
        # top_p=i / 10,
        # presence_penalty=i,
        # frequency_penalty=i / 100,
        messages=messages
    )
    # 输出:中性
    print(response.json()['choices'][0]['message']['content'])

设计提示的通用技巧

指令

你可以使用命令来指示模型执行各种简单任务,例如“写入”、“分类”、“总结”、“翻译”、“排序”等,从而为各种简单任务设计有效的提示。
请记住,你还需要进行大量实验以找出最有效的方法。以不同的关键词(keywords),上下文(contexts)和数据(data)试验不同的指令(instruction),看看什么样是最适合你特定用例和任务的。通常,上下文越具体和跟任务越相关则效果越好。在接下来的指南中,我们将讨论样例和添加更多上下文的重要性。
有些人建议将指令放在提示的开头。另有人则建议是使用像“###”这样的清晰分隔符来分隔指令和上下文。

# coding: utf-8
from pprint import pprint

from litellm import completion
import os

# set ENV variables
os.environ["OPENAI_API_KEY"] = "sk-ulbyeozob2jc8GYcFfC63149002647Bb8eA0840658Ef7bE9"
os.environ['OPENAI_BASE_URL'] = "http://10.25.20.243:3000/v1/"

messages = [
    {"content": """
    ### 指令 ###
    将以下文本翻译成西班牙语:
    文本:“hello!”
    """, "role": "user"},
]

# openai call
for message in messages:
    response = completion(
        model="openai/qwen2-instruct",
        base_url="http://10.25.20.243:3000/v1/",
        # temperature=i / 10,
        # top_p=i / 10,
        # presence_penalty=i,
        # frequency_penalty=i / 100,
        messages=messages
    )
    # 输出:翻译后的西班牙语为:"hola!"
    print(response.json()['choices'][0]['message']['content'])

具体性

要非常具体地说明你希望模型执行的指令和任务。提示越具描述性和详细,结果越好。特别是当你对生成的结果或风格有要求时,这一点尤为重要。不存在什么特定的词元(tokens)或关键词(tokens)能确定带来更好的结果。更重要的是要有一个具有良好格式和描述性的提示词。事实上,在提示中提供示例对于获得特定格式的期望输出非常有效。

在设计提示时,还应注意提示的长度,因为提示的长度是有限制的。想一想你需要多么的具体和详细。包含太多不必要的细节不一定是好的方法。这些细节应该是相关的,并有助于完成手头的任务。这是你需要进行大量实验的事情。我们鼓励大量实验和迭代,以优化适用于你应用的提示。

例如,让我们尝试从一段文本中提取特定信息的简单提示。

提取以下文本中的地名。

所需格式:
地点:<逗号分隔的公司名称列表>

输入:“虽然这些发展对研究人员来说是令人鼓舞的,但仍有许多谜团。里斯本未知的香帕利莫德中心的神经免疫学家 Henrique Veiga-Fernandes 说:“我们经常在大脑和我们在周围看到的效果之间有一个黑匣子。”“如果我们想在治疗背景下使用它,我们实际上需要了解机制。””

输出:

地点:里斯本,香帕利莫德中心

避免不明确

给定上述关于详细描述和改进格式的建议,很容易陷入陷阱:想要在提示上过于聪明,从而可能创造出不明确的描述。通常来说,具体和直接会更好。这里的类比非常类似于有效沟通——越直接,信息传达得越有效。

解释提示工程的概念。保持解释简短,只有几句话,不要过于描述。

从上面的提示中不清楚要使用多少句子以及什么风格。尽管你可能仍会从上述提示中得到较好的响应,但更好的提示应当是非常具体、简洁并且切中要点的。例如:

使用 2-3 句话向高中学生解释提示工程的概念。

做什么还是不做什么?

设计提示时的另一个常见技巧是避免说不要做什么,而应该说要做什么。这样(说要做什么)更加的具体,并且聚焦于(有利于模型生成良好回复的)细节上。

以下是向客户推荐电影的代理程序。不要询问兴趣。不要询问个人信息。

客户:请根据我的兴趣推荐电影。
代理:
当然,我很乐意为您推荐电影。请告诉我您喜欢的电影类型、导演、演员或任何特定的主题,这样我就能提供更精确的建议。例如,如果您喜欢科幻片、克里斯托弗·诺兰执导的作品或是汤姆·哈迪主演的电影,请详细描述您的喜好,以便为您提供最佳选择。

以下是更好的提示:

以下是向客户推荐电影的代理程序。代理负责从全球热门电影中推荐电影。它应该避免询问用户的偏好并避免询问个人信息。如果代理没有电影推荐,它应该回答“抱歉,今天找不到电影推荐。”。
顾客:请根据我的兴趣推荐一部电影。
客服:
客服:非常感谢您的咨询!不过在进行电影推荐时,并不需要了解您的个人喜好或信息。如果您愿意的话,我可以提供一些建议给广受欢迎且评价良好的影片。

考虑到不同观众的需求和口味可能大相径庭,我会尽量推荐一些不同类型、风格的电影以供您选择:

1. **科幻惊悚片** - 例如《银翼杀手2049》或者《星际穿越》,这些影片通常充满着视觉奇观与深度思考,适合喜欢未来科技和复杂剧情的观众。

2. **经典喜剧片** - 如《唐人街探案》系列,既能让人捧腹大笑,又能体验到人性的温暖和智慧。

3. **动画大片** - 可以考虑《疯狂动物城》或是《寻梦环游记》,非常适合带小孩一同观看,同时也深受成人喜爱。

4. **悬疑犯罪类** - 像《致命ID》或者《小丑》,这类电影情节紧凑,角色性格鲜明,适合喜欢解谜推理的影迷。

5. **浪漫爱情片** - 推荐《恋夏50天》或者《罗马假日》,轻松甜蜜的情节让人心情愉悦。

6. **历史传记** - 如果对历史故事感兴趣,《国王的演讲》或《乔布斯》都是不错的选择,它们结合了真实人物的故事与戏剧张力。

7. **动作冒险片** - 比如《速度与激情》系列或《007系列》,精彩绝伦的动作场面总会让人心跳加速。

请根据自己的兴趣和心情挑选,希望这些建议能帮助您找到心仪的电影。如果有特别偏好的类型或主题,请随时告诉我,我会为您提供更针对性的推荐。

---

如果您对以上任何类型的电影感兴趣,或者有其他具体需求,都可以直接告诉我,我很乐意为您进一步服务。祝您观影愉快!

参考

  • Prompt Engineering Guide
  • litellm文档

相关文章:

  • 东方博宜OJ ——1335 - 土地分割
  • IDEA的常用设置(更新中......)
  • 云原生(Cloud Native)的详解、开发流程及同类软件对比
  • [ComfyUI] 最新控制模型EasyControl,吉卜力风格一键转绘
  • 08【基础学习】串口通信(三):收发数据包+数据校验
  • 某公司网络OSPF单区域配置
  • 作业帮前端面试题及参考答案 (100道面试题-上)
  • 交易所开发全流程解析:KYC与U盾在安全合规中的战略价值
  • 基于Ubuntu系统搭建51单片机开发环境的详细教程
  • Auto-Encoder --李宏毅机器学习笔记
  • 视觉算法+雾炮联动:开创智能降尘新时代
  • 基于unsloth微调大模型并上传到huggingface
  • zephyr RTOS 中 bt_le_adv_start函数的功能应用
  • 基础知识:离线安装docker、docker compose
  • Docker 代理配置全攻略:从入门到企业级实践
  • iOS设备文件管理实践
  • 【数据分享】1981-2024年全国各城市逐日、逐月、逐年平均气温(Shp格式)
  • 高性能内存kv数据库Redis
  • 个人博客系统
  • 【转载翻译】Open3D和PCL的一些比较
  • 瑞士成第15届北影节主宾国,6部佳作闪耀“瑞士电影周”
  • 一中国公民在日本滑雪场意外死亡,我领馆发布提醒
  • 由“环滁皆山”到“环滁皆景”,滁州如何勾勒“文旅复兴”
  • 左眼失明左耳失聪,办理残疾人证被拒?县残联:双眼残疾才能办
  • 加力扩围支持消费品以旧换新,江苏要送出1800万元彩票
  • 黄仁勋今年二度到访:中国是英伟达非常重要的市场,希望继续与中国合作