# 深入探讨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())
常见问题和解决方案
-
无法访问API接口:由于某些地区的网络限制,可能需要使用API代理服务来提高访问稳定性。
-
链结构复杂:使用
print_ascii()
可以帮助更直观地理解链的执行流程。
总结和进一步学习资源
通过本文的介绍,我们了解了如何检查和理解LangChain运行的步骤。如果你希望进一步掌握LangChain的使用,可以查看以下资源:
参考资料
- LangChain API参考文档
- OpenAI Embeddings使用指南
- FAISS向量存储库示例
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---