¶
统计信息:字数 20199 阅读41分钟
AI 大模型¶
原始教程链接: https://aistudio.baidu.com/education/group/info/28604
概述¶
课程来源:知乎云课堂+百度飞桨
集成后文档比较大,加载图片可能服务器返回 503 错误,所以可以点击链接访问原始网页:https://cloud.seatable.cn/dtable/external-links/621babd7e22b4ceb88ec/
AI 概述¶
https://www.zhihu.com/question/599713780/answer/3055040756
介绍了 GPT1-4的论文和主要变化,深度学习等概念,目前论文下载好了,阅读难度比较大。整体上需要扎实的 Python 基础,扎实的数据结构和算法基础,扎实的统计概率基础等。直接学习核心原理比较困难,学习思维以及 python 基本的逻辑是很重要的。个人目标:AI 如何提升程序员的工作效率?如何在其他场景中使用这个技术?争取自己做出一个 demo,可以部署在小说阅读器项目中
学习资料¶
各种资料,选择最好的
https://www.zhihu.com/education/video-course/1556316449043668992
https://www.zhihu.com/education/learning
知乎-01使用 Assistant 搭建 AI 助手¶
链接:https://www.zhihu.com/education/training/course-detail/1744009771047370752
来源:知乎在线视频,简单介绍 GPT assistant 如何搭建一个 AI 助手,概述 + demo
讲师是一个创业失败的产品经理出身,也干过一点技术,这个就是入门介绍
和 AI 大模型相关的四种人¶
1、底层开发工程师:训练基础大模型 GPT4,为大模型提供硬件层面的算力(英伟达),门槛很高
2、AI 开发程序员:编程实现 AI 工具——重点目标
3、AI 产品经理:给用户设计AI程序,或者给自己设计AI程序
4、用户
AI能力的上限是使用者的判断力。AI很强,那么用户需要足够强,才能生效。如果用户能力不强,那么AI发挥效果发挥不出来(AI辅助编程,那么原始用户的编程能力应该需要很强)。
大模型应用的知识体系¶
大模型应用的技术架构如下,从简单到复杂又四种应用。
应用1:应用程序直接输入 prompt 调用基础大模型 API,基础大模型返回 response,可以理解为静态固定的数据(使用市面上已知的开源基础大模型训练的结果)
应用2:在1的基础上,加入了外部第三方 APIs,例如百度地图 API,或者微信 API。那么基础大模型就可以调用特定服务器的 API,然后完成特定的操作(导航,分享朋友圈等)下面做的 demo 就是这个级别的应用。agent 智能体:大模型向 server 发送要求(应用程序应该调用某个API获取某个信息)的部分。大模型是静态的数据,没有直接访问外部API的能力,所以通过应用程序执行这个外部API。例如:明天出门是否带伞?先向API查询明天北京的天气,查询到结果之后才能确定是否带伞。
应用3:进一步增加了 RAG。传统的知识体系是 mysql 关系型数据库,现在很多外部知识库是特定的数据结构(例如实时爬虫爬取的新闻数据),先把这部分知识转换成向量数据库,然后已有大模型调用这部分数据库。
检索增强生成(Retrieval-augmented Generation,RAG),是当下最热门的大模型前沿技术之一。如果将“微调(fine tune)”理解成大模型内化吸收知识的过程,那么RAG就相当于给大模型装上了“知识外挂”,基础大模型不用再训练即可随时调用特定领域知识。
向量数据库是一种特殊的数据库,它具备数据存储和读取的基础能力,同时也有一个特殊的查询操作,即向量检索。类似的是 redis 向量检索。
应用4:加入微调。很多实际行业场景和基础大模型有出入,那么需要对实际行业的参数进行微调和限制。这部分也是提高精度的重要因素,也是现在很多应用岗位实际做的事情。
具体的知识点:Embedding: 相似度计算、聚类分析、词向量、句子向量,这部分比较基础和底层
提供 Assistant API 的框架 streamLit¶
这个应用可以调用 openai 的接口,使用自定义的 API 对基本功能进行扩展。
框架:streamLit 更方便快速的搭建分享应用,是一个入门简单的 python 框架,直接给配置即可,不需要考虑路由等细节。
Assistant = Thread(界面交互的UI,一串对话) + Run(内部逻辑,包括获取信息,AI 执行,显示返回结果)
AI Client —— Assistant —— Thread —— message —— server run —— response
每一个类都有很多 API,直接调用即可(实际生产项目使用自己实现)
Demo 滴滴打车¶
config.toml
[server]
# 允许访问本地静态资源(图片和 favicon)
enableStaticServing = True
utils.py 自定义的 API,AI 可以直接调用
# coding=utf-8
# by Michael An
import time
import streamlit as st
def get_current_time(*arg, **kwargs):
# API 返回自然语言,不能返回对象,模型不能理解对象
return f'现在时间是{time.strftime(format: "%H:%M:%S", time.localtime())}'
def random_placeholder_text():
text_list = [
'Your message',
'Say hello',
]
return text_list[int(time.time()) % len(text_list)]
# user avatar setting
ICON = 'static/avatar.png'
ICON_USER = 'user'
def append_and_show(role, content):
"""
将消息添加到 messages 列表中,并展示
role: 角色, assistant or user
content: 消息内容
"""
st.session_state.message.append({"role": role, "content": content})
st.chat_message(role, avatar = ICON if role == 'assistant' else ICON_USER).write(content)
if __name__ == '__main__':
print(random_placeholder_text())
第三方给出的 server API 地图
# 高德地图 API
# 获取开始和结束的经纬度和 POI ID
# 获取开始和结束的驾车时间和距离
import requests
map_key = '123'
def get_poi_id(address):
params = {
'key': key,
'keywords': address
}
response = response.get('https://restapi.amap.com/v5', params=params)
location = response.json()['pois'][0]['location']
poi_id = response.join()['pois'][0]['id']
return location, poi_id
def get_distance_time(origin, destination):
origin_location, origin_id = get_poi_id(origin)
destination_location, destination_location = get_poi_id(destination)
params = {
'key': key,
'origin': origin_location,
}
主函数:
import json
import logging
from dotenv import load_dotenv
from openai import OpenAI
from tools.utils import *
from tools.amsp import get_distance_time
load_dotenv()
logging.basicConfig(level=logging.INFO)
# 初始化 client
client = OpenAI()
availavle_functions = { 'get_current_time':
get_current_time, 'get_distance_and_duration':
get_distance_time, }
# 获取创建好的 assistant
assistant = client.beta.assistants.retrive('token-xxxxxxxxx')
# streamlit 初始化
st.set_page_config(
page_title="打车车费估算模型",
page_icon="icon",
)
# 初始展示
st.caption('使用 open AI Assistant 结合其他技术,实现打车 demo')
if "message" not in st.session_state:
st.session_state["message"] = [
{
"role": "assistant",
"content": "我是打车助手"
}
]
#
if "thread" not in st.session_state:
thread = client.beta.threads.create()
st.session_state['thread'] = thread
for msg in st.session_state.messages:
st.chat_message(msg["role"], avatar=ICON if msg["role"] == 'assistant' else ICON_USER).write(msg['content'])
# 核心逻辑
if prompt := st.chat_input():
append_and_show("user", prompt)
message = client.beta.threads.messages.create(thread_id=st.session_state.thread.id, role="user", content=prompt)
run = client.beta.threads.runs.create(thread_id=st.session_state.thread_id, assistant_id=assistant.id)
# 轮训(忽略了处理细节)
while True:
try:
# 轮训等待,更新run状态
if run.status == 'queued' or run.status == 'in_progress':
pass
# 执行本地方法
elif run.status == 'requires_action':
pass
# 完成后,显示最新消息
elif run.status == 'completed':
pass
except Exception, e:
logger.error(e)
raise
因为这是一个 demo 介绍,代码就忽略了很多技术细节
局限性:没有处理用户恶意调用 API 问题(调用API 费钱);没有处理安全合规问题等;没有更多的逻辑推断能力,格式不完美等等。所以这里需要高质量的 Prompt 提示词工程;没有处理图片视频音频等问题。
大模型对未来职业的影响¶
1、基本应用:单行代码提示
2、copilot: 提示一个函数或者一个模块
3、交互:支持上下文交互效果
4、社交性:模型不断学习新的数据库,从对话中学习
后续系列课程付费,这节课大概了解了 Assistant API 和基础概述
知乎-02大模型核心概述 + LangChain¶
Prompt Engineer 提示词工程¶
prompt 告诉大模型要做什么
怎样用在代码中(单轮问答,多轮交互)
案例¶
def example():
instruction = """帮我写一个课程框架,主题是react.js课程框架,200字."""
prompt = f"""{instruction}"""
response = getResponse(prompt)
print(response)
# 基于 prompt 生成文本
def getResponse(prompt, model='gpt-3.5-turbo-16k-0613'):
# messages 列表(存放对话信息)
# 目前支持单轮对话
messages = [
{
'role': 'user',
'content': prompt,
}
]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0,
)
return response.choices[0].message['content']
API 中主要的参数和说明:
model: 使用 GPT 的模型,默认是 gpt3.5 模型
messages: 对话数组。role 表示角色,支持 user, assistant, system 三种情况。assistant 表示 GPT 返回来的信息。system 表示环境系统变量,系统预先设置的信息。例如:你现在是一个化学老师,只能解答化学有关的问题。
tempetature: 温度,temperature 表示随机性,0最小,2最大,默认较小值0。如果给到 1.8 那么答案天马行空。
这里还有其他的参数,根据官方文档使用
注意点:¶
- 内容审核:harassment: true or false 对于不同类型骚扰如何处理
LangChain 大模型 pyhton 框架¶
LangChain 是一个面向大模型的开发框架,使用简单配置即可实现复杂的 AI 应用。内部封装了很多组件(网络模块)。可以把大模型和外部数据结合起来,输入自己的知识库,定制化大模型。
中文文档:https://www.langchain.com.cn/
基本介绍:https://zhuanlan.zhihu.com/p/644500258
使用 node 开发:https://js.langchain.com.cn/docs/getting-started/guide-llm
未来可以把这个放在阅读器中,自己写一个助手
关键申请一个 OPENAI_API_KEY 然后直接调用即可
IO 模块¶
这里的 IO 和计算机的 IO 输入设备输出设备无关,指的是向大模型输入和输出的模块,就是应用和大模型的接口。
- prompts:可以直接处理多种模型,不需要考虑不同模型的差异化,减少了程序员处理工作
- outputs: 解析输出的结果,分成普通的 LLM 和对话式的 chat_model,如下
- language model: 使用哪种语言模型进行解析
# prompts:可以直接处理多种模型
from langchain import PromptTemplate
prompt_template = PromptTemplate.from_template(
"Tell me a {adj} joke about {content}."
)
prompt_template.format(adj="funny", content="kids")
# model = LLM
prompt_template.format(adj="funny", content="kids")
from langchain.llms import OpenAI
llm = OpenAI()
print(llm.predict('Hello, '))
# model = chat_models
from langchain.chat_models import ChatOpenAI
chat_model = ChatOpenAI()
print(chat_model.predict('Hello, '))
数据连接模块¶
load: 加载数据,支持多种格式 Document loader(cvs, html, file, json, pdf)
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("test.pdf")
pages = loader.load_and_split()
print(pages[0].page_content)
transform: split(把数据切成块,就是上面的 split() 函数) + translate(把输入翻译成指定语言)
embed: 数据向量化,模型无法直接阅读文本或者字符串,只能处理数值。所以使用机器学习的方法,从数据中进行特征值提取,变成一个高维的数据(向量或者张量)
store:把向量存储后,和已有的数据集中的向量进行对比,比较相似程度,找到最相似的结果(判别)相似度的计算原理:两个点的距离是欧氏距离,两个向量的距离是余弦距离。
memory 模块:记忆化模块:与多轮对话强相关。使用已有的对话,训练出下一个结果。把下一个结果 message 作为参数(或者处理后的结果),继续询问大模型,就是记忆化模块。类似上下文处理。
from langchain.memory import ConversationBufferMemory
history = ConversationBufferMemory()
history.save_context({'input': 'hello'}, {'output': 'hi'})
# 注意:这里需要传参,是空的字典
print(history.load_memory_viriables({}))
history = ConversationBufferMemory()
history.save_context({'input': 'hi'}, {'output': 'hello'})
# 输出两轮对话
print(history.load_memory_viriables({}))
处理特别长的对话,使用另一个方法,增加最大队列长度
from langchain.memory import ConversationBufferWindowMemory
window = ConversationBufferWindowMemory(k=3)
window.save_context({'input': 'hi'}, {'output': 'hi'});
window.save_context({'input': 'hi'}, {'output': 'hi'});
window.save_context({'input': 'hi'}, {'output': 'hi'});
window.save_context({'input': 'hi'}, {'output': 'hi'});
window.save_context({'input': 'hi'}, {'output': 'hi'});
print(window.load_memory_variables({})) #3
# 总结前几轮的对话结果
from langchain.memory import ConversationSummaryMemory
from langchain.llms import OpenAI
memory = ConversationSummaryMemory(
llm=OpenAI(tempetature=0)
)
memory.save_context(
{'input': 'hello'},
{'output': 'hello, I am your AI assistant'}
)
print(memory.load_memory_variables({}))
Fine-tuning 微调¶
一般人和团队,没有时间和能力去从头训练一个大模型,所以就基于已有大模型进行微调。
from finetune import ModifiedTrainer, data_collator
from transformers import TrainingArguments
training_args = TrainingArguments(
"output",
fp16 = True,
gradient_accumulation_steps = 1,
seed = 0,
data_seed = 0,
group_by_length = False,
)
trainer = ModifiedTrainer(
model=model,
train_dataset=dataset,
args=training_args,
data_collator=data_collator
)
trainer.train()
百度-1. 开始构建你的优质Prompt¶
https://aistudio.baidu.com/education/lessonvideo/5168098
概念¶
大模型:LLM 是基于深度学习训练的模型(类似一个函数集)
提示词:Prompt 如何向大模型提问题,或者做出引导,让大模型更好的使用
AI 大模型的价值:已经在艺术创作(文字,图片)获得很多成就,大模型数据集可以出售,也提供了很多新岗位
大模型 Large-scale Model / Large Model
大模型是指具有大规模、高维度、复杂性强等特点的机器学习模型。随着数据量的增加和计算能力的提升,大模型在自然语言处理、计算机视觉、语音识别等领域得到了广泛应用。大模型的训练需要大量的数据和计算资源,同时也需要对模型进行优化和压缩,以便在实际应用中能够高效地运行。在自然语言处理领域,大模型一般指大规模语言模型。
历史发展¶
传统模型:RNN、CNN 为主的神经网络算法(2012年)
预训练模型:transformer 网络、Bert 和 GPT 1.0 为主(2020)、encoder
大模型:GPT 3.0 decoder,LLM,自回归模型
使用场景¶
1、创建大模型:类似 GPT 和文心一言,从0到1创建基础大模型。
2、基于已有大模型,训练适合某个行业或者某个企业的大模型。
3、基于已有大模型的技术,创建 AI + 其他行业 APP 或者第三方应用(例如用在医疗,教育,美术,游戏行业等)。
目前主要学习第二种和第三种使用场景。
陆奇-新范式新时代新机会¶
https://miracleplus.feishu.cn/file/TGKRbW4yrosqmixCtprcUlAynzg
陆奇最新演讲《新范式新时代新机会》完整PPT.pdf 可以扫码查看视频回放
新时代新范式¶
最下面一层是技术发展史,技术的发展促进了模型的变化
第一阶段:信息系统(计算机仅仅存储信息+人类观察总结模型+人类和环境交互)
第二阶段:模型系统(计算机把数据整理成一部分知识模型,例如百度地图会把基础的 GPS 和坐标转换成地图和导航,实际还需要人类和环境交互)
第三阶段:行动系统(计算机支持大模型,把很多知识模型整合成大模型,信息-模型-行动)例如自动驾驶,智能化更通用。
新范式下面有很多新机会
技术层面和对应的新产品
后半部分是创业团队的发展过程
稀土掘金大会 AIGC 部分¶
- 大模型和 AIGC :https://juejin.cn/live/dmxyaigc006
工具和教程¶
本地的 AI 工具
1、AI 网页版:这个账户使用谷歌邮箱登录,效果不错 https://poe.com/chat/3g5krmx7rie573x6t6h 需要翻墙
2、ChatGPT for Google 浏览器插件,需要翻墙+会员才可以
3、Monica 浏览器插件,需要翻墙+会员
学习网站
1、百度飞桨网站:https://aistudio.baidu.com/learn/center 集合了百度AI的各种资料,视频学习材料等
2、付费的 GPT API 工具 http://www.DMXAPI.com,LangChain 可以调用这个工具
3、AI 视频教程资源:https://www.ai360labs.com/playground/courseList
4、百度网盘下载的资料,下载很慢,最好直接在上面看,看一下然后可以删除
国内优先看百度的(资料看B站)