LangChain Agent v0.2.0简明教程 (上)

本文是LangChain Agent v0.2.0的教程,介绍了LangChain的基本概念,如LangChain Expression Language (LCEL),Runnable接口,以及Model的输入输出流程,包括Prompt Templates、Language Models和Output Parsers的详细使用。LangChain提供了一个框架,用于构建与语言模型交互的应用程序,支持灵活的提示模板和输出解析,适用于复杂的问答系统和聊天机器人开发。
摘要由CSDN通过智能技术生成

快速入门指南 – LangChain中文网
langchain源码剖析系列课程
九天玩转Langchain!

1. LangChain是什么

LangChain是一个基于LLM开发应用程序的框架,把调用LLM的过程组成一条链的形式,具体要执行哪些函数是由LLM的推理结果决定的。(区别于传统程序是写死的)同时LangChain也是一个丰富的工具生态系统的一部分,我们可以在此框架集成并在其之上构建自己的Agent。

在这里插入图片描述

LangChain的模块组成Model I/O(与语言模型进行接口)、Retriever(与特定于应用程序的数据进行接口)、Memory(在Pipeline运行期间保持记忆状态)、Chain(构建调用序列链条)、Agent(让管道根据高级指令选择使用哪些工具)、Callback(记录和流式传输任何管道的中间步骤)
在这里插入图片描述

在这里插入图片描述

快速安装:

pip install langchain

2. LangChain Expression Language (LCEL)

LangChain应用程序的核心构建模块是LLMChain。它结合了三个方面:

  • LLM: 语言模型是核心推理引擎。要使用LangChain,您需要了解不同类型的语言模型以及如何使用它们。
  • Prompt Templates: 提供语言模型的指令。这控制了语言模型的输出,因此了解如何构建提示和不同的提示策略至关重要。
  • Output Parsers: 将LLM的原始响应转换为更易处理的格式,使得在下游使用输出变得容易。

每个Langchain组件都是LCEL对象,我们可以使用LangChain 表达式语句(LCEL)轻松的将各个组件链接在一起,如下实现prompt + model + output parser的chain = prompt | llm | output_parser,其中| 符号可以实现将数据从一个组件提供的输出,输入到下一个组件中:

from langchain_community.llms import vllm   # this LLM class can be everyone
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are world class technical documentation writer."),
    ("user", "{input}")
])

llm = vllm.VLLM(model="/data1/huggingface/LLM/Mistral-7B-Instruct-v0.2")

output_parser = StrOutputParser()

chain = prompt | llm | output_parser

print(chain.invoke({
   "input": "how can langsmith help with testing?"}))

接下来仔细看一些下着三个组件:

prompt是一个 BasePromptTemplate,这意味着它接受模板变量的字典并生成 PromptValuePromptValue是完整提示的包装器,可以传递给 LLM (将字符串作为输入)或ChatModel(将一系列消息作为输入)。它可以与任何一种语言模型类型一起使用,因为它定义了生成BaseMessages 和生成字符串的逻辑。

prompt_value = prompt.invoke({
   "input": "how can langsmith help with testing?"})

打印出来可以看到,prompt_value 是一个ChatPromptValue对象,里面的message是一个list,包含不同角色message的对话信息

ChatPromptValue(messages=[SystemMessage(content='You are world class technical documentation writer.'), HumanMessage(content='how can langsmith help with testing?')])

如果model为 ChatModel,这意味着它将输出 a BaseMessage。而如果我们的model是 LLM,它将输出一个字符串

最后,我们将model输出传递给output_parser,这意味着 BaseOutputParser它需要字符串或 BaseMessage 作为输入。StrOutputParser是将任何输入转换为字符串。

LCEL 可以轻松地从基本组件构建复杂的链条。它通过提供以下功能来实现此目的: 每个 LCEL 对象都实现该Runnable接口,该接口定义了一组通用的调用方法invokebatchstreamainvoke、 …)。这使得 LCEL 对象链也可以自动支持这些调用,大大简化了调用方式。也就是说,每个 LCEL 对象的chain 本身就是一个 LCEL 对象。

而且每个组件都内置了与 LangSmith 的集成。如果我们设置以下两个环境变量,所有链跟踪都会记录到 LangSmith。

import os
os.environ["LANGCHAIN_API_KEY"] = "..."
os.environ["LANGCHAIN_TRACING_V2"] = "true"
Runnable 接口

标准接口包括:
stream:流回响应块(流式调用)
invoke:在输入上调用链(单次调用)
batch:在输入列表上调用链(批调用)
这些也有相应的异步方法:
astream:异步流回响应块
ainvoke:在输入异步上调用链
abatch:在输入列表上调用异步链
astream_log:除了最终响应之外,还实时流回发生的中间步骤
astream_events:链中发生的betalangchain-core流事件( 0.1.14 中引入)

各种组件的输入输出格式:
在这里插入图片描述

3. Model I/O

首先我们从最基本面的部分讲起,Model I/O 指的是和LLM直接进行交互的过程。

