了解 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.hqwc.cn/news/67072.html

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

相关文章

文本挖掘 day5:文本挖掘与贝叶斯网络方法识别化学品安全风险因素

文本挖掘与贝叶斯网络方法识别化学品安全风险因素 1. Introduction现实意义理论意义提出方法&#xff0c;目标 2. 材料与方法2.1 数据集2.2 数据预处理2.3 关键字提取2.3.1 TF-IDF2.3.2 改进的BM25——BM25WBM25BM25W 2.3.3 关键词的产生(相关系数) 2.4 关联规则分析2.5 贝叶斯…

vue学习笔记

1.官网 v2官网 https://v2.cn.vuejs.org/ v3官网 https://cn.vuejs.org/ 2.vue引入 在线引入 <script src"https://cdn.jsdelivr.net/npm/vue2.7.14/dist/vue.js"></script> 下载引入(下载链接) https://v2.cn.vuejs.org/js/vue.js 3.初始化渲…

VictoriaMetrics部署及vmalert集成钉钉告警

1、部署VictoriaMetrics cd /usr/local wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.65.0/victoria-metrics-amd64-v1.65.0.tar.gz mkdir victoria-metrics && tar -xvzf victoria-metrics-amd64-v1.65.0.tar.gz && \ mv …

JVM 内存结构

1、方法区&#xff08;线程共享&#xff09; 存储静态变量(静态方法、变量、代码块)、常量池、类信息 2、堆信息&#xff08;线程共享&#xff09; 存储实例对象&#xff0c;例如 new 出来的对象信息 A a1 new A() 3、虚拟机栈&#xff08;线程隔离&#xff09; 每个线程的都有…

试岗第一天问题

1、公司的一个项目拉下来 &#xff0c;npm i 不管用显示 后面百度 使用了一个方法 虽然解决 但是在增加别的依赖不行&#xff0c;后面发现是node版本过高&#xff0c;更换node版本解决。 2、使用插件动态的使数字从0到100&#xff08;vue-animate-number插件&#xff09; 第一…

(css)点击前隐藏icon图表 点击后显示

(css)点击前隐藏icon图表 点击后显示 效果 html <liv-for"(item,index) in sessionList":key"index"class"liClass":class"{ active: change2 index }"tabindex"2">...<el-tooltip class"item" effec…

蓝牙入耳式耳机老是滑出来,耳朵小适合戴什么样的骨传导耳机

最近体验了几款骨传导耳机&#xff0c;分享下我的使用感受。首先说一下为什么要选择骨传导耳机&#xff0c;我之前是使用入耳式耳机&#xff0c;戴久了耳朵会疼&#xff0c;而且晚上睡觉不能戴。于是就考虑骨传导耳机&#xff0c;因为骨传导耳机在传声的过程中不需要经过耳膜&a…

encoder-decoder

transformer的encoder-decoder 如果考虑一个由 2 个堆叠编码器和解码器组成的 Transformer&#xff0c;看起来会是这样的&#xff1a; 文章写的非常好&#xff1a;http://jalammar.github.io/illustrated-transformer/ 其中解码器中的自关注层的运行方式与编码器中的运行方式略…

解决电脑声音正常但就是某些游戏没声音问题

电脑声音正常&#xff0c;玩普遍游戏也正常&#xff0c;就有游戏不出声音 详细介绍经过&#xff0c;不喜欢的请直接跳 第三部分。 一、先说下起因现象。 1 大富翁11 没声音。 前段时间无聊怀旧就买了个大富翁11玩玩&#xff0c;近二十年前的老台式机正常无问题。后来想在性能…

虚拟机内搭建CTFd平台搭建及CTF题库部署,局域网内机器可以访问

一、虚拟机环境搭建 1、安装docker、git、docker-compose ubuntu&#xff1a; sudo apt-get update #更新系统 sudo apt-get -y install docker.io #安装docker sudo apt-get -y install git #安装git sudo apt-get -y install python3-pip #安装pip3 sudo pip install dock…

WPF 本地化的最佳做法

WPF 本地化的最佳做法 资源文件英文资源文件 en-US.xaml中文资源文件 zh-CN.xaml 资源使用App.xaml主界面布局cs代码 App.config辅助类语言切换操作类资源 binding 解析类 实现效果 应用程序本地化有很多种方式&#xff0c;选择合适的才是最好的。这里只讨论一种方式&#xff0…

Golang 局部变量、全局变量 声明

文章目录 一、局部变量二、全局变量 一、局部变量 四种声明方式 多变量声明&#xff1a; package mainimport "fmt"//局部变量声明 func main() {//方法一: 声明一个变量和数据类型&#xff0c;不初始化值&#xff1b;默认值为0&#xff1b;var lvA intfmt.Printl…