【LangChain实战】LangChain快速入门

news2024/11/23 9:19:36

1、什么是大语言模型

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

2、 OpenAI API

       要使用 OpenAI API,需要先用科学的方法进行注册,并得到一个 API Key。(也可以从网站购买)
       有了 OpenAI 的账号和 Key,你就可以在面板中看到各种信息,比如模型的费用、使用情况,各种模型的访问数量限制信息。其中,TPM 和 RPM 分别代表 tokens-per-minute、requests-per-minute。也就是说,对于 GPT-4,你通过 API 最多每分钟调用 200 次、传输 40000 个字节。
      openai支持的模型,这个模型便很快,需要尽量更新。
      
    

OpenAI模型调步骤

      第 1 步,先注册好你的 API Key。
      第 2 步,用 pip install openai 命令来安装 OpenAI 库。
      第 3 步,导入 OpenAI API Key。
     
import os
os.environ["OPENAI_API_KEY"] = ‘sk-*************’
#OpenAI 库就会查看名为 OPENAI_API_KEY 的环境变量,并使用它的值作为 API 密钥。

#指定 api_key 的值
import openai
openai.api_key = sk-****************’
第 4 步,导入 OpenAI 库。
from openai import OpenAI
client = OpenAI()
第 5 步,调用 Text 模型,并返回结果。
​
completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."},
    {"role": "user", "content": "请给情人节的祝福语"}
  ]
)
​
         message就是传入模型的提示。 messages 参数是一个列表,包含了多个消息。每个消息都有一个 role(可以是 system、user 或 assistant)和 content(消息的内容)。系统消息设定了对话的背景(你是一个很棒的智能助手),然后用户消息提出了具体请求(请给情人节的祝福语)。模型的任务是基于这些消息来生成回复。
       再说role,在 OpenAI 的 Chat 模型中,system、user 和 assistant 都是消息的角色。每一种角色都有不同的含义和作用。
  • system:系统消息主要用于设定对话的背景或上下文。这可以帮助模型理解它在对话中的角色和任务。例如,你可以通过系统消息来设定一个场景,让模型知道它是在扮演一个医生、律师或者一个知识丰富的 AI 助手。系统消息通常在对话开始时给出。
  • user:用户消息是从用户或人类角色发出的。它们通常包含了用户想要模型回答或完成的请求。用户消息可以是一个问题、一段话,或者任何其他用户希望模型响应的内容。
  • assistant:助手消息是模型的回复。例如,在你使用 API 发送多轮对话中新的对话请求时,可以通过助手消息提供先前对话的上下文。然而,请注意在对话的最后一条消息应始终为用户消息,因为模型总是要回应最后这条用户消息。
      
       第 6 步,打印输出大模型返回的文字。
print(completion.choices[0].message)
ChatCompletionMessage(content='在这个浪漫的情人节,\n让我用诗意为你祝福。\n你是我的心上人,\n让我爱得如痴如醉。\n\n你的 笑容如春花绽放,\n温暖我寒冷的心灵。\n你的眼眸如星光璀璨,\n照亮我迷茫的追寻。\n\n你是我的钟情之人,\n让我心跳不已地颤动。\n你是我的梦幻情人,\n让我心旋转不停地摇摆。\n\n愿我们的爱情永恒不变,\n如同华丽的诗篇流传。\n愿我们的幸福绽放成花,\n如同情人节的鲜花绽放。\n\n亲爱的,情人节快乐,\n愿我们的爱充满甜蜜。\n愿我们的相守长久如锦,\n永远不会离别分离。\n\n因为你,我在爱中绽放,\n因为你,我愿意为你努力。\n情人节祝福,情意满满,\n愿我们的爱情永不衰弱。', role='assistant', function_call=None, tool_calls=None)

            在使用 Chat 模型生成内容后,返回的响应,也就是 response 会包含一个或多个 choices,每个 choices 都包含一个 message。每个 message 也都包含一个 role 和 content。role 可以是 system、user 或 assistant,表示该消息的发送者,content 则包含了消息的实际内容。

3、通过 LangChain 调用OpenAI 模型

3.1 调用text-davinci-003模型

