LangChain系统安装和快速入门!
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 | import os |
OpenAI库就会查看名为OPENAI_API_KEY的环境变量,并使用它的值作为API密钥。
也可以像下面这样先导入OpenAI库,然后指定api_key的值。
1 | import openai |
这种把Key直接放在代码里面的方法不可取,因为你一不小心共享了代码,密钥就被别人看到了。
- 他就可以使用你的GPT-4资源。
所以,建议你给自己的OpenAI账户设个上限,比如每月10美元啥的。
更好的方法是在操作系统中定义环境变量,比如在Linux系统的命令行中使用:
1 | export OPENAI_API_KEY='你的Open API Key' |
或者,你也可以考虑把环境变量保存在
.env
文件中,使用python-dotenv库从文件中读取它。
- 这样也可以降低API密钥暴露在代码中的⻛险。
第4步,导入OpenAI库,并创建一个Client。
1 | from openai import OpenAI |
第5步,指定gpt-3.5-turbo-instruct(也就是Text模型)并调用completions方法,返回结果。
1 | response = client.completions.create( |
第6步,打印输出大模型返回的文字。
1 | print(response.choices[0].text.strip()) |
调用Chat模型
整体流程上,Chat模型和Text模型的调用是类似的,只是前面加了一个chat。
- 然后输入(prompt)和输出(response)的数据格式有所不同。
1 | response = client.chat.completions.create( |
有两个专属于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 | response = |
Chat模型和Text模型都有各自的优点,其适用性取决于具体的应用场景。
相较于Text模型,Chat模型的设计更适合处理对话或者多轮次交互的情况。
- 这是因为它可以接受一个消息列表作为输入,而不仅仅是一个字符串。
这个消息列表可以包含system、user和assistant的历史信息,从而在处理交互式对话时提供更多的上下文信息。
对于简单的单轮文本生成任务,使用Text模型可能会更简单、更直接。
- 例如,如果你只需要模型根据一个简单的提示生成一段文本,那么Text模型可能更适合。
从上面的结果看,Chat模型给我们输出的文本更完善,是一句完整的话,而Text模型输出的是几个名字。
- 这是因为ChatGPT经过了对⻬(基于人类反馈的强化学习),输出的答案更像是真实聊天场景。
这种设计的主要优点包括:
对话历史的管理:
通过使用Chat模型,你可以更方便地管理对话的历史,并在需要时向模型提供这些历史信息。
例如,你可以将过去的用户输入和模型的回复都包含在消息列表中,这样模型在生成新的回复时就可以考虑到这些历史信息。
⻆色模拟:
通过system⻆色,你可以设定对话的背景,给模型提供额外的指导信息,从而更好地控制输出的结果。
当然在Text模型中,你在提示中也可以为AI设定⻆色,作为输入的一部分。
通过 LangChain 调用 Text 和 Chat 模型
调用 Text 模型:
1 | import os |
调用 Chat 模型:
1 | import os |