LangChain的核心概念是Chain,它是一种由多个流程构件组成的有向图,可以对输入的文本进行各种转换和处理,输出你想要的结果。LangChain提供了一种专门的表达式语言,叫做LCEL(LangChain Expression Language),它可以让你用简洁和灵活的语法来定义和操作Chain,无需编写复杂的代码。
创新互联专注于容县网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供容县营销型网站建设,容县网站制作、容县网页设计、容县网站官网定制、小程序设计服务,打造容县网络公司原创品牌,更为您提供容县网站排名全网营销落地服务。
今天我将带领大家使用LCEL语法来构建和组合Chain,实现强大的LLM应用。
LCEL是一个用于构建复杂链式组件的语言,它支持流式处理、并行化、日志记录等功能。LCEL的基本语法规则是使用|
符号将不同的组件连接起来,形成一个链式结构。|
符号类似于Unix的管道操作符,它将一个组件的输出作为下一个组件的输入,从而实现数据的传递和处理。
LCEL的语法非常简洁和灵活,它可以用于各种场景和任务。例如,我们可以使用LCEL来实现以下功能:
prompt = BasePromptTemplate("tell me a short joke about {topic}")
model = ChatModel()
output_parser = StrOutputParser()
joke = ({"topic": RunnablePassthrough()} | prompt | model | output_parser)
这个链式结构的作用是,首先根据用户输入的主题,生成一个提示,然后将提示传递给语言模型,让它生成一个笑话,最后将笑话转换为字符串,返回给用户。我们可以用以下代码来测试这个链式结构:
joke.invoke("ice cream")
# > "Why did the ice cream go to therapy? \n\nBecause it had too many toppings and couldn't find its cone-fidence!"
通过以上案例,我们能够了解如何使用LCEL语言构建一个生成笑话的链式结构。我将为您解释其中的每一步:
LCEL语法的核心思想是:一切皆为对象,一切皆为链。这意味着,LCEL语法中的每一个对象都实现了一个统一的接口:Runnable,它定义了一系列的调用方法(invoke, batch, stream, ainvoke, …)。这样,你可以用同样的方式调用不同类型的对象,无论它们是模型、函数、数据、配置、条件、逻辑等等。而且,你可以将多个对象链接起来,形成一个链式结构,这个结构本身也是一个对象,也可以被调用。这样,你可以将复杂的功能分解成简单的组件,然后用LCEL语法将它们组合起来,形成一个完整的应用。
LCEL语法还提供了一些组合原语,让你可以更灵活地控制链式结构的行为,例如:
parallel
原语将多个对象并行执行,提高效率和性能。fallback
原语为某个对象指定一个备选对象,当主对象执行失败时,自动切换到备选对象,保证应用的可用性和稳定性。config
原语为某个对象指定一个配置对象,根据运行时的输入或条件,动态地修改对象的参数或属性,增加应用的灵活性和适应性。为了更好地理解LCEL语法的优势,我们可以将它与传统的编程语言进行对比,看看如果不使用LCEL语法,我们需要做哪些额外的工作。我们仍以上述笑话的生成链为例。
这段代码非常简洁和清晰,只需要几行就可以实现我们想要的功能。而且,这段代码还具有很高的可扩展性和灵活性,例如:
stream
代替invoke
:# 调用笑话对象,传入一个主题字符串,得到一个笑话字符串的流
joke.stream("dog")
batch
代替invoke
:# 调用笑话对象,传入一个主题字符串的列表,得到一个笑话字符串的列表
joke.batch(["dog", "cat", "banana"])
joke.ainvoke("dog")
prompt = BasePromptTemplate("tell me a short joke about {topic}")
# 改用gpt-3.5-turbo的llm
model = OpenAI(model="gpt-3.5-turbo")
output_parser = StrOutputParser()
joke = ({"topic": RunnablePassthrough()} | prompt | model | output_parser)
# 增加OpenAI的llm作为ChatModel的fallbacks
prompt = BasePromptTemplate("tell me a short joke about {topic}")
model = ChatModel()
fallback_llm = OpenAI(model="gpt-3.5-turbo")
modal_with_fallback = model.with_fallbacks([fallback_llm])
output_parser = StrOutputParser()
joke = ({"topic": RunnablePassthrough()} | prompt | modal_with_fallback | output_parser)
以上只是一些简单的例子,你可以根据自己的需求,使用LCEL语法提供的更多的组合原语,实现更复杂的功能和效果。
那么,如果我们不使用LCEL语法,而是使用传统的编程语言,我们需要做哪些额外的工作呢?我们以Python为例,看看我们需要写多少代码,才能实现与LCEL语法相同的功能。
代码对比
从上面的代码可以看出,如果我们不使用LCEL语法,而是使用传统的编程语言,我们需要写很多的代码,才能实现与LCEL语法相同的功能。而且,这些代码还存在很多的问题,例如:
因此,我们可以看出,LCEL语法相比传统的编程语言,具有很多的优势,它可以让我们更高效、更简单、更灵活地构建复杂的AI应用。
在本文中,我们介绍了如何使用LangChain的LECL语法。我们介绍了LECL的基本语法以及基于LECL的流、异步等多种用法,并对比了不适用LECL语法开发的情况。
我们希望本文能够帮助你了解LangChain中特色的LECL语法,鼓励你尝试使用LangChain开发自己的应用。
参考资料:
新闻名称:LangChain应用开发指南——熟用LCEL语法掌握Chain的精髓
URL网址:http://www.shufengxianlan.com/qtweb/news11/198611.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联