了解 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 prompttemplate = """
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 ChatMessageHistoryhistory = 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 Chainchain = 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 OpenAIllm = 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.rhkb.cn/news/87812.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕业来北京要做的1000件事,第四十六,进行风险管理做B计划

风险管理就是指在项目进行过程中&#xff0c;识别可能的风险&#xff0c;对风险进行评估&#xff0c;并加以监控&#xff0c;从而减少风险对项目的负面影响。 对于风险管理&#xff0c;现在软件项目中提起的不多&#xff0c;应用的更少。主要原因还在于大家都比较乐观&#xf…

Redis原理简述

Redis原理简述 Redis 有哪些特性 1. 特性 key-value 型内存数据库单线程——原子化操作支持lua脚本发布与订阅可持久化逐出与过期……2. 持久化 RDB:经过压缩的二进制文件;fork子进程进行操作AOF:保存所有写命令;先写缓存再同步至AOF文件;文件过大时会触发AOF重写3. 过期…

QGIS3.28的二次开发八:显示shp的属性表

这里实现两个基本的 GIS 软件需求&#xff1a;矢量图层的属性表显示&#xff0c;以及根据属性筛选要素。 具体需求如下&#xff1a; 加载一个矢量图层并打开其属性表&#xff1b;输入筛选条件确认无误后&#xff0c;画布上和属性表中均只显示筛选后的要素。 QGIS 提供了若干…

山景DSP芯片可烧录AP8224C2音频处理器方案

AP8224C2高性能32位音频应用处理器AP82系列音频处理器是面向音频应用领域设计的新一代SoC平台产品&#xff0c;适用于传统音响系统、新兴的蓝牙或Wifi 无线音频产品、Sound Bar 和调音台等市场。该处理器在总体架构和系统组成上&#xff0c;充分考虑了音频领域的特点&#xff0…

STM32 CubeMX (uart_IAP串口)简单示例

STM32 CubeMX STM32 CubeMX &#xff08;串口IAP&#xff09; STM32 CubeMXIAP有什么用&#xff1f;整体思路 一、STM32 CubeMX 设置时钟树UART使能UART初始化设置 二、代码部分文件移植![在这里插入图片描述](https://img-blog.csdnimg.cn/0c4841d8328b4169a8833f15fe3d670c.p…

python num循环怎么从1开始

如何实现python for循环从1开始&#xff1f; range()函数的作用和用法&#xff1a; 编写一个从数值1开始的循环&#xff1a; 执行后得到的结果 其他注意事项

JavaWeb-Servlet服务连接器(三)

目录 Response响应对象 1.基本功能 2.重定向 3.路径 4.服务器输出数据到浏览器 Response响应对象 1.基本功能 设置响应行&#xff1a;格式为 HTTP/1.1 200 OK&#xff0c;可以使用 setStatus(int sc) 方法设置状态码为 200 表示成功。 方法名称描述setStatus(int sc)设…

STM32定时器级联功能

参考&#xff1a;官方文档《stm32f4xx参考手册.pdf》 级联功能&#xff0c;可以把两个定时器的功能关联起来&#xff0c;具体有以下几种&#xff1a; 本文只讲其中一个功能&#xff0c;定时器1给定时器2当分频器。这种功能可以把两个32位定时器&#xff0c;合并为为一个64位定…

tampermonky插件安装

换了电脑&#xff0c;今天重新下载了tampermonky&#xff0c;哎&#xff0c;被自己气死的一上午。wwwww&#xff0c;最后发现最大的问题就是没有问题。 Edge能不用下载直接安装&#xff0c;但是何少 下载tampermonky&#xff0c;在谷歌程序扩展-chrome://extensions/ 添加解压…

GPT-4助力数据分析:提升效率与洞察力的未来关键技术 | 京东云技术团队

摘要 随着大数据时代的到来&#xff0c;数据分析已经成为企业和组织的核心竞争力。然而&#xff0c;传统的数据分析方法往往无法满足日益增长的数据分析需求的数量和复杂性。在这种背景下&#xff0c;ChatGPT-4作为一种先进的自然语言处理技术&#xff0c;为数据分析带来了革命…

CCLINK IE转MODBUS-TCP网关modbus tcp协议详解

你是否曾经遇到过需要同时处理CCLINK IE FIELD BASIC和MODBUS两种数据协议的情况&#xff1f;捷米的JM-CCLKIE-TCP网关可以帮助你解决这个问题。 捷米JM-CCLKIE-TCP网关可以分别从CCLINK IE FIELD BASIC一侧和MODBUS一侧读写数据&#xff0c;然后将数据存入各自的缓冲区。接着…

计算机网络 ARP协议 IP地址简述

ARP只能在一个链路或一段网络上使用

gitee linux免密/SSH 方式连接免登录

目录 生成SSH公钥通过 ssh-keygen 程序创建找到SSH公钥 在gitee中添加公钥参考 生成SSH公钥 通过 ssh-keygen 程序创建 shell> ssh-keygen -t rsa -C "xxxxxx.com" Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/i…

【CSS学习笔记】

学习内容 1.css是什么 2.CSS怎么用&#xff08;快速入门&#xff09; 3.CSS选择器&#xff08;重点 难点&#xff09; 4.美化页面&#xff08;文字、阴影、超链接、列表、渐变…&#xff09; 5.盒子模型 6.浮动 7.定位 8.网页动画&#xff08;特效&#xff09; 1.什么是CSS C…

Spring中的AOP

Spring中的AOP 一.Spring AOP的概念 1.AOP的概述 AOP的全称是Aspect Oriented Programming&#xff0c;即面向切面编程。是通过预编译方式和运行期间动态代理&#xff0c;实现程序功能的统一维护的一种技术。AOP是OOP面向对象编程的一种延续。 使用OOP编程时&#xff0c;虽然…

力扣 377. 组合总和 Ⅳ

题目来源&#xff1a;https://leetcode.cn/problems/combination-sum-iv/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a; 本题求的是排列总和&#xff0c;而且仅仅是求排列总和的个数&#xff0c;并不是把所有的排列都列出来。动规五部曲分析如下&…

开发命名规范

1项目命名规范 1、工程项目名&#xff0c;尽量想一些有意义、有传播价值的名称&#xff1b;比如星球、游戏、名人、名地名等&#xff1b;取名就跟给孩子取名一样&#xff0c;独特、有价值、有意义、好传播 2、所有的类都必须添加创建者和创建日期 3、所有代码&#xff1a;包括…

【Hystrix技术指南】(7)故障切换的运作流程原理分析(含源码)

背景介绍 目前对于一些非核心操作&#xff0c;如增减库存后保存操作日志发送异步消息时&#xff08;具体业务流程&#xff09;&#xff0c;一旦出现MQ服务异常时&#xff0c;会导致接口响应超时&#xff0c;因此可以考虑对非核心操作引入服务降级、服务隔离。 Hystrix说明 官方…

学术论文GPT源码解读:从chatpaper、chatwithpaper到gpt_academic

前言 之前7月中旬&#xff0c;我曾在微博上说准备做“20个LLM大型项目的源码解读” 针对这个事&#xff0c;目前的最新情况是 已经做了的&#xff1a;LLaMA、Alpaca、ChatGLM-6B、deepspeedchat、transformer、langchain、langchain-chatglm知识库准备做的&#xff1a;chatpa…

PS/LR2024专用智能磨皮插件Portraiture提高P图效率

Portraiture 4智能磨皮插件支持Photoshop和Lightroom&#xff01;Portraiture是一款智能磨皮插件&#xff0c;为Photoshop和Lightroom添加一键磨皮美化功能&#xff0c;快速对照片中皮肤、头发、眉毛等部位进行美化&#xff0c;无需手动调整&#xff0c;大大提高P图效率。全新4…