LangChain系统安装和快速入门!

LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些API,搭建起来的一些框架、模块和接口。

安装LangChain

1
pip install langchain

安装LangChain时包括常用的开源LLM(大语言模型)库:

1
pip install langchain[llms]

安装完成之后,还需要更新到 LangChain的昀新版本,这样才能使用较新的工具。

1
pip install --upgrade langchain

如果你想从源代码安装,可以克隆存储库并运行:

1
pip install -e

GitHub:https://github.com/langchain-ai/langchain

文档:https://python.langchain.com/docs/introduction/

当我遇到问题,我通常会在LangChain的GitHub开一个Issue,很快就可以得到解答。

大模型的两种类型:Chat Model 和 Text Model:

类型 用途 代表模型 特点/说明
Chat Model 用于产生人类和AI之间的对话 gpt-3.5-turbo (ChatGPT), GPT-4 - gpt-3.5-turbo: 基础版 - gpt-3.5-turbo-0613: 2023年6月13日的快照版本 - gpt-3.5-turbo-16k: 支持更长上下文(16K tokens),未公开可用且成本更高
Text Model 在ChatGPT之前被广泛使用的API调用方式 text-davinci-003 (基于GPT-3) - text-similarity-curie-001: 专门用于文本相似度比较 - text-embedding-ada-002: 专为文本嵌入设计

上面这两种模型,提供的功能类似,都是接收对话输入(input,也叫prompt),返回回答文本(output,也叫response)。

但是,它们的调用方式和要求的输入格式是有区别的。

调用Text模型

第1步,先注册好你的API Key。

第2步,用pip install openai命令来安装OpenAI库。

第3步,导入 OpenAI API Key。

导入API Key有多种方式,其中之一是通过下面的代码。

1
2
import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'

OpenAI库就会查看名为OPENAI_API_KEY的环境变量,并使用它的值作为API密钥。

也可以像下面这样先导入OpenAI库,然后指定api_key的值。

1
2
import openai
openai.api_key = '你的Open API Key'

这种把Key直接放在代码里面的方法不可取,因为你一不小心共享了代码,密钥就被别人看到了。

  • 他就可以使用你的GPT-4资源。

所以,建议你给自己的OpenAI账户设个上限,比如每月10美元啥的。

更好的方法是在操作系统中定义环境变量,比如在Linux系统的命令行中使用:

1
export OPENAI_API_KEY='你的Open API Key'

或者,你也可以考虑把环境变量保存在.env文件中,使用python-dotenv库从文件中读取它。

  • 这样也可以降低API密钥暴露在代码中的⻛险。

第4步,导入OpenAI库,并创建一个Client。

1
2
from openai import OpenAI
client = OpenAI()

第5步,指定gpt-3.5-turbo-instruct(也就是Text模型)并调用completions方法,返回结果。

1
2
3
4
5
response = client.completions.create(
model="gpt-3.5-turbo-instruct",
temperature=0.5,
max_tokens=100,
prompt="请给我的花店起个名")

第6步,打印输出大模型返回的文字。

1
print(response.choices[0].text.strip())

调用Chat模型

整体流程上,Chat模型和Text模型的调用是类似的,只是前面加了一个chat。

  • 然后输入(prompt)和输出(response)的数据格式有所不同。
1
2
3
4
5
6
7
8
9
response = client.chat.completions.create(  
model="gpt-4",
messages=[
{"role": "system", "content": "You are a creative AI."},
{"role": "user", "content": "请给我的花店起个名"},
],
temperature=0.8,
max_tokens=60
)

有两个专属于Chat模型的概念,一个是消息,一个是⻆色。

消息:

就是传入模型的提示,此处的messages参数是一个列表,包含了多个消息。

每个消息都有一个role(可以是system、user或assistant)和content(消息的内容)。

  • 系统消息设定了对话的背景,然后用户消息提出了具体请求。

模型的任务是基于这些消息来生成回复。

⻆色:

在OpenAI的Chat模型中,system、user和assistant都是消息的⻆色。

  • 每一种⻆色都有不同的含义和作用。

system:系统消息主要用于设定对话的背景或上下文。

  • 这可以帮助模型理解它在对话中的⻆色和任务。
  • 例如,你可以通过系统消息来设定一个场景,让模型知道它是在扮演一个医生、律师或者一个知识丰富的AI助手。
  • 系统消息通常在对话开始时给出。

user:用户消息是从用户或人类⻆色发出的。

  • 它们通常包含了用户想要模型回答或完成的请求。

  • 用户消息可以是一个问题、一段话,或者任何其他用户希望模型响应的内容。

assistant:助手消息是模型的回复。

  • 例如,在你使用API发送多轮对话中新的对话请求时,可以通过助手消息提供先前对话的上下文。

  • 然而,请注意在对话的最后一条消息应始终为用户消息,因为模型总是要回应最后这条用户消息。

响应:

在使用Chat模型生成内容后,返回的响应,也就是response会包含一个或多个choices,每个choices都包含一个message。

  • 每个message也都包含一个role和content。

role可以是system、user或assistant,表示该消息的发送者,content则包含了消息的实际内容。

一个典型的response对象可能如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
response = 
{
'id': 'chatcmpl-2nZI6v1cW9E3Jg4w2Xtoql0M3XHfH',
'object': 'chat.completion',
'created': 1677649420,
'model': 'gpt-4',
'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
'choices': [
{
'message': {
'role': 'assistant',
'content': '你的花店可以叫做"花香四溢"。'
},
'finish_reason': 'stop',
'index': 0
}
]
}

Chat模型和Text模型都有各自的优点,其适用性取决于具体的应用场景。

相较于Text模型,Chat模型的设计更适合处理对话或者多轮次交互的情况。

  • 这是因为它可以接受一个消息列表作为输入,而不仅仅是一个字符串。

这个消息列表可以包含system、user和assistant的历史信息,从而在处理交互式对话时提供更多的上下文信息。

对于简单的单轮文本生成任务,使用Text模型可能会更简单、更直接。

  • 例如,如果你只需要模型根据一个简单的提示生成一段文本,那么Text模型可能更适合。

从上面的结果看,Chat模型给我们输出的文本更完善,是一句完整的话,而Text模型输出的是几个名字。

  • 这是因为ChatGPT经过了对⻬(基于人类反馈的强化学习),输出的答案更像是真实聊天场景。

这种设计的主要优点包括:

对话历史的管理:

通过使用Chat模型,你可以更方便地管理对话的历史,并在需要时向模型提供这些历史信息。

例如,你可以将过去的用户输入和模型的回复都包含在消息列表中,这样模型在生成新的回复时就可以考虑到这些历史信息。

⻆色模拟:

通过system⻆色,你可以设定对话的背景,给模型提供额外的指导信息,从而更好地控制输出的结果。

当然在Text模型中,你在提示中也可以为AI设定⻆色,作为输入的一部分。

通过 LangChain 调用 Text 和 Chat 模型

调用 Text 模型:

1
2
3
4
5
6
7
8
9
import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'
from langchain.llms import OpenAI
llm = OpenAI(
model="gpt-3.5-turbo-instruct",
temperature=0.8,
max_tokens=60,)
response = llm.predict("请给我的花店起个名")
print(response)

调用 Chat 模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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)