青训营X豆包MarsCode AI技术训练营——LangChain启蒙 | 豆包MarsCode AI刷题

184 阅读7分钟

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,可以创建如下: image.png 但是没有额度,因此可以转为使用具有免费额度的大模型,例如Kimi(免费额度15元)、Doubao(免费token) image.png image.png

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放入到了环境变量里边)

image.png image.png image.png

初步了解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'])

image.png

两个专属概念: 消息角色 优点:方便管理对话历史,你必要时候将回答作为输入,使得模型可以考虑历史回复

Langchain

简介

一种为开发者提供的强大开发框架(工具集、包),以简化基于大语言模型的应用程序的开发流程。本质上是对各种大模型API的套壳,以方便使用。

image.png

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上的其他开源模型

未完待续...