了解 Langchain️是个啥?:第 1 部分

一、说明

        在日常生活中,我们主要致力于构建端到端的应用程序。我们可以使用许多自动 ML 平台和 CI/CD 管道来自动化 ml 管道。我们还有像Roboflow和Andrew N.G.的登陆AI这样的工具来自动化或创建端到端的计算机视觉应用程序。

        如果我们想在OpenAI或拥抱脸的帮助下创建一个LLM应用程序,那么以前,我们想手动完成。出于同样的目的,我们有两个最著名的库,Haystack 和 LangChain,它们帮助我们为 LLM 模型创建端到端的应用程序或管道。让我们更多地了解Langchain。

二、什么是LangChain链?

        LangChain 是一个创新的框架,它正在彻底改变我们开发由语言模型驱动的应用程序的方式。通过结合先进的原则,LangChain正在重新定义通过传统API可以实现的极限。此外,LangChain应用程序是代理的,使语言模型能够轻松交互并适应其环境。

        Langchain由几个模块组成。顾名思义,将不同的模块链接在一起是Langchain的主要目的。这里的想法是将每个模块链接在一个链中,最后使用该链一次调用所有模块。

        这些模块包括以下内容:

  1. 提示
  2. 记忆
  3. 代理
  4. 回调
  5. 指标

让我们从,

