hello,这里是小仓鼠多多的学习笔记营地~!这是我第一次以博客的形式来记录自己的学习所获~!希望大家共同进步~
摘要
主要了解了当前AI发展的热点——大模型的发展背景、特点和应用场景,并学习如何利用LangChain写出最简单的程序调用大模型!
AI发展历程(大模型)
20世纪50年代,Frank Rosenblatt提出的感知器perception模型和Hebb提出的赫布Hebb学习理论奠定了AI的基础。
20世纪80-90年代经历寒冬(反向传播算法在此期间被提出)。
21世纪第一个十年,计算能力的提升(GPU应用于大规模并行计算)以及大规模数据集的出现推动了AI进一步发展。2006年Geoffrey Hinton提出的深度信念网络标志着深度学习的兴起。
2012年,Alex Krizhevsky提出的AlexNet网络在ImageNet竞赛上表现出优异效果,其图像分类准确率显著提高,掀起了深度学习浪潮。
2015年,Kaiming He提出了残差网络结构,使得超深层网络的训练成为可能,其ResNet网络在ImageNet竞赛中的准确率超越人类表现,标志着AI在复杂视觉任务中首次超越了人类水平!(ResNet及其后续变种成为了许多计算机视觉任务中的基准模型)
2018针对自然语言处理的大模型兴起。OPENAI发布的GPT-1使用Transformer架构(2017年提出)通过无监督的文本数据进行训练,展示出在文本生成方面的巨大潜力。随后Google发布了BERT,开创双向编码器预训练的先河。2019年基于BERT和GPT催生了一系列预训练语言模型,如T5、XLNet,在文本分类、翻译、摘要、问答等任务上取得显著效果。
2020年之后,预训练大模型进一步增大参数量并朝着多模态的方向发展,GPT-3已经达到1750亿,PaLM更是拥有着5400亿的参数量,诸如GPT-4,ImageMind,Gemini Ultra等多模态大模型层出不穷。
大模型的特点
-
规模庞大:包含数亿到数千亿参数,这使得其能捕捉复杂的模式与特征
-
预训练和微调:通常先在大规模无标签数据集上预训练,以学习通用的语言表示和其他任务的特征。然后针对特定任务进行微调,以较小的标注数据集优化其性能。
-
深度学习架构:通常采用深度神经网络架构,如Transformer,从而处理复杂输入,捕获长距离依赖关系。
-
多任务适应能力:相同的预训练在经过微调后也能适应多种下游任务。
-
多模态处理能力:图片、文本、音频...
-
可更新:通过接收新数据进行更新和适应
应用场景和相关岗位
应用场景:NLP、CV、语音识别与合成、对话系统与虚拟助手、推荐系统、医疗诊断、金融分析
相关岗位:应用层(大模型的部署、聊天机器人的搭建等)、模型层(大模型微调、优化等)、Infra层(底层高速计算硬件的研发)
大模型API的使用
1.首先获取API
以Openai为,其提供收费API Keys,可以创建如下:
但是没有额度,因此可以转为使用具有免费额度的大模型,例如Kimi(免费额度15元)、Doubao(免费token)
2.安装openai的相关sdk
pip install openai
3.调用接口
Kimi和Doubao的API兼容了Openai的接口规范,因此可以使用openai提供的Python SDK调用,调用范式如下。
client = OpenAI(
api_key = "your api keys",#配置API Keys
base_url = "your base url",#配置服务器地址
)
completion = client.chat.completions.create(
model = "your model or endpoint id",#配置模型名称
messages = [
{"role": "system", "content": "你是我的小助手"},
{"role": "user", "content": "我不开心。"}
],
max_tokens = 100,
temperature = 0.3,
)
print(completion.choices[0].message)
(练中学云IDE已经将相应的模型名称、openai的API,以及URL放入到了环境变量里边)
初步了解text模型与chat模型
openai已经发展出了text、chat、moderation、Fine-tuning Training、Image、Audio等不同类型的模型,各有特点,以text和chat举例
text模型(早期基于GPT3的text-davinci-003等)
更加适合单轮次文本生成,接受一个字符串作为输入
1.创建client实例,主要传递api_key,base_url这两个值
client = OpenAI(
api_key = "sk-MtrCNy0v9nOxnUot63KPeJoc91SPVSaUMSMG9lDmRcKlaMX5",
base_url = "https://api.moonshot.cn/v1",
)
2.指定模型,调用completions.create方法,输入参数返回结果
response=client.completions.create(
model='Doubao-por-32k',
temperature = 0.7,
max_tokens=100,
prompt="请给我的花店起一个名字")
3.解析模型返回结果,response对象是字典结构
print(response.choices[0].text.strip())
注意: openai已经不在使用completions接口,转为chat.completions
Chat模型(gpt-3.5-turbo、gpt-4)
更适合处理对话和多轮次交互的场景,接受一个包含system、user、assistant的消息列表作为输入
1.创建client实例,主要传递api_key,base_url这两个值
client = OpenAI(
api_key = "sk-MtrCNy0v9nOxnUot63KPeJoc91SPVSaUMSMG9lDmRcKlaMX5",
base_url = "https://api.moonshot.cn/v1",
)
3.指定模型,调用completions.create方法,输入参数返回结果
response=client.chat.completions.create(
model='Doubao-por-32k',
temperature = 0.7,
max_tokens=100,
messages = [
{"role": "system", "content": "你是我的小助手"},
{"role": "user", "content": "我不开心。"}
])
4.解析模型返回结果,response对象是字典结构,包含字段多个字段:
print(response['choices'][0]['message']['content'])
两个专属概念: 消息和角色 优点:方便管理对话历史,你必要时候将回答作为输入,使得模型可以考虑历史回复
Langchain
简介
一种为开发者提供的强大开发框架(工具集、包),以简化基于大语言模型的应用程序的开发流程。本质上是对各种大模型API的套壳,以方便使用。
LangChain包含六大特点:
- 模型:包含各大语言模型的LangChain接口和调用细节以及输出解析机制
- 提示模板:
- 数据检索:
- 记忆:存储与检索对话记录,让chatbot知道你是谁
- 链:核心机制
- 代理:核心机制,通过“代理”使得模型自动调用外部工具和内部工具
代理究竟是什么?
Agents=LLM+memory+planning skills+tool use
其中LLM是大脑,planning skills是分析拆解问题、规划解决问题的能力,tool use是评估所需工具、选择合适工具并发出请求,memory分为短、长期记忆
LangChain安装
langchain的安装(以python为例):
pip install langchain
为了和各种模型的接口、数据存储库兼容(例如openai api,HuggingFace Hub,向量数据库):
pip install langchain[llms]
为了保证是最新版本:
pip install --upgrade langchain
LangChain的相关学习资料:
Github链接:github.com/langchain-a… API 参考:python.langchain.com/api_referen…
Langchain快速入门
langchain调用text
from langchain.llms import OpenAI
llm = OpenAI(
model="Doubao-pro-32k",
api_key="sk-88418030e5652245d5e62dce2c0c5750e4e60dfc01747dcc84fbe8364fbb0ffa",
base_url="https://a0ai-api.zijieapi.com/api/llm/v1",
temperature=0.8,
max_tokens=600,
)
response = llm.predict("请给我的花店起个名")
print(response)
导入OpenAI这种方式已经在高版本的langchain中被弃用了
langchain调用chat
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage
llm = ChatOpenAI(
model="Doubao-pro-32k",
api_key="sk-88418030e5652245d5e62dce2c0c5750e4e60dfc01747dcc84fbe8364fbb0ffa",
base_url="https://a0ai-api.zijieapi.com/api/llm/v1",
temperature=0.8,
max_tokens=600,
)
messages=[
SystemMessage(content="你是一个专业的花店老板,你会给花店起一个好听的名字。"),
HumanMessage(content="请给我的花店起个名"),
]
response = llm(messages)
print(response)
主要通过导入LangChain的chatopenai,创建llm对象,另外从langchain的schema模块中导入SystemMessage和HumanMessage类,创建消息列表。
LangChain已经将返回结果在Openai的基础上进行了精简。
langchain调用HuggingHub上的其他开源模型
未完待续...