探索大模型能力--prompt工程

news2024/11/24 6:04:11

1 prompt工程是什么

1.1 什么是Prompt?

LLM大语言模型终究也只是一个工具,我们不可能每个人都去训一个大模型,但是我们可以思考如何利用好大模型,让他提升我们的工作效率。就像计算器工具一样,要你算10的10倍,你是按10次“10+”,还是直接“10*10”,如何利用工具决定了你几点下班。。

提示词(prompt)就是你给大模型下达的指令输入,它包含以下任意要素:

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

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

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

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

1.2 什么是prompt工程?

提示工程就是开发和优化提示词(Prompt),一种在大模型中使用的技巧,通过提供清晰、简洁的指令或问题,充分发挥大模型的能力,让模型更好地理解我们的需求,从而得到更好的模型输出。

给大模型提示语的时候,你就是产品经理:

你随便提需求,模型也就随口一答;

你提出详细的需求,给出充分的需求背景,给足输出数据,定义好输出格式,好的模型就像一个好的程序员,会给你一个满意的答复的~

2 prompt工程基本原则

我们再回顾下prompt工程课程中的两大基本原则:

2.1 给出清晰,详细的指令

策略1:使用分割符清晰的知识输出的不同部分,比如"",<>,<\tag>等分隔符

策略2:指定一个结构化的输出,比如json,html等格式

策略3:要求模型自检测是否满足条件

策略4:提供少量示例

2.2 给模型思考的时间

我们不一定要一步得到答案,可以让模型进行一系列的推理,给他推理思考的时间,再最终给出答案。

策略1:指定完成任务需要的步骤

告诉模型完成这个指令,需要执行几步,每步的详细步骤

策略2:明确模型再给出结论之前推理出自己的解决方案

让模型自己推理,写出每一步的步骤,给足够的时间(token-钱)边思考边执行。

3 prompt工程迭代思维

迭代思想无处不在,提示工程和软件工程,算法模型一样都是一个迭代的过程。。

4 prompt工程方法

prompt的原则和方法在吴恩达教授的课程中讲解的很详细 ,这里我们再介绍一些高阶方法。

4.1 思维链

思维链的概念是在Google的论文Chain-of-Thought Prompting Elicits Reasoning in Large Language Models中被首次提出。思维链是一系列的短句子,模仿了人类在回答问题时的思考和可能的推理过程。

作者在文中也指出作为一种促进语言模型推理的方法,思维链提示具有几个吸引人的特性:

首先,思维链允许模型将多步问题进行拆分,分解为多个中间步骤。

其次,思维链使得模型的回答过程具有较好的可解释性,同时这一特性为定位推理错误,并修改错误提供了可能。

第三,链式思维推理可用于数学单词问题、常识推理和符号操作等任务,并且理论上适用于任何可以通过语言解决的任务。

最后,只要将思维序列链的例子包含到少样本提示的范例中,就可以很容易地在足够大的现成语言模型中引出思维链推理。

下图一次介绍了少样本提示(a),少样本思维链(b),零样本提示©,零样本思维链(d)

4.2 思维树

Tree of Thoughts (ToT)是思维链的进一步拓展,主要想解决 LM 推理过程存在如下两个问题:

不会探索不同的可能选择分支

无法在节点进行前后向的探索

ToT 将问题建模为树状搜索过程,包括四个步骤:问题分解、想法生成,状态评价以及搜索算法的选择。

4.3 用prompt写prompt

以上方法都太麻烦,还有一些懒人方法。利用ChatGPT插件或者自己写一个prompt来帮你写prompt,用魔法打败魔法。

比如https://github.com/minghaochen/universal-prompt/blob/master/universal-prompt.txt 给出一个优化prompt的模版。

代码语言:javascript

**复制