2.1 模型 

        如简介中所述,模型主要涵盖大型语言模型。相当大的大型语言模型是由具有众多参数的神经网络组成的模型,并在大量未标记的文本上进行训练。科技巨头有各种各样的LLM,比如,

  1. 谷歌的伯特
  2. OpenAI 的 GPT-3
  3. 谷歌的拉MDA
  4. PaLM by Google
  5. LLaMA by Meta AI
  6. OpenAI 的 GPT-4
  7. 还有更多...

        在语言链的帮助下,与大型语言模型的交互变得更加容易。Langchain提供的界面和功能有助于轻松地将LLM的强大功能集成到您的工作应用程序中。LangChain通过利用asyncio库为LLM提供异步支持。

        还有 Langchain 提供的异步支持[通过释放处理请求的线程,服务器可以将其分配给其他任务,直到准备好响应,从而最大限度地提高资源利用率。目前、、、 和 受支持,但对其他 LLM 的异步支持已在路线图上。您可以使用该方法异步调用 OpenAI LLM。您还可以编写自定义 LLM 包装器,而不是 LangChain 中支持的包装器。OpenAIPromptLayerOpenAIChatOpenAIAnthropicagenerate

        我在应用程序中使用了OpenAI,并且主要使用Davinci,Babbage,CurieAda模型来陈述问题。每个模型都有自己的优点、令牌使用计数和用例。您可以在此处阅读有关这些模型的更多信息。

2.1.1 示例 1 

# Importing modules 
from langchain.llms import OpenAI

#Here we are using text-ada-001 but you can change it 
llm = OpenAI(model_name="text-ada-001", n=2, best_of=2)

#Ask anything
llm("Tell me a joke")

2.1.2 产出1:

'\n\nWhy did the chicken cross the road?\n\nTo get to the other side.'

示例 2:

llm_result = llm.generate(["Tell me a poem"]*15)

产出2:

[Generation(text="\n\nWhat if love neverspeech\n\nWhat if love never ended\n\nWhat if love was only a feeling\n\nI'll never know this love\n\nIt's not a feeling\n\nBut it's what we have for each other\n\nWe just know that love is something strong\n\nAnd we can't help but be happy\n\nWe just feel what love is for us\n\nAnd we love each other with all our heart\n\nWe just don't know how\n\nHow it will go\n\nBut we know that love is something strong\n\nAnd we'll always have each other\n\nIn our lives."),
 Generation(text='\n\nOnce upon a time\n\nThere was a love so pure and true\n\nIt lasted for centuries\n\nAnd never became stale or dry\n\nIt was moving and alive\n\nAnd the heart of the love-ick\n\nIs still beating strong and true.')]

2.2 提示 

        我们都知道,提示是我们提供给任何系统的输入,以根据我们的用例完善我们的答案,使其更准确或更具体。很多时候,您可能希望获得更多结构化的信息,而不仅仅是文本回复。许多新的目标检测和基于对比预训练和零镜头学习的分类算法包括提示作为结果的有效输入。举个例子,OpenAI的CLIP和META的Grounding DINO使用提示作为预测的输入。

        在 Langchain 中,我们可以根据自己想要的答案设置一个提示模板,然后将其链接到主链进行输出预测。输出分析器还有一个工具来优化结果。输出解析器负责 (1) 指示模型应如何格式化输出,以及 (2) 将输出解析为所需的格式(包括在必要时重试)。

在 Langchain 中,我们可以提供提示作为模板。模板是指提示的蓝图或我们想要答案的特定格式。LangChain提供预先设计的提示模板,可以为不同类型的任务生成提示。但是,在某些情况下,默认模板可能无法满足您的要求。默认情况下,我们可以使用自定义提示模板。

2.2.1 例 

from langchain import PromptTemplate
# This template will act as a blue print for prompt

template = """
I want you to act as a naming consultant for new companies.
What is a good name for a company that makes {product}?
"""

prompt = PromptTemplate(
    input_variables=["product"],
    template=template,
)
prompt.format(product="colorful socks")
# -> I want you to act as a naming consultant for new companies.
# -> What is a good name for a company that makes colorful socks?

2.3 记忆:

        默认情况下,LangChain 中的链和代理以无状态模式运行,这意味着它们独立处理每个传入的查询。但是,在某些应用程序中,例如聊天机器人,在短期和长期内保留以前的交互非常重要。这就是“记忆”概念发挥作用的地方。

LangChain以两种形式提供内存组件。首先,LangChain 提供了用于管理和操作以前的聊天消息的辅助实用程序,这些消息被设计为模块化且有用,无论其用例如何。其次,LangChain提供了一种将这些实用程序集成到链中的简单方法。这使得它们具有高度的通用性和适应任何情况。

2.3.1 例 

from langchain.memory import ChatMessageHistory

history = ChatMessageHistory()
history.add_user_message("hi!")

history.add_ai_message("whats up?")
history.messages

2.3.2 输出 

<span style="color:rgba(0, 0, 0, 0.8)"><span style="background-color:#ffffff"><span style="background-color:#f9f9f9"><span style="color:#242424">[HumanMessage(content='<span style="color:#c41a16">hi!</span>', additional_kwargs={}),
 AIMessage(content='<span style="color:#c41a16">whats up?'</span>, additional_kwargs={})]</span></span></span></span>

2.4 链:

        链提供了一种将各种组件合并到统一应用程序中的方法。例如,可以创建一个链,该链接收来自用户的输入,使用提示模板对其进行格式化,然后将格式化的回复传输到LLM。通过将多个链与其他组件集成,可以生成更复杂的链。

   LLMChain被认为是查询 LLM 对象使用最广泛的方法之一。它根据提示模板格式化提供的输入键值以及内存键值(如果存在),然后将格式化的字符串发送到 LLM,然后生成返回的输出。

        在调用语言模型之后,可以采取一系列步骤,其中可以对模型进行一系列调用。当希望将一个调用的输出用作另一个调用的输入时,这种做法特别有价值。在这一系列链中,每个单独的链都有一个输入和一个输出,一个步骤的输出用作下一个步骤的输入。

#Here we are chaining everything
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
    ChatPromptTemplate,
    HumanMessagePromptTemplate,
)
human_message_prompt = HumanMessagePromptTemplate(
        prompt=PromptTemplate(
            template="What is a good name for a company that makes {product}?",
            input_variables=["product"],
        )
    )
chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt])
chat = ChatOpenAI(temperature=0.9)
# Temperature is about randomness in answer more the temp, random the answer
#Final Chain

chain = LLMChain(llm=chat, prompt=chat_prompt_template)
print(chain.run("colorful socks"))

2.5 代理:

        某些应用程序可能不仅需要预先确定的LLM /其他工具调用序列,还需要依赖于用户输入的不确定序列。这些类型的序列包括可以访问一系列工具的“代理”。根据用户输入,代理可以确定应调用哪些工具(如果有)。

根据文档,代理的高级伪代码如下所示:

收到一些用户输入

代理决定使用哪个工具(如果有),以及该工具的输入应该是什么

