基本概念
GPT: Generative Pre-Training Transformer(生成式预训练模型)
生成式:内容实时生成。
预训练:提前学习过大量知识。
模型:算法。
误解:ChatGPT是搜索引擎?
ChatGPT不是搜索引擎,所有的结果都是ChatGPT通过给定的上下文逐字实时生成的。
它能够创造不存在的文本,而搜索引擎只能够从数据库中查询已有的数据。
搜索引擎不会混淆答案,但是生成语言模型可能会。
比如生活中根本不存在的内容。
ChatGPT: GPT模型的基础上进行了特定的微调和优化,以提供更好的对话交互能力。
Prompt: 一种使用自然语言来引导用户与机器之间的交互的技术。
GTP 工作原理
本质就是单字接龙,通过上一次词自动计算出下一个词。
如何自动计算?
将每一个数据向量化,然后计算它们出现的概率分布,这样GPT就可以根据上文,通过概率去随机取得下一个关联的数据。这也是为什么每一次回答ChaptGPT的答案都不一样的原因。
注意:这里的数据可能是文本、可能是语音、可能是视频、可能是像素块等等。
任何数据均可向量化。比如,通过从身高、体重、籍贯等三个方面,就可以把人向量化为[11,22,33]。
最后形成多维空间的一个点。
数据被向量化后,有一个形象化的例子,就形成了空间中的概率分布图,点越密集的地方,证明某个数据出现的频次越高。
长的文章,通过单字接龙的自回归所生成。
什么是自回归生成?
将生成的所有数据作为下一次生成的参数,不断依次迭代进行,直到触发结束任务。
比如:输入一个”我”,希望ChatGPT生成一个我是一只小小鸟。
模型:GPT的大脑,也就是一种算法,对应着输入和输出。
通过大量高质量的学习材料,来学习通用规律,以便于能够根据上文自动生成下文内容,学习的方式就是单字接龙。
学习材料:各种互联网文本、书籍、语音、视频等…
还有一些问答范例的学习,比如:
白日依山尽的下一句是什么?
白日依山尽的下一句是黄河入海流。
…………………………..
大模型学习步骤
- 通过大量的数据学习人类的语义关系和语法规律。(开卷有益)
让ChatGpt对海量的互联网文本做单字接龙,以扩充模型的词汇量,语言知识、关于世界的信息和知识。使ChatGpt从一只“不会说话的鹦鹉”变成脑容量超级大的懂王鹦鹉。
注意:模型训练的目的不是记忆,而是学习提问和回答的通用规律。以便于当遇见从没有记忆过的提问时,也能够生成用户想要的回答。
OpenAI | 学习材料 | 参数(类比函数的入参) | 实际效果 |
---|---|---|---|
GPT-1 | 5GB | 1.17亿 | 平平无奇 |
GPT-2 | 40GB | 15亿 | 平平无奇 |
GPT-3 | 45TB | 1750亿 | 人类各种词语搭配和语法规则几乎都已明白 |
- 矫正GPT模型参数,让模型输出我们想要的结果 (模板规范)
让ChatGPT使用优质的,人工选择的优质对话范例进行单字接龙学习,以规范回答的对话模式和内容,使得ChaptGPT变成“懂规矩的博学鹦鹉”。
- 增强GPT的创新性,避免变成机械式的刻板回答(创意引导)
让ChatGpt根据人类对它生成答案的好坏评分来调节模型,以引导它生成人类认可的创意回答。使得ChatGPT变成既懂规矩又会试探的博学鹦鹉。
ChatGPT没有意识,没有思想,也没有欲望,只是一个算法模型,通过输入参数计算出输出结果而已。
编写一个优秀的Prompt步骤
原则:
你让模型猜测的东西越少,你得到的答案就会越精准。
明确指令和相关上下文
示例一:
示例二:
防止错误答案
让模型充当一个角色
使用分隔符来清楚的区分不同部分
对于简单直接的任务,使用分隔符可能不会对输出质量产生影响。然而,任务越复杂,消除任务细节的歧义就越重要。不要让模型费力去理解你具体要求什么。分隔符可以用 三引号、xml标签 等格式。
指定完成任务的步骤
指定GPT的输出步骤:
提供示例
当我们想要指定某一种输出格式,或者是某个想法难以用语言描述的时候,我们可以通过给出示例的方式来达到我们的效果。Gpt会模仿示例的要求进行回答。也就是”找规律”。
指定你想要的输出
这些模型无法读懂你的想法。如果输出太长,就要求它简短答复。如果输出太简单,就要求它用专家级别的能力来回复。如果你不喜欢输出的格式,请演示你希望看到的格式。
案例一:
案例二:
Prompt实战
工作用
编写一个mysql自动化部署脚本
你是一名ansible技术的大师,对ansible有着非常丰富的理论和实践经验。
我现在需要编写一个自动化部署mysql的剧本。以下是我当前已有的一些数据、环境现状以及要求:
“””
- 通过容器部署mysql,最终部署目录在/data/mysql目录下。
- 在/opt/home目录下有mysql的docker容器、docker-compose.yml、.env文件,该容器通过docker-compose命令进行启动。
- 容器初始化的时候需要自动执行一些初始化的sql脚本,脚本目录在/opt/home/sql目录下。
- 容器的配置文件、数据等目录需要从容器中挂载到宿主机的/opt/data目录中。
- mysql的端口、运行密码需要从变量中读取。
“””
请根据以上要求帮我编写一个自动化部署mysql的剧本。请确保你给出的剧本没有错误,如果你不清楚,请在{}中标注你不知道。另外,每一个步骤给出详细的注释。
以下是GPT生成的内容:
---
- name: 部署MySQL容器
hosts: your_target_host
become: yes
tasks:
- name: 安装Docker和Docker Compose
apt:
name:
- docker.io
- docker-compose
state: present
- name: 创建主机上的目标目录
file:
path: /data/mysql
state: directory
# 如果还有其他目录需要创建,请在此添加
- name: 复制MySQL Docker文件到 /opt/home
copy:
src: /path/to/your/mysql-docker-files/
dest: /opt/home
# 请确保将 /path/to/your/mysql-docker-files/ 替换为实际路径
- name: 使用Docker Compose启动MySQL容器
command: docker-compose -f /opt/home/docker-compose.yml up -d
args:
chdir: /opt/home
- name: 等待MySQL容器启动(根据需要调整等待时间)
wait_for:
timeout: 60
- name: 将MySQL初始化SQL脚本复制到容器
docker_copy:
container: "{{ your_mysql_container_name }}"
src: /opt/home/sql
dest: /docker-entrypoint-initdb.d
# 请将 "{{ your_mysql_container_name }}" 替换为实际的容器名称
- name: 将MySQL配置文件和数据目录挂载到主机的 /opt/data
docker_container:
name: "{{ your_mysql_container_name }}"
volumes:
- /opt/data:/var/lib/mysql
restart_policy: always
# 请将 "{{ your_mysql_container_name }}" 替换为实际的容器名称
- name: 设置MySQL的root密码和端口
docker_container_exec:
container: "{{ your_mysql_container_name }}"
command: bash -c "mysql -u root -p'{{ your_mysql_root_password }}' -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '{{ your_mysql_root_password }}';""
# 请将 "{{ your_mysql_container_name }}" 和 "{{ your_mysql_root_password }}" 替换为实际的容器名称和密码
- name: 确保MySQL容器重新启动以应用更改
docker_container:
name: "{{ your_mysql_container_name }}"
state: restarted
# 请将 "{{ your_mysql_container_name }}" 替换为实际的容器名称
实现某个算法
Prompt
你是算法编程方面的大师,获得过国际上各种顶尖算法比赛的冠军。
我现在需要编写一个算法:
输入一个列表a和一个整数count,将列表a拆分为多个子列表,子列表的个数由count指定,最后输出这个子列表。
要求:Java语言实现、考虑到各种可能会发生的异常情况。
输出:
import java.util.ArrayList;
import java.util.List;
public class ListSplitter {
public static List<List<Integer>> splitList(List<Integer> originalList, int count) {
List<List<Integer>> resultLists = new ArrayList<>();
try {
// 判断拆分的集合是否为空,或者拆分大小是否小于1,如果是,抛出异常
if (originalList == null || count < 1) {
throw new IllegalArgumentException("Invalid input. List cannot be null, and count should be greater than 0.");
}
int size = originalList.size();
// 判断集合是否大于拆分的长度,大于拆分,小于直接把原集合存入总集合
if (size > count) {
int pre = size / count;
int last = size % count;
//前面pre个集合,每个集合大小都是count个元素
for (int i = 0; i < pre; i++) {
List<Integer> itemList = new ArrayList<>();
for (int j = 0; j < count; j++) {
itemList.add(originalList.get(i * count + j));
}
resultLists.add(itemList);
}
// 处理剩余不足count大小的数据
if (last > 0) {
List<Integer> itemList = new ArrayList<>();
for (int i = 0; i < last; i++) {
itemList.add(originalList.get(pre * count + i));
}
resultLists.add(itemList);
}
} else {
resultLists.add(originalList);
}
} catch (Exception e) {
// 捕捉异常,并打印错误信息
e.printStackTrace();
}
return resultLists;
}
public static void main(String[] args) {
// 示例使用
List<Integer> originalList = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
originalList.add(i);
}
int count = 3;
List<List<Integer>> result = splitList(originalList, count);
// 打印结果
System.out.println("Original List: " + originalList);
System.out.println("Split Result: " + result);
}
}
辅助编程
编写一个Cypher语句
我们来玩一个角色扮演游戏,你是Neo4j技术的大师,有着非常丰富的实战和理论经验。
我现在有两个节点:STUDENT、SCHOOL。一个关系:STUDY。我现在想要编写一个cypher语句:查找所有在SCHOOL中有STUDY关系的STUDENT节点。并根据SCHOOL进行分组。我的输入是一个SCHOOL节点id的列表。
要求:专业、严谨;确保你给出的代码是正确的,如果你不知道,请直接回答你不知道,否则不要给出任何的解释。
生活助手
讯飞星火、百度等大模型中已经集成了很多类型的插件可以直接使用。
讯飞星火:
以生成PPT为例
百度文心一言:
副业发展
可以通过自己Prompt制作各种各样的助手应用。也可以使用别人已经制作好的助手直接使用。
总结
目前的ChatGpt可能还不能够很好的处理范围很大、业务性强的一些事情。(或者说需要完成这种任务需要编写的Prompt可能都需要成千上万个字)
但是对我们大部分普通人来说,在日常生活、工作中针对于某些具体的事情,非常细分且明确的事情,它往往能够给出比较好的答案,并且还能够极大程度的解放我们的双手,提高工作效率。
因此,非常值得在学习和工作中拥抱大模型,感受这个新的时代。
大模型百花齐放
CHATGPT4.0
官网地址:openai.com/gpt-4
当前最强大的大模型。各方面性能都遥遥领先。
CHATGPT3.5
免费使用网址:chat-shared3.zhile.io/shared.html…
个人感觉比国内的一众大模型好用很多…
文心一言
官网注册账号即可使用:yiyan.baidu.com/
百度开发的大模型,个人感觉比较适用于零基础小白。
讯飞星火
官网注册账号即可使用:xinghuo.xfyun.cn/desk
科大讯飞开发的大模型,专业性稍微强一些。各种助手也很丰富。可以创建自己的模型。
通义千问
官网注册即可使用:tongyi.aliyun.com/
阿里巴巴开发的大模型,更加专注于一个生态。
腾讯混元大模型
官网注册即可使用:hunyuan.tencent.com/bot/chat
腾讯开发的大模型,更加专注于一个生态。
关联网站
OpenAi官网Prompt学习:platform.openai.com/docs/introd…
Prompt中文学习指南:prompt-guide.xiniushu.com/
GitHub上很吊的一些开源项目:
Prompt学习:github.com/f/awesome-c…
制造喵:github.com/PlexPt/awes…