message = [
            {"content": """
            I want you to act as an AI prompt engineer. You are expert at writing ChatGPT Prompts to get the best results.

            To create efficient prompts that yield high-quality responses, consider the following principles and strategies: \
            1. Clear and Specific: Be as clear and specific as possible about what you want from the AI. If you want a certain type of response, outline that in your prompt. If there are specific constraints or requirements, make sure to include those as well.
            2. Open-ended vs. Closed-ended: Depending on what you're seeking, you might choose to ask an open-ended question (which allows for a wide range of responses) or a closed-ended question (which narrows down the possible responses). Both have their uses, so choose according to your needs.
            3. Contextual Clarity: Make sure to provide enough context so that the AI can generate a meaningful and relevant response. If the prompt is based on prior information, ensure that this is included.
            4. Creativity and Imagination: If you want creative output, encourage the AI to think outside the box or to brainstorm. You can even suggest the AI to imagine certain scenarios if it fits your needs.

            There is a well-written prompt delimited by <> for your reference: <Your task is to be my brainstorming partner and provide creative ideas and suggestions for a given topic or problem. Your response should include original, unique, and relevant ideas that could help solve the problem or further explore the topic in an interesting way. Please note that your response should also take into account any specific requirements or constraints of the task.>

            Your task is to write an effective ChatGPT Prompt based on given keywords or to modify the given prompts. Answer in the same language as me.
            """,
            "role": "system"}
        ]
message.append(
            {"content": "Please help me to write an effective ChatGPT Prompt based on the following keywords or prompt: {}".format(prompt),
             "role": "user"}
        )

在调用ChatGPT接口时,使用如上message,就可以优化你的prompt.

代码语言:javascript

**复制

Before:
translate the following English content into Chinese, 并润色
After:
<Please translate the following English text into Chinese, ensuring not only accuracy in translation but also enhancing the prose to flow naturally and elegantly in Chinese. The translation should read as if originally written by a native speaker, with attention to cultural nuances and idiomatic expressions.>

5 实践

上面说了这么多概念和理论方法,还有没有更好的方法,快速让我知道怎么写好prompt?

有!用别人的经验!

前公司有个同事做过一个分享,大佬说过一句话:要想写好prompt最好的方法就是知道他的训练数据是什么样子的。可惜,很少大模型完全开源他们的数据集。

但是很多大模型都会开放一个平台给大家体验,大家也都会将好的用例分享出来。

比如智普清言,我们看看程序员灵感

这里面就是一些优秀prompt,这些经验我们就可以直接拿来主义。

大致可以总结出模版:先给模型一个角色定位(你是一名***),再给出具体的需求(请写一个***需求的代码)。

上一个示例:

代码语言:javascript

**复制

你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:
代码目的:设计一个双十一自动抢购脚本
代码功能:在双十一当天自动登录购物网站,定时抢购预设商品
代码要求:使用面向对象编程方式,使用selenium库进行网页操作

代码语言:javascript

**复制

为了实现这个双十一自动抢购脚本,我们可以进行以下步骤:
1. 首先,需要安装selenium库以及对应浏览器的驱动。
2. 其次,需要登录目标购物网站。
3. 然后,需要定位到目标商品的抢购按钮。
4. 最后,在双十一当天设定一个定时器来点击抢购按钮。
以下是一个简单的示例代码:
```python
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
class DoubleElevenShopper:
    def __init__(self, website, username, password, item_link):
        self.website = website
        self.username = username
        self.password = password
        self.item_link = item_link
        self.driver = webdriver.Chrome()  # 使用Chrome浏览器
    def login(self):
        self.driver.get(self.website)
        username_field = self.driver.find_element_by_name("username")  # 这里需要根据目标网站的登录表单进行调整
        password_field = self.driver.find_element_by_name("password")
        username_field.send_keys(self.username)
        password_field.send_keys(self.password)
        password_field.send_keys(Keys.RETURN)
        time.sleep(5)  # 等待登录完成
    def buy_item(self):
        self.driver.get(self.item_link)
        buy_button = self.driver.find_element_by_id("buy_button")  # 这里需要根据目标商品的购买按钮进行调整
        buy_button.click()
    def run(self):
        self.login()
        self.buy_item()
        self.driver.quit()
if __name__ == "__main__":
    shopper = DoubleElevenShopper(
        website="https://www.example.com",
        username="your_username",
        password="your_password",
        item_link="https://www.example.com/item"
    )
    shopper.run()
```
注意:
1. 需要安装Chrome浏览器和ChromeDriver。
2. 登录和购买按钮的元素定位需要根据具体的购物网站进行调整。
3. 此代码为简单示例,实际使用可能需要处理更多的异常情况。
安装selenium库和ChromeDriver:
```
pip install selenium
```
下载ChromeDriver并将其路径添加到环境变量中。