然后使用该工具输入调用该工具,并记录观察结果(这只是使用该工具输入调用该工具的输出。

工具、工具输入和观察的历史记录将传递回代理,并决定下一步要执行的步骤

重复此操作,直到代理决定不再需要使用工具,然后直接响应用户。

2.5.1 例:

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI

llm = OpenAI(temperature=0)

tools = load_tools(["serpapi", "llm-math"], llm=llm)

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

agent.run("Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?")

        让我们在下面附的一个快照中总结所有内容。

LangChain的高级思想[图片来源:作者]

        了解所有模块和链接对于使用 Lang-Chain 为大型语言模型构建管道应用程序非常重要。这只是对 LangChain 的简单介绍,在本系列的下一部分,我们将研究真正的管道,例如制作 pdfGPT、制作对话机器人、回答文档和其他应用程序。这种基于应用程序的工作将使这些概念更加清晰。LangChain 的文档很好理解,但我添加了我自己的想法以使其更清晰。你可以在这里找到LangChain的文档。

[编辑:我在下面添加了LangChain系列的下一部分,这样你就不需要在我的个人资料中搜索它]

其它参考:

了解语言链🦜️🔗:第2部分

实际实施 LangChain 以构建自定义数据机器人涉及合并内存、提示模板和...

代币和模型:了解语言链 🦜️🔗 部分:3

了解令牌以及如何为您的用例选择 OpenAI 模型,API 密钥定价的工作原理

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C++] 模板template

讲模板之前呢&#xff0c;我们先来谈谈泛型编程&#xff1a; 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。 模板分为两类&#xff1a;函数模板与类模板 1、函数模板 1.1 函数模板概念 函数模板代表了一个函数家…

在pycharm中对使用脚本文件运行的程序进行调试

在github中下载的许多项目都可以使用给出的脚本文件运行&#xff0c;本文介绍如果在pycharm中对使用脚本文件运行的程序进行调试的方法。 1.点击 edit configurations 2.选择要debug的py文件&#xff0c;并且填写参数 3.点击运行旁边的debug按钮

尚硅谷大数据项目《在线教育之离线数仓》笔记001

视频地址&#xff1a;尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 P003 P004【数仓概念讲的颇为详细】 P018 P019 P020 P021 P022 P023 P024 P003 时间切片&#xff1a;时间回溯&#xff0c;找回以前的数据。 P004【数仓概念讲的颇为详细】 核心架…

前端开发实习总结参考范文(合集)

▼前端开发实习总结篇一 今天就简单聊聊上面的StrutsSpringHibernate吧。 Struts 代表&#xff1a;表示层;Spring代表&#xff1a;业务逻辑层;Hibernate则代表持久层。他们是目前在Java Web编程开发中用得最多的框架&#xff0c;其实这样区分是为了适应软件开发过程中各个分工…

Android 实现 RecyclerView下拉刷新,SwipeRefreshLayout上拉加载

上拉、下拉的效果图如下&#xff1a; 使用步骤 1、在清单文件中添加依赖 implementation ‘com.android.support:recyclerview-v7:27.1.1’ implementation “androidx.swiperefreshlayout:swiperefreshlayout:1.0.0” 2、main布局 <LinearLayout xmlns:android"http…

HTML详解连载(4)

HTML详解连载&#xff08;4&#xff09; 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽CSS定义书写位置示例注意 CSS引入方式内部样式表&#xff1a;学习使用 外部演示表&#xff1a;开发使用代码示例行内样式代码示例 选择器作用基础选择器标签选择器举例特…

日常BUG——SpringBoot关于父子工程依赖问题

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 在父子工程A和B中。A依赖于B&#xff0c;但是A中却无法引入B中的依赖&#xff0c;具体出现的…

MySQL 45讲笔记(1-10讲)

1. SQL语句如何开始执行&#xff1f; MySQL分为Server和存储引擎两部分&#xff1a; Server层包含连接器、存储缓存、分析器、执行器等&#xff0c;以及所有的内置函数&#xff08;事件、日期&#xff09;等等&#xff0c;还有视图、触发器。 存储引擎是负责数据的存储和提取&a…

风丘科技将亮相 EVM ASIA 2023

风丘科技将首次亮相 EVM ASIA 2023 WINDHILL will debut EVM ASIA 2023 ——可持续移动的未来 —The Future of SUSTAINABLE Mobility EVM ASIA 2023是亚太地区电气化的国际性展会&#xff0c;专注于新能源汽车、充电技术及汽车零件制造等。展会致力于促进包括充电站、交通…

DAY19

