我正在参加「豆包MarsCode AI练中学体验活动」详情请看:掘金小册上线 AI练中学功能 | 你的 AI 编程助教喊你免费领小册啦!
前言
大型语言模型是一种人工智能模型,通常采用深度学习方法,如神经网络,以理解和生成人类语言。这些模型的“大”体现在其参数规模上,参数数量可高达数十亿甚至更多,这使它们能够处理和生成极其复杂的语言结构。
你可以将大型语言模型视为一个庞大的预测引擎,其训练过程主要依赖于“猜测词语”:给定一段文本的开头,它的任务是预测接下来的词语。模型通过大量的训练数据(例如从互联网上抓取的文本),尝试理解词语和短语在语言中的使用和含义,以及它们如何组合以形成意义。它会通过持续学习和调整参数,使自己的预测越来越精确。
例如,当我们给模型一个句子:“今天的天气真”,模型可能会预测出“好”作为下一个词,因为在它所见的大量训练数据中,“今天的天气真好”是一个常见的表达。这种预测不仅基于词语的统计关系,还包括对上下文的理解,有时甚至能反映出对世界常识的认知,比如它会理解到,人们通常会在天气好的时候进行户外活动。因此,它能够继续生成或推理出相关的内容。
然而,大型语言模型并不真正理解语言,它们缺乏人类的情感、意识或理解力。它们只是通过复杂的数学函数学习到的语言模式,作为一个概率模型来进行预测,因此有时会出错,或者生成不合理甚至偏离主题的内容。
入门指南
LangChain 是一个全面的、基于大型语言模型预测能力的应用开发工具,它的灵活性和模块化特性使得处理语言模型变得非常简便。无论何时何地,你都可以利用它轻松调用语言模型,并基于语言模型的“预测”或“推理”能力开发新的应用。
安装
# 安装LangChain
pip install langchain
# OpenAI的API接口
pip install openai
# 向量数据库
pip install chroma
# 安装常用的开源LLM(大语言模型) 库:
pip install langchain[llms]
社区文档
LangChain GitHub社区地址:点击跳转
LangChain 文档地址:点击跳转
OpenAi Api
1. Api keys
TPM和RPM分别代表tokens-per-minute、requests-per-minute。也就是说,对于GPT-4,你通过API最多每分钟调用200次、传输40000个字节。
在这里,我们需要着重介绍的是图中的两类模型:Chat Model和Text Model。这两类模型是大语言模型的典型代表。当然,OpenAI还提供了Image、Audio等其他类型的模型,但目前它们不是LangChain支持的重点,且数量相对较少。
- Chat Model,即聊天模型,用于生成人类与AI之间的对话,其代表模型包括gpt-3.5-turbo(即ChatGPT)和GPT-4。此外,OpenAI还提供了其他版本,如gpt-3.5-turbo-0613,代表ChatGPT在2023年6月13日的快照,而gpt-3.5-turbo-16k则表示该模型可以处理16K长度的Token,而非通常的4K。(需要注意的是,gpt-3.5-turbo-16k尚未向我们开放使用,且传输的字节越多,费用也越高)
- Text Model,即文本模型,在ChatGPT问世之前,人们主要使用这种模型的API来调用GPT-3,其代表作是text-davinci-003(基于GPT3)。在这个模型家族中,还有专门用于文本嵌入的text-embedding-ada-002,以及专门用于相似度比较的模型,如text-similarity-curie-001。
上述两种模型提供的功能相似,都是接收对话输入(input,也称为prompt),并返回回答文本(output,也称为response)。但是它们的调用方式和所需的输入格式有所不同。
2.Text 模型
# 导入API Key
import os
import openai
# OpenAI库就会查看名为OPENAI_API_KEY的环境变量,并使用它的值作为API密钥。
os.environ["OPENAI_API_KEY"] = '你的Open API Key'
# 调用Text模型,并返回结果
response = openai.Completion.create(
model="text-davinci-003",
temperature=0.5,
max_tokens=100,
prompt="请给我的花店起个名")
#打印输出大模型返回的文字。
print(response.choices[0].text.strip())
在调用OpenAI的文本生成模型时,你可以通过设置一些参数来调整输出的内容和风格
3.Chat模型
从整体流程来看,Chat模型和Text模型的调用方式基本相同,主要区别在于输入(prompt)和输出(response)的数据格式。
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are a creative AI."},
{"role": "user", "content": "请给我的花店起个名"},
],
temperature=0.8,
max_tokens=60
)
print(response['choices'][0]['message']['content'])
在这段代码中,除了之前提到的temperature、max_tokens等参数外,还有两个特定于Chat模型的概念:消息和角色!
消息:传递给模型的提示。这里的messages参数是一个列表,包含多个消息。每条消息都有一个role(可以是system、user或assistant)和一个content(消息的具体内容)。系统消息设定了对话的背景(例如,你是一个很棒的智能助手),而用户消息则提出了具体请求(例如,请给我的花店起个名)。模型的任务是基于这些消息生成回复。
角色:在OpenAI的Chat模型中,system、user和assistant是消息的角色。每种角色都有其特定的含义和作用。
- system:系统消息主要用于设定对话的背景或上下文。这有助于模型理解其在对话中的角色和任务。例如,你可以通过系统消息设定一个场景,让模型知道它是在扮演一个医生、律师或一个知识丰富的AI助手。系统消息通常在对话开始时给出。
- user:用户消息是从用户或人类角色发出的。它们通常包含用户希望模型回答或完成的请求。用户消息可以是一个问题、一段话,或者任何其他用户希望模型响应的内容。
- assistant:助手消息是模型的回复。例如,在你使用API发送多轮对话中的新对话请求时,可以通过助手消息提供先前对话的上下文。然而,请注意,对话的最后一条消息应始终为用户消息,因为模型总是要回应这条用户消息。
4. Chat模型 vs Text模型
Chat模型优势 更适合处理对话或多轮交互的场景。这是因为Chat模型可以接受一个消息列表作为输入,而不仅仅是一个字符串。这个消息列表可以包含system、user和assistant的历史信息,从而在处理交互式对话时提供更多的上下文信息。
- 对话历史的管理:通过使用Chat模型,你可以更方便地管理对话的历史,并在需要时向模型提供这些历史信息。
- 角色模拟:通过system角色,你可以设定对话的背景,给模型提供额外的指导信息,从而更好地控制输出的结果。当然在Text模型中,你也可以在提示中为AI设定角色,作为输入的一部分。
Text模型优势 可能会更简单、更直接。例如,如果你只需要模型根据一个简单的提示生成一段文本,那么Text模型可能更适合。
Langchain调用
Text模型
import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'
from langchain.llms import OpenAI
llm = OpenAI(
model="text-davinci-003",
temperature=0.8,
max_tokens=60,)
response = llm.predict("请给我的花店起个名")
print(response)
输出:
花之缘、芳华花店、花语心意、花风旖旎、芳草世界、芳色年华
Chat模型
import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI(model="gpt-4",
temperature=0.8,
max_tokens=60)
from langchain.schema import (
HumanMessage,
SystemMessage
)
messages = [
SystemMessage(content="你是一个很棒的智能助手"),
HumanMessage(content="请给我的花店起个名")
]
response = chat(messages)
print(response)