最后奉上最全prompt指南:https://github.com/dair-ai/Prompt-Engineering-Guide

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取==🆓

在这里插入图片描述

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

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

相关文章

【计算机网络】计算机网络的性能指标

计算机网络的性能指标被用来从不同方面度量计算机网络的性能。常用的八个计算机网络性能指标&#xff1a;速率、带宽、吞吐量、时延、时延带宽积、往返时间、利用率、丢包率。 一.速率 (1) 数据量 比特&#xff08;bit&#xff0c;记为小写b&#xff09;是计算机中数据量的基…

JavaWEB 框架安全:Spring 漏洞序列.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型&#xff0c;可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入&#xff08;Dependency Injection&#xff09;、面向切面编程&#xff08;Aspect-Or…

c++ 线程交叉场景试验

1.需求 1.处理一个列表的数据&#xff0c;要求按照列表的数据处理10个数据 2.可以使用多线程处理&#xff0c;但是针对每个线程&#xff0c;1~10的处理顺序不能变。 3.每个数据的处理必须原子&#xff0c;即只有一个线程可以针对某个数据进行处理&#xff0c;但是10个数据是可…

2024年CSC公派联合培养博士项目申报即将开始~

一、选派计划 联合培养博士研究生面向全国各博士学位授予单位选拔。 联合培养博士研究生的留学期限、资助期限为6-24个月。留学期限应根据拟留学单位学制、外方录取通知&#xff08;或正式邀请信&#xff09;中列明的留学时间确定。个人申报的资助期限应不超过留学期限&#…

79、贪心-跳跃游戏II

思路&#xff1a; 首先理解题意&#xff1a;从首位置跳最少多少次到达末尾。 第一种&#xff1a;使用递归&#xff0c;将所有跳转路径都获取到进行求出最小值。 第二种&#xff1a;使用动态规划&#xff0c;下一次最优取决上一次的最优解 第三针&#xff1a;贪心&#xff…

python数据分析常用基础语法

Python语言基础——语法基础 前言一、变量的介绍与使用变量的介绍变量命名规则变量的使用拓展 二、标识符标识符命名命名规则注意事项 三、数据类型数据类型的介绍数据类型的查看示例 四、输入与输出输入和输出的介绍format格式化输出占位符 五、代码缩进与注释代码缩进 前言 …

Spring Cloud 整合Sentinel

1、引入依赖 版本说明 alibaba/spring-cloud-alibaba Wiki GitHub 父pom <spring.cloud.version>Hoxton.SR12</spring.cloud.version> <spring.cloud.alibaba.version>2.2.10-RC1</spring.cloud.alibaba.version>Sentinel应用直接引用starter <…

0508_IO2

练习&#xff1a; 将一张图片修改为德国国旗 1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 #include <sys/types.h>5 #include <unistd.h>6 #include <sys/stat.h>7 #include <fcntl.h>8 #include <pthrea…

Codigger:Web应用赋能的分布式操作系统让用户卓越体验

Codigger&#xff0c;作为一个分布式操作系统&#xff0c;其独特之处在于其采用的浏览器/服务器&#xff08;Browser/Server&#xff0c;简称B/S&#xff09;架构。这种架构的核心思想是&#xff0c;通过浏览器来进入工作界面&#xff0c;页面交互部分事务逻辑在前端&#xff0…

1-1ARM开发环境搭建(GD32)

1:安装MDK最好是5.27以及以上版本&#xff0c;避免后续学习中出现相关错误 2&#xff1a;安装芯片支持包 双击安装即可&#xff0c;也可以是默认路径&#xff0c;也可以自己更改路径 3&#xff1a;安装jlink下载器驱动&#xff08;下载调试器&#xff09; 具体安装步骤如下所示…