题目一 空间尝试模型 一个样本做行一个样本做列 范围尝试模型 以....做分隔 dp[i][j] 为以i为左界限 以j为右界限 求这个范围内的计算值(不对 是方法数) 这& | ^ 都是双目运算符 观察一下规律 整体字符数量一定为奇数(包括运算符和数字) 对应到数组中 数组的位一定是偶数…

openGauss学习笔记-39 openGauss 高级数据管理-分区表

文章目录 openGauss学习笔记-39 openGauss 高级数据管理-分区表39.1 范围分区表的分类39.2 创建范围分区39.2.1 创建VALUES LESS THAN范围分区表语法格式39.2.2 创建VALUES LESS THAN范围分区表参数说明39.2.3 创建VALUES LESS THAN范围分区表示例 39.3 询分区表39.3.1 查询分区…

​​C++多态​​

目录 1. 多态的概念 2. 多态的定义及实现 多态的构成条件 虚函数 虚函数的重写 特例 override 和 final 1. final&#xff1a;修饰虚函数&#xff0c;表示该虚函数不能再被重写 2.override: 检查派生类虚函数是否重写了基类某个虚函数&#xff0c;如果没有重写编译报错…

档案库房智能管理系统的功能有哪些呢?

档案库房智能管理系统是一个基于人工智能技术的综合性档案管理解决方案&#xff0c;通过自动化、智能化的方式&#xff0c;优化了档案管理流程&#xff0c;提高了工作效率和信息安全性。 1.档案入库管理&#xff1a; 档案信息录入&#xff1a;系统可以通过扫描、识别和自动填写…

Qt应用开发(基础篇)——框架类 QFrame

一、前言 QFrame继承于QWidget&#xff0c;被QLCDNumber、QToolBox、QLabel、QListView等部件继承&#xff0c;是一个拥有矩形框架的基类。 QFrame可以直接创建成一个没有内容的的矩形框架&#xff0c;框架的样式由边框厚度(lineWidth)、框架形状(QFrame::Shape)和阴影样式(QFr…

在vue中使用swiper轮播图(搭配watch和$nextTick())

在组件中使用轮播图展示图片信息&#xff1a; 1.下载swiper,5版本为稳定版本 cnpm install swiper5 2.在组件中引入swiper包和对应样式&#xff0c;若多组件使用swiper&#xff0c;可以把swiper引入到main.js入口文件中&#xff1a; import swiper/css/swiper.css //引入swipe…

玩转IndexedDB,比localStorage、cookie还要强大的网页端本地缓存

随着浏览器的功能不断增强&#xff0c;越来越多的网站开始考虑&#xff0c;将大量数据储存在客户端&#xff0c;这样可以减少从服务器获取数据&#xff0c;直接从本地获取数据。 现有的浏览器数据储存方案&#xff0c;都不适合储存大量数据&#xff1a;Cookie 的大小不超过 4K…

安科瑞电力监控系统在某区块页岩气地面集输工程中的应用

摘要&#xff1a;Acrel-2000Z电力监控系统适用于35kV及以下电压等级的各类变电站&#xff0c;可以帮助用户掌握配电系统实时运行状态&#xff0c; 获取预警、告警等各类事件&#xff0c;实现区域的无人值守&#xff0c;提高监管水平。本文介绍了安科瑞电力监控系统Acrel-2000在…

QEMU源码全解析37 —— Machine(7)

接前一篇文章&#xff1a;QEMU源码全解析36 —— Machine&#xff08;6&#xff09; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 特此致谢&#xff01; 上回书讲完了q…

java 加载商户API私钥 (pem证书私钥)

1. pem证书放在resources目录下 2. 加载证书的工具类 import com.wechat.pay.contrib.apache.httpclient.util.PemUtil; // 商户API私钥 (把证书放在项目路径下, 然后加载出来), 加载证书的工具类PrivateKey merchantPrivateKey PemUtil.loadPrivateKey(new FileInp…

使用FTP文件传输协议的潜在风险

数据&#xff08;事实&#xff0c;数字&#xff0c;价值&#xff09;是当今业务运行的核心要素。但是&#xff0c;如果数据没有得到有效的存储和传输&#xff0c;它们就会成为阻碍业务发展的障碍。如果企业不能及时地把数据送到合适的地方&#xff0c;就会造成严重的经济损失。…