当前位置: 首页 > news >正文

[极客时间]LangChain 实战课 ----- 01|LangChain系统安装和快速入门(2)

在我们开始正式的学习之前,先做一些基本知识储备。虽然大语言模型的使用非常简单,但是如果我们通过 API 来进行应用开发,那么还是有些基础知识应该先了解了解,比如什么是大模型,怎么安装 LangChain,OpenAI 的 API 有哪些类型,以及常用的开源大模型从哪里下载等等。

什么是大语言模型

大语言模型是一种人工智能模型,通常使用深度学习技术,比如神经网络,来理解和生成人类语言。这些模型的“大”在于它们的参数数量非常多,可以达到数十亿甚至更多,这使得它们能够理解和生成高度复杂的语言模式。
你可以将**大语言模型想象成一个巨大的预测机器,其训练过程主要基于“猜词”:**给定一段文本的开头,它的任务就是预测下一个词是什么。模型会根据大量的训练数据(例如在互联网上爬取的文本),试图理解词语和词组在语言中的用法和含义,以及它们如何组合形成意义。它会通过不断地学习和调整参数,使得自己的预测越来越准确。
在这里插入图片描述
比如我们给模型一个句子:“今天的天气真”,模型可能会预测出“好”作为下一个词,因为在它看过的大量训练数据中,“今天的天气真好”是一个常见的句子。这种预测并不只基于词语的统计关系,还包括对上下文的理解,甚至有时能体现出对世界常识的认知,比如它会理解到,人们通常会在天气好的时候进行户外活动。因此也就能够继续生成或者说推理出相关的内容。
但是,大语言模型并不完全理解语言,它们没有人类的情感、意识或理解力。它们只是通过复杂的数学函数学习到的语言模式,一个概率模型来做预测,所以有时候它们会犯错误,或者生成不合理甚至偏离主题的内容。
咱们当然还是主说 LangChain。**LangChain 是一个全方位的、基于大语言模型这种预测能力的应用开发工具,它的灵活性和模块化特性使得处理语言模型变得极其简便。**不论你在何时何地,都能利用它流畅地调用语言模型,并基于语言模型的“预测”或者说“推理”能力开发新的应用。
在这里插入图片描述
LangChain 的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。
LangChain 支持 Python 和 JavaScript 两个开发版本,我们这个教程中全部使用 Python 版本进行讲解。

安装 LangChain

LangChain 的基本安装特别简单。

pip install langchain

这是安装 LangChain 的最低要求。这里我要提醒你一点,LangChain 要与各种模型、数据存储库集成,比如说最重要的 OpenAI 的 API 接口,比如说开源大模型库 HuggingFace Hub,再比如说对各种向量数据库的支持。默认情况下,是没有同时安装所需的依赖项。

也就是说,当你 pip install langchain 之后,可能还需要 pip install openai、pip install chroma(一种向量数据库)……
用下面两种方法,我们就可以在安装 LangChain 的方法时,引入大多数的依赖项。
安装 LangChain 时包括常用的开源 LLM(大语言模型) 库:

pip install langchain[llms]

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

pip install --upgrade langchain

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

pip install -e

我个人觉得非常好的学习渠道也在这儿分享给你。
LangChain 的 GitHub 社区非常活跃,你可以在这里找到大量的教程和最佳实践,也可以和其他开发者分享自己的经验和观点。
LangChain 也提供了详尽的 API 文档,这是你在遇到问题时的重要参考。不过呢,我觉得因为 LangChain 太新了,有时你可能会发现文档中有一些错误。在这种情况下,你可以考虑更新你的版本,或者在官方平台上提交一个问题反馈。
当我遇到问题,我通常会在 LangChain 的 GitHub 开一个 Issue,很快就可以得到解答。

在这里插入图片描述

OpenAI API

下面我想说一说 OpenAI 的 API。关于 ChatGPT 和 GPT-4,我想就没有必要赘言了,网上已经有太多资料了。
但是要继续咱们的 LangChain 实战课,你需要对 OpenAI 的 API 有进一步的了解。
因为,LangChain 本质上就是对各种大模型提供的 API 的套壳,是为了方便我们使用这些 API,搭建起来的一些框架、模块和接口。
因此,要了解 LangChain 的底层逻辑,需要了解大模型的 API 的基本设计思路。而目前接口最完备的、同时也是最强大的大语言模型,当然是 OpenAI 提供的 GPT 家族模型。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这里,我们需要重点说明的两类模型,就是图中的 Chat Model 和 Text Model。
这两类 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)。但是,它们的调用方式和要求的输入格式是有区别的,这个我们等下还会进一步说明。下面我们用简单的代码段说明上述两种模型的调用方式。先看比较原始的 Text 模型(GPT3.5 之前的版本)。

