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

news2024/11/25 1:23:20

一、说明

        在日常生活中,我们主要致力于构建端到端的应用程序。我们可以使用许多自动 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 密钥定价的工作原理

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

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

相关文章

Mr. Cappuccino的第62杯咖啡——Spring之Bean的生命周期

Spring之Bean的生命周期 Aware接口项目结构项目代码运行结果源代码使用场景 InitializingBean接口项目结构项目代码运行结果源代码 BeanFactoryPostProcessor接口项目结构项目代码运行结果源代码 Bean的生命周期项目结构项目代码运行结果源代码 Aware接口 实现Aware接口是为了…

Kotlin 中的 Lambda 与 Inline

在Kotlin中&#xff0c;有很多很酷很实用的特性&#xff0c;比如Lambda和高阶函数&#xff0c;利用这些特性&#xff0c;我们可以更加快速的实现开发&#xff0c;提升效率。 比如我们实现一个捕获Throwable&#xff0c;安全执行部分代码的高阶函数 fun safeRun(runnable: () …

最强自动化测试框架Playwright(26)-对话框

page.on(dialog) playwright 框架可以监听dialog事件&#xff0c;不管你alert 什么时候弹出来&#xff0c;监听到事件就自动处理了。 当出现 JavaScript 对话框时发出&#xff0c;例如alert、prompt或。侦听器必须dialog.accept()或dialog.dismiss()对话框 - 否则页面将冻结等…

Promise.all 静态方法

合并多个 Promise 对象&#xff0c;等待所有同时成功完成&#xff08;或某一个失败&#xff09;&#xff0c;做后续逻辑 语法&#xff1a; <script>const p Promise.all([Promise对象, Promise对象, ...])p.then(result > {// result 结果: [Promise对象成功结果, P…

mac出现java程序运行版本不一致

mac出现java程序运行版本不一致 Burpsuite_pro_v2022版本Burpsuite_pro_v2023.6.2版本解决方案&#xff1a; Burpsuite_pro_v2022版本 在安装BurpSuite的时候&#xff1a; 执行启动程序&#xff1a; java -noverify -javaagent:BurpSuiteLoader.jar -jar burpsuite_pro.jar运…

Windows Hyper-V Ubuntu 22.04 LTS安装

文章目录 UbuntuHyper-V启动 Ubuntu 下载Ubuntu-Desktop&#xff0c;这是个iso文件。 Hyper-V 启用虚拟化支持 services.msc 打开服务列表&#xff0c;关注Hyper-V服务是否启动 打开管理器 创建虚拟机 右键管理器》连接到服务器》连接到本地 快速创建 用到下载的ubu…

打造企业或者个人IP引流法

打造企业或者个人IP引流法. 大家好&#xff0c;我是百收网SEO编辑&#xff1a;狂潮老师&#xff0c;今天给大家分享企业IP打造的方法 首先我们想让人知道你的企业叫什么&#xff0c;怎么找到你的企业 这个时候我们就需要去各大平台发布信息&#xff0c;客户想了解直接去搜索…

JAVA多线程案例——实现三个窗口卖票功能

一、需求分析 利用多线程的思想模拟三个窗口售票员卖30张票的功能&#xff1a; 我们采用线程对象来模拟售票窗口&#xff0c;实现多个窗口同时卖票&#xff0c; 采用 Runnable 接口子类来模拟票数。 二、代码实现 1、继承 Thread 类的方式 class TicketWindow extends Threa…

【Unity】VS Code 没有智能提示 Unity 中的类

正常来说&#xff0c;VS Code中会对部分输入类名进行提示&#xff0c;如下图所述 假如你从Unity 中进入 VS Code后发现没有提示相关 Unity的类&#xff0c;可能是 Unity 中 有关于 VS Code的相关Package 没有跟着 VS Code升级到最新版本。 点击Unity Windows 下拉框中的 Pac…

分布式监控平台—zabbix

前言一、zabbix概述1.1 什么是zabbix1.2 zabbix的监控原理1.3 zabbix常见五个应用程序1.4 zabbix的监控模式1.5 监控架构1.5.1 C/S&#xff08;server—client&#xff09;1.5.2 server—proxy—client1.5.3 master—node—client 二、部署zabbix2.1 部署 zabbix server 端2.2 …