在这里插入图片描述
在langchain的Model I/O这一流程中,LangChain抽象的组件主要有三个:

  • Language models: 语言模型是核心推理引擎。要使用LangChain,您需要了解不同类型的语言模型以及如何使用它们。
  • Prompt Templates: 提供语言模型的指令。这控制了语言模型的输出,因此了解如何构建提示和不同的提示策略至关重要。
  • Output Parsers: 将LLM的原始响应转换为更易处理的格式,使得在下游使用输出变得容易。

下面我们展开介绍一下.

3.1 Prompt Templates

Prompt指用户的一系列指令和输入,是决定Language Model输出内容的唯一输入,主要用于帮助模型理解上下文,并生成相关和连贯的输出,如回答问题、拓写句子和总结问题。在LangChain中的相关组件主要有Prompt TemplateExample selectors,以及后面会提到的辅助/补充Prompt的一些其它组件

  • Prompt Template: 预定义的一系列指令输入参数的prompt模版(默认使用str.fromat格式化),支持更加灵活的输入,如支持output instruction(输出格式指令), partial input(提前指定部分输入参数), examples(输入输出示例)等;LangChain提供了大量方法来创建Prompt Template,有了这一层组件就可以在不同Language Model和不同Chain下大量复用Prompt Template了,Prompt Template中也会有下面将提到的Example selectors, Output Parser的参与
  • Example selectors: 在很多场景下,单纯的instruction + input的prompt不足以让LLM完成高质量的推理回答,这时候我们就还需要为prompt补充一些针对具体问题的示例(in-context learning),LangChain将这一功能抽象为了Example selectors这一组件,我们可以基于关键字,相似度(通常使用MMR/cosine similarity/ngram来计算相似度, 在后面的向量数据库章节中会提到)。为了让最终的prompt不超过Language Model的token上限(各个模型的token上限见下表),LangChain还提供了LengthBasedExampleSelector,根据长度来限制example数量,对于较长的输入,它会选择包含较少示例的提示,而对于较短的输入,它会选择包含更多示例。

PromptTemplatelangchain.prompts中的PromptTemplate类使用from_template可以创建单个字符串类型的prompt,需要str.format()格式化prompt的参数。

from langchain.prompts import PromptTemplate
prompt_template = PromptTemplate.from_template(
    "Tell me a {adjective} joke about {content}."
)
prompt_template
  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: fontmin-v0.2.0-win64.zip是一个字体转换工具,它可以将TTF和OTF格式的字体文件转换成其他格式的字体文件,比如说EOT、SVG、WOFF、WOFF2等。这个工具主要用于Web前端开发中,因为Web页面中使用不同格式的字体文件可以提高不同浏览器的兼容性和网站的渲染速度。Fontmin-v0.2.0-win64.zip实现了优质的字体压缩和优化算法,可以把字体文件大小压缩到极限,同时不影响字体的显示效果。此外,这个工具还支持多风格、多语言的字体转换,并且可以根据用户自定义的字符集,仅提取其中需要的文字部分进行转换,减小字体文件的大小。总之,fontmin-v0.2.0-win64.zip是一个非常实用的字体转换工具,可以帮助Web前端开发者在字体选择和转换方面更加灵活和高效。 ### 回答2: fontmin-v0.2.0-win64.zip 是一个字体压缩工具,可用于压缩字体文件,降低字体文件大小,减少字体加载时间,提高网页性能。这个工具适用于 Web 前端开发者和设计师,可以帮助他们优化网站字体的加载速度,提高用户的访问体验。该工具支持 TrueType 和 OpenType 字体格式,并提供了一系列的字体转换、合并和优化功能,例如子集化、映射、字符替换、字形优化等等,用户可以根据自己的需要进行设置和调整。在使用这个工具的时候,用户应该遵循一定的规范,例如选择合适的字体、合理设置字体大小和字体样式、压缩字体文件大小、减少字体文件的下载次数等等,这样才能使网页字体达到最佳的性能表现,增强网站的可用性和访问效果。总之,fontmin-v0.2.0-win64.zip 是一个非常实用的字体优化工具,可以为 Web 前端开发者和设计师带来很大的帮助,提高网站的用户体验,减少字体加载时间,优化网页性能,是一个值得推荐的工具。 ### 回答3: Fontmin-v0.2.0-win64.zip是一个字体压缩工具,可以将大型字体文件压缩成小型字体文件。这样做有助于在Web应用程序中快速加载字体。字体文件使用了大量的带宽,因此压缩文件减少了网络传输时间,提高了网站速度。Fontmin-v0.2.0-win64.zip是Windows系统下的版本,它可以在64位操作系统上运行。它使用的是Node.js和npm来运行,所以用户需要安装它们才能使用Fontmin-v0.2.0-win64.zip。使用Fontmin-v0.2.0-win64.zip的好处在于压缩的字体在品质上不会有太大的损失。压缩后的字体文件的大小要小得多,但它们在页面上看起来几乎与原始文件相同。这使Web开发人员可以通过减少字体文件的大小来提高页面的性能,而不会减小字体的外观质量。总之,Fontmin-v0.2.0-win64.zip是一个非常实用的工具,能够帮助Web开发人员改善网站的性能和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuezero_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值