**掌握LangChain:如何在链式步骤中传递参数**

115 阅读2分钟

引言

在构建复杂的自动化工作流程中,我们常常需要在多个步骤之间传递数据。对于使用LangChain的开发者而言,了解如何在链式结构中传递参数是提高效率的关键。这篇文章将详细介绍如何使用RunnablePassthrough类来实现参数传递,并结合RunnableParallel在复杂链中传递数据。

主要内容

什么是RunnablePassthrough

RunnablePassthrough是LangChain中的一个工具类,旨在将数据从一个步骤原样传递到下一个步骤。它通常与RunnableParallel结合使用,以确保数据畅通无阻地流向特定的链节点。

设置环境

在开始之前,请确保您已安装所需的LangChain库:

%pip install -qU langchain langchain-openai

另外,设置您的OpenAI API密钥:

import os
from getpass import getpass

os.environ["OPENAI_API_KEY"] = getpass()

参数传递示例

下面是一个简单的示例,展示如何在步骤之间传递参数:

from langchain_core.runnables import RunnableParallel, RunnablePassthrough

runnable = RunnableParallel(
    passed=RunnablePassthrough(),
    modified=lambda x: x["num"] + 1,
)

result = runnable.invoke({"num": 1})
print(result)  # 输出: {'passed': {'num': 1}, 'modified': 2}

在此示例中,passed键通过RunnablePassthrough()保持不变,而modified键通过lambda函数增加了1。

实际应用示例

在真实应用中,我们可能需要组合各种组件来构建更复杂的查询处理流程:

from langchain_community.vectorstores import FAISS
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddings

# 使用API代理服务提高访问稳定性
vectorstore = FAISS.from_texts(
    ["harrison worked at kensho"], embedding=OpenAIEmbeddings()
)
retriever = vectorstore.as_retriever()
template = """Answer the question based only on the following context:
{context}

Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI()

retrieval_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | model
    | StrOutputParser()
)

output = retrieval_chain.invoke("where did harrison work?")
print(output)  # 输出: 'Harrison worked at Kensho.'

在这个示例中,用户输入作为问题被传递给模型,同时上下文由检索器动态生成。

常见问题和解决方案

  1. 网络限制:由于某些地区的网络限制,API可能无法稳定访问。建议使用API代理服务。
  2. 数据格式错误:确保每个步骤的数据格式符合预期,尤其在处理复杂链结构时。

总结和进一步学习资源

通过掌握参数传递,您可以构建更加灵活和强大的LangChain应用。建议继续探索LangChain文档和其他在线指南,以深入了解更多功能。

参考资料

  • LangChain官方文档
  • LangChain社区论坛
  • OpenAI API文档

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

---END---