基本概念
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生成的内容:
yaml
复制代码
---
- 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语言实现、考虑到各种可能会发生的异常情况。
输出:
ini
复制代码
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…
如何学习大模型 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扫描下方二维码免费领取==🆓