>>>import os
>>>os.environ["OPENAI_API_KEY"] = 'sk-*************'
>>> from langchain.llms import OpenAI
>>> llm = OpenAI(model_name="text-davinci-003",max_tokens=1024)
>>> llm("请给情人节的祝福语")
'\n\n1.祝你情人节快乐,幸福美满!\n\n2.爱你永不变,情人节快乐!\n\n3.愿你今生今世,永结同心!\n\n4.祝你情人节快乐,与爱 人度过温馨甜蜜的时光!\n\n5.祝你情人节快乐,真爱永不改变!\n\n6.祝你今生今世,陪伴爱人,情意绵绵!\n\n7.祝你一生有一个甜蜜的爱情,情人节快乐!\n\n8.祝你情人节快乐,爱情甜蜜每一天!'
>>> llm("请给情人节的祝福语")
'\n\n1.亲爱的,情人节快乐!愿你今天充满快乐幸福,永远幸福!\n\n2.让我们一起庆祝这个特殊的日子,感受彼此深爱的幸福!祝你 情人节快乐!\n\n3.情人节到了,衷心祝福你,愿你在这个特殊的日子里,幸福温馨!\n\n4.愿你在情人节这天,快乐无比,爱情温暖,幸福永久!\n\n5.情人节快乐!愿你在这个浪漫的节日里,拥有一份真挚的爱情!'
>>>

       这只是一个对 OpenAI API 的简单封装:先导入 LangChain 的 OpenAI 类,创建一个 LLM(大语言模型)对象,指定使用的模型和一些生成参数。使用创建的 LLM 对象和消息列表调用 OpenAI 类的 __call__ 方法,进行文本生成。生成的结果被存储在 response 变量中。

3.2 调用gpt-3.5-turbo 模型

import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI(model="gpt-3.5-turbo",
                    temperature=0.8,
                    max_tokens=200)
from langchain.schema import (
    HumanMessage,
    SystemMessage
)
messages = [
    SystemMessage(content="你是一个很棒的智能助手"),
    HumanMessage(content="请给情人节的祝福语")
]
response = chat(messages)
print(response)

=================================
>>> print(response)
content='亲爱的,情人节快乐!愿我们的爱情如同春天的花朵般绽放,甜蜜而美好。愿你每天都被爱所包围,幸福与快乐永远相伴。无 论身在何处,我们的心始终紧紧相连。让我们一起创造美好的回忆,共度这个特别的日子。我爱你!'

      这段代码主要是通过导入 LangChain 的 ChatOpenAI 类,创建一个 Chat 模型对象,指定使用的模型和一些生成参数。然后从 LangChain 的 schema 模块中导入 LangChain 的 SystemMessage 和 HumanMessage 类,创建一个消息列表。消息列表中包含了一个系统消息和一个人类消息。你已经知道系统消息通常用来设置一些上下文或者指导 AI 的行为,人类消息则是要求 AI 回应的内容。之后,使用创建的 chat 对象和消息列表调用 ChatOpenAI 类的 __call__ 方法,进行文本生成。生成的结果被存储在 response 变量中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1266244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【黑马程序员】——微服务全套——实战篇1

目录: 微服务技术栈导学1微服务技术栈导学2认识微服务-服务架构演变认识微服务-微服务技术对比认识微服务-SpringCloud服务拆分-案例Demo服务拆分-服务远程调用Eureka-提供者与消费者Eureka-eureka原理分析Eureka-搭建eureka服务Eureka-服务注册Eureka-服务发现Rib…

\n\r:解析java中的\r、\n、\r\n、\n\r的区别