调用 Text 模型

第 1 步,先注册好你的 API Key。
第 2 步,用 pip install openai 命令来安装 OpenAI 库。
第 3 步,导入 OpenAI API Key。
导入 API Key 有多种方式,其中之一是通过下面的代码:

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

OpenAI 库就会查看名为 OPENAI_API_KEY 的环境变量,并使用它的值作为 API 密钥。
也可以像下面这样先导入 OpenAI 库,然后指定 api_key 的值。

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

当然,这种把 Key 直接放在代码里面的方法最不可取,因为你一不小心共享了代码,密钥就被别人看到了,他就可以使用你的 GPT-4 资源!

所以,建议你给自己的 OpenAI 账户设个上限,比如每月 10 美元啥的。所以更好的方法是在操作系统中定义环境变量,比如在 Linux 系统的命令行中使用:

export OPENAI_API_KEY='你的Open API Key' 

或者,你也可以考虑把环境变量保存在.env 文件中,使用 python-dotenv 库从文件中读取它,这样也可以降低 API 密钥暴露在代码中的风险。

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

from openai import OpenAI
client = OpenAI()

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

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

在使用 OpenAI 的文本生成模型时,你可以通过一些参数来控制输出的内容和样式。这里我总结为了一些常见的参数。

在这里插入图片描述

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

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

当你调用 OpenAI 的 Completion.create 方法时,它会返回一个响应对象,该对象包含了模型生成的输出和其他一些信息。这个响应对象是一个字典结构,包含了多个字段。

在使用 Text 模型(如 text-davinci-003)的情况下,响应对象的主要字段包括:
在这里插入图片描述
choices 字段是一个列表,因为在某些情况下,你可以要求模型生成多个可能的输出。每个选择都是一个字典,其中包含以下字段:

  • text:模型生成的文本。
  • finish_reason:模型停止生成的原因,可能的值包括 stop(遇到了停止标记)、length(达到了最大长度)或 temperature(根据设定的温度参数决定停止)。

所以,response.choices[0].text.strip() 这行代码的含义是:从响应中获取第一个(如果在调用大模型时,没有指定 n 参数,那么就只有唯一的一个响应)选择,然后获取该选择的文本,并移除其前后的空白字符。这通常是你想要的模型的输出。至此,任务完成,模型的输出如下:

心动花庄、芳华花楼、轩辕花舍、簇烂花街、满园春色

调用 Chat 模型

整体流程上,Chat 模型和 Text 模型的调用是类似的,只是前面加了一个 chat,然后输入(prompt)和输出(response)的数据格式有所不同。
示例代码如下:

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
)

这段代码中,除去刚才已经介绍过的 temperature、max_tokens 等参数之外,有两个专属于 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 对象可能如下所示:

{'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}]
}

相关文章:

  • 第四章 软件需求工程
  • 论文略读: CUT YOUR LOSSES IN LARGE-VOCABULARY LANGUAGE MODELS
  • 如何通过DNS解析实现负载均衡?有哪些优势?
  • 期权卖方是谁?
  • Linux动态库与静态库详解:从入门到精通
  • mysql-innoDB存储引擎事务的原理
  • 智能合约安全专题(一):什么是重入攻击?——从 DAO 事件谈起
  • Ribbon负载均衡实战指南:7种策略选择与生产避坑
  • 《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
  • 广告系统中后链路数据为什么要使用流批一体技术?流批一体技术是什么?
  • [特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
  • Redis高可用与扩展性:构建稳定高效的缓存系统
  • Qt Widget类解析与代码注释
  • 图像直方图分析:全面掌握OpenCV与Matplotlib绘制技巧
  • python整数处理 2022年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
  • ​​​​​​​未来已来:深度解读 BLE 6.0 的革命性特性与实战应用
  • 随笔小记:SpringBoot 3 集成 SpringDoc OpenAPI
  • 计算机毕业设计微信小程序题库系统 在线答题 题目分类 错题本管理 学习记录查询系统源码+论文+PPT+讲解 基于微信小程序的题库系统设计与实现
  • 雨季智慧交通:从车辆盲区到客流统计的算法全覆盖
  • 基于KubeSphere平台快速搭建单节点向量数据库Milvus
  • 网站做微信链接怎么做的/nba西部排名
  • 中国建设银行信用卡旅游卡服务网站/seo外链怎么做能看到效果
  • wordpress政府网站/现在做百度推广有用吗
  • 免费网站搭建/厦门关键词seo排名网站
  • 政务网站建设合同/软件外包公司好不好
  • 旅游主题网站模板/品牌营销推广方案怎么做