深入探讨LangChain的Runnables和检视技术

4 阅读2分钟
# 深入探讨LangChain的Runnables和检视技术

## 引言

在使用LangChain开发复杂的链式任务时,了解如何检视和调试runnables是非常重要的。本文将介绍如何通过编程方式查看链内部的步骤,为开发者提供更直观的理解,从而提高代码的稳定性和性能。

## 主要内容

### 创建一个基本的Chain

首先,我们来创建一个简单的链,这个链将用于信息检索。这需要安装必要的库:

```bash
%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()
)

使用图形化方法检查Chain

为了更好地理解我们的链结构,我们可以使用get_graph()方法获取链的图形表示:

chain.get_graph()

为了更清晰地查看图形,可以使用print_ascii()方法:

chain.get_graph().print_ascii()

这将以ASCII图表方式展示链的结构,使得我们可以直观地看到每个步骤之间的关系。

查看Chain中的Prompt

开发时,可能我们会对链中使用的Prompt感兴趣。可以通过get_prompts()方法来查看:

chain.get_prompts()

输出将展示链中使用的Prompt模版及其相关的变量和消息。

代码示例

以下是一个完整的代码示例,展示以上介绍的所有内容:

# 使用API代理服务提高访问稳定性
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()

# 定义Prompt模版
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()
)

# 获取并打印链的图形表示
chain.get_graph().print_ascii()

# 获取链的Prompt
print(chain.get_prompts())

常见问题和解决方案

  1. 无法访问API接口:由于某些地区的网络限制,可能需要使用API代理服务来提高访问稳定性。

  2. 链结构复杂:使用print_ascii()可以帮助更直观地理解链的执行流程。

总结和进一步学习资源

通过本文的介绍,我们了解了如何检查和理解LangChain运行的步骤。如果你希望进一步掌握LangChain的使用,可以查看以下资源:

参考资料

  • LangChain API参考文档
  • OpenAI Embeddings使用指南
  • FAISS向量存储库示例

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

---END---