Mac虚拟机软件哪个好用 mac虚拟机parallels desktop有什么用 Mac装虚拟机的利与弊 mac装虚拟机对电脑有损害吗

随着多系统使用需求的升温&#xff0c;虚拟机的使用也变得越来越普遍。虚拟机可以用于创建各种不同的系统&#xff0c;并按照要求设定所需的系统环境。另外&#xff0c;虚拟机在Mac电脑的跨系统使用以及测试软件系统兼容性等领域应用也越来越广泛。 一、Mac系统和虚拟机的区别 …

v-for中的key是什么作用

在使用v-for进行列表渲染时&#xff0c;我们通常会给元素或者组件绑定一个key属性。 这个key属性有什么作用呢?我们先来看一下官方的解释&#xff1a; key属性主要用在Vue的虚拟DOM算法&#xff0c;在新Inodes对比时辨识VNodes&#xff1b; 如果不使用key&#xff0c;Vue会使用…

上传文件至linux服务器失败

目录 前言异常排查使用df -h命令查看磁盘使用情况使用du -h --max-depth1命令查找占用空间最大的文件夹 原因解决补充&#xff1a;删除文件后&#xff0c;磁盘空间无法得到释放 前言 使用XFTP工具上传文件至CentOS服务器失败 异常 排查 使用df -h命令查看磁盘使用情况 发现磁盘…

牛客 | 字符金字塔

请打印输出一个字符金字塔&#xff0c;字符金字塔的特征请参考样例 #include <stdio.h> #include <string.h> using namespace std; int main() {char c;scanf("%c", &c);for (int i 1; i < (c - 64); i)//第一个循环决定了有多少行{//c:67 第三…

Sentinel-Dashboard安装

1. Docker官方镜像 找到跟你版本相对于的镜像进行拉取&#xff1a; &#xfeff;https://hub.docker.com/r/bladex/sentinel-dashboard # 运行容器 Sentinel默认端口 8858 docker run --name sentinel-dashboard -p 8858:8858 -d bladex/sentinel-dashboard:1.8.6 &#xfeff…

Google Play开发者账号为什么会被封?如何解决关联账号问题?

Google Play是Google提供的一个应用商店&#xff0c;用户可以在其中下载并安装Android设备上的应用程序、电影、音乐、电子图书等。Google Play是Android平台上较大的应用市场&#xff0c;包含了数百万个应用程序和游戏。但是谷歌对于上架应用的审核越趋严格&#xff0c;开发者…

【再探】设计模式—适配器、装饰及外观模式

结构型设计模式是用于设计对象和类之间关系的一组设计模式。一共有7种&#xff1a;适配器模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式及代理模式。 1 适配器模式 需求&#xff1a;在软件维护阶段&#xff0c;已存在的方法与目标接口不匹配&#xff0c;需要个中…

动态内存开辟(下)

前言 动态内存开辟以及柔性数组的介绍 一、 几个经典的笔试题 1. 题目一 void Getmemory(char*p) {p (char*)malloc(100); } int main() {char* str NULL;Getmemory(str);strcpy(str, "hello world");printf(str);return 0; } 这段代码我们可以发现两个很明显…

看完这篇文章我奶奶都懂Opentracing了 (二)

二. 概念分析 1. Span和SpanContext 结合上述示例&#xff0c;我们从Span开始入手来进行概念分析&#xff0c;但是说在最前面&#xff0c;Span在不同的分布式链路实现中&#xff0c;其定义是不全一样的&#xff0c;尽管Opentracing已经进行了概念的统一&#xff0c;但是具体到…

基于FPGA的数字锁控制电路VHDL代码Quartus仿真

名称&#xff1a;基于FPGA的数字锁控制电路VHDL代码Quartus仿真&#xff08;文末获取) 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a; 任务及要求 硬件描述语言VHDL是一种用形式化方法描述数字电路和系统的语言。利用这种语 ,数字电路系统的设计可…