1 \r 1.1 内容 回车符,将光标定义到当前行行首 1.2 在idea中测试 1.2.1 表现形式 在\r后有新内容时,会先删除之前以前存在过的文本,即只打印\r后面的内容 1.2.2 示例代码 package Work; public class Test05 { public static void main(String[] args) { System.…

应用在智能手环距离检测领域的数字红外接近检测模块

智能手环是现代人日常生活中的一种智能配件,可以帮助我们记录运动数据、监测身体健康状况等。然而,对于许多用户来说,关注的问题之一就是智能手环的有效距离和精准度。智能手环通过内置传感器收集数据并将其发送到手机或其他设备上进行处理。…

【同步降压DC-DC】TLV62568 转换器

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大…

VIR-SLAM代码分析2——VIR_VINS详解

前言 VIR-SLAM中VIR_VINS文件夹下是基于VINS-mono的结合UWB传感器的估计器,主要改动的文件在uwb_posegraph,vir_estimator中。其他文件夹完成的是UWB数据的处理问题,比较简单上一节介绍足够,代码也容易看懂。本节介绍的VIR_VINS是…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑不确定性的火电发电商现货-深度调峰市场优化决策》

标题涉及到电力行业的领域,尤其是火电发电商在电力市场中面对深度调峰需求时的决策问题。下面是对标题的解读: 考虑不确定性: 这指的是在制定优化决策时,考虑到环境的不确定性,可能包括但不限于电力市场的价格波动、发…

Linux——vim编辑文件时——.swp文件解决方案

test.cpp样例 当我们vim test.cpp进入编辑文件。 却忘记了保存退出 再次进入就会出现一下画面 当你摁下Enter键位 出现以下几个选项 O——是只读不写 E——是正常打开文件但不会载入磁盘内容 R——覆盖——是加载存储磁盘的文件(当我们忘记保存时,系统会自动帮我…

有权图的最短路径算法

目录 单源最短路径问题 Dijkstra算法 原理 ​ 获得最短路径长度的Dijkstra代码实现 时间复杂度 算法优化 优先队列优化后的代码实现 时间复杂度 可以具体获得最短路径的Dijkstra代码实现 Bellman-Ford算法 原理 代码实现 Floyed算法 原理 代码实现 单源最短路…

Git——Git应用入门

将会介绍以下知识: 搭建Git环境和创建Git版本库(init、clone)。文件添加、状态检查、创建注释和查看历史记录。与其他Git版本库交互(pull、push)。解决合并冲突。创建分支列表、列表切换和合并。创建标签。 1、版本控…

C++学习之路(十一)C++ 用Qt5实现一个工具箱(增加一个进制转换器功能)- 示例代码拆分讲解

上篇文章,我们用 Qt5 实现了在小工具箱中添加了《时间戳转换功能》功能。为了继续丰富我们的工具箱,今天我们就再增加一个平时经常用到的功能吧,就是「 进制转换 」功能。下面我们就来看看如何来规划开发一个这样的小功能并且添加到我们的工具…

基于加拿大降水分析 (CaPA) 系统的北美区域确定性降水数据集

区域确定性降水分析 (RDPA) 基于加拿大降水分析 (CaPA) 系统的区域确定性降水分析 (RDPA) 的域与业务区域模式相对应,即区域确定性预报系统 (RDPS-LAM3D),但太平洋地区除外其中 RDPA 域的西边边界相对于区域模型域稍微向东移动。RDPA 分析的分辨率与运行…

深入剖析 Django 与 Flask 的选择之谜

概要 在现代 Web 开发的世界里,Python 作为一门极具灵活性和易用性的编程语言,催生了多个强大的 Web 框架,其中 Django 和 Flask 是最受欢迎的两个。但对于开发者来说,选择哪一个始终是一个令人费解的难题。本文将详细地对比这两…

面试题:Spring 中获取 Bean 的方式有哪些?

文章目录 前言1、在初始化时保存ApplicationContext对象2、通过Spring提供的工具类获取ApplicationContext对象3、实现接口ApplicationContextAware(推荐)4、继承自抽象类ApplicationObjectSupport5、继承自抽象类WebApplicationObjectSupport6、使用Bea…

不确定度校准和可靠性图简介

图片来源 项杰 一、说明 不确定性校准是机器学习中最容易被误解的概念之一。它可以概括为这个简单的问题:“鉴于上述下雨的可能性,您是否带伞?” 我们在日常生活中使用主观概率和不确定性校准的概念,但没有意识到它们。对于不确定…

1、Linux_介绍和安装

1. Linux概述 Linux:是基于Unix的一个开源、免费的操作系统,其稳定性、安全性、处理多并发能力强,目前大多数企业级应用甚至是集群项目都部署运行在linux操作系统之上,在我国软件公司得到广泛的使用 Unix:是一个强大…

Spark---SparkCore(五)

五、Spark Shuffle文件寻址 1、Shuffle文件寻址 1)、MapOutputTracker MapOutputTracker是Spark架构中的一个模块,是一个主从架构。管理磁盘小文件的地址。 MapOutputTrackerMaster是主对象,存在于Driver中。MapOutputTrackerWorker是从对…

自研基于Xilinx PCIe的高性能多路视频采集与显示控制器

1 概述 视频采集与显示子系统可以实时采集多路视频信号,并存储到视频采集队列中,借助高效的硬实时视频帧出入队列管理和PCIe C2H DMA引擎,将采集到的视频帧实时传递到上位机采集缓冲区。在超带宽视频采集情况下,支持采集丢帧操作…

记录:Unity脚本的编写7.0

目录 连接数据库编写脚本查看效果查增删 有段时间没有更新了,现在有点空,就继续写一下unity的脚本,这次就来写一下关于unity连接数据库的内容 连接数据库 无论是什么语言与应用场景,总有一项东西是绕不开的,那就是数据…

园区智能配电系统(电力智能监控系统)

园区智能配电系统是一种针对园区电力配送和管理的智能化系统。它的主要功能是实时监控设备运行情况,进行电能质量分析,监控电能损耗,以及分时段用电统计等。 具体来说,园区智能配电系统可以利用现代技术如RS-485总线通信、数据库管…

vue3 element plus 表单验证 数组嵌套对象格式验证 动态验证等

基本结构 model 表单数据对象 rules 验证对象 prop model 的键名 <template><el-form ref"ruleFormRef" :model"ruleForm" :rules"rules"><el-form-item label"手机号" prop"mobile"><el-input v-mod…