1.2 初识输入输出

博主介绍&#xff1a;爱打游戏的计算机专业学生 博主主页&#xff1a;夏驰和徐策 所属专栏&#xff1a;夏驰和徐策带你从零开始学C 前言&#xff1a; C语言并未定义任何输入输出 (IO) 语句&#xff0c;取而代之&#xff0c;包 含了一个全面的标准库 (standard library) 来 提…

分支语句与循环语句(2)

3.3 do...while()循环 3.3.1 do语句的语法&#xff1a; do 循环语句; while(表达式); 3.3.2执行流程图&#xff1a; 3.3.3 do语句的特点 循环至少执行一次&#xff0c;使用的场景有限&#xff0c;所以不是经常使用。 打印1-10的整数&#xff1a; #define _CRT_SECURE_NO_WA…

8年经验之谈 —— 如何做安全测试?

作为一名专业的安全测试人员&#xff0c;以下是一些关键步骤&#xff0c;可以帮助你更好地进行安全测试&#xff1a; 1. 了解应用程序: 深入了解应用程序的功能、架构和技术栈。这有助于你理解潜在的安全风险和漏洞。 2. 制定测试计划: 创建一个详细的测试计划&#xff0c;确…

【系统软件03】centos7安装和使用node-v18.16.0(centos7升级glibc 2.28)

【系统软件03】centos7安装和使用node-v18.16.0&#xff08;centos7升级glibc 2.28&#xff09; 前言&#xff1a;本文是解决node 18.16.0的依赖问题&#xff0c;具体的node安装流程&#xff0c;可以参考我的另外一篇文章。一、下载node v18.16.0二、下载glibc2.28&#xff08;…

如何轻松注册企业邮箱?快速掌握超简单的注册技巧!

随着互联网的发展&#xff0c;越来越多的企业开始使用电子邮件作为通信工具。企业邮箱不仅可以提高企业的工作效率&#xff0c;还可以使企业通信更加便捷、保密性更高。那么&#xff0c;企业邮箱怎么注册申请呢&#xff1f;下面我们来详细介绍一下。 第一步&#xff1a;选择邮箱…

百日筑基篇——python爬虫学习(一)

百日筑基篇——python爬虫学习&#xff08;一&#xff09; 文章目录 前言一、python爬虫介绍二、URL管理器三、所需基础模块的介绍1. requests2. BeautifulSoup1. HTML介绍2. 网页解析器 四、实操1. 代码展示2. 代码解释1. 将大文件划分为小的文件2. 获得结果页面的url3. 获取结…

第05天 SpringBoot自动配置原理

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

数学分析:曲线曲面积分

这一章还是很重要的&#xff0c;可以看到为什么dt1^dt2和dt1dt2是一样的。 可以看到&#xff0c;核心还是黎曼和&#xff0c;我们把两种微分的黎曼和都列出来&#xff0c;并且证明两个相等&#xff0c;即可。 这里要注意&#xff0c;微分形式的积分&#xff0c;在黎曼和的情况…

【解析postman工具的使用(基础篇】

postman前端请求详解 主界面1.常见类型的接口请求1.1 查询参数的接口请求1.1.1 什么是查询参数?1.1.2 postman如何请求 1.2 ❤表单类型的接口请求1.2.1 复习下http请求1.2.2❤ 什么是表单 1.3 上传文件的表单请求1.4❤ json类型的接口请求 2. 响应接口数据分析2.1 postman的响…

解决校园网使用vmware桥接模式,虚拟机与物理机互相ping通,但是虚拟机ping不通百度的问题

遇到的问题 使用校园网时&#xff0c;桥接模式下&#xff0c;物理机可以ping通虚拟机&#xff0c;但是虚拟机ping不通主机 解决方法 在物理机中查看网络相关信息 ipconfig 修改虚拟机网卡信息 vim /etc/sysconfig/network-scripts/ifcfg-ens33 注意 /ifcfg-ens33需要根据…