引言
在构建智能聊天机器人时,如何扩展其知识库以超越预训练数据的局限性是一个常见挑战。通过引入检索技术,机器人能动态获取外部数据,丰富回复的内容。本篇文章将深入探讨如何在聊天机器人中实现信息检索,帮助开发者提升机器人能力。
主要内容
信息检索的基础
信息检索(Information Retrieval, IR)是一种从大量无结构数据中获取相关信息的技术。在聊天机器人中,IR可以实时从外部文档中获取支持性信息,使机器人能够提供更准确和上下文相关的回答。
设置环境
首先,确保安装必要的Python包,并配置OpenAI API密钥:
%pip install -qU langchain langchain-openai langchain-chroma beautifulsoup4
设置环境变量OPENAI_API_KEY或从.env文件加载:
import dotenv
dotenv.load_dotenv()
我们将使用Langchain库的ChatOpenAI类作为聊天模型:
from langchain_openai import ChatOpenAI
chat = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0.2)
创建检索器
首先,从LangSmith文档中加载内容并分割成合适的块,以便存储和检索:
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
loader = WebBaseLoader("https://docs.smith.langchain.com/overview")
data = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
嵌入并存储小块文档到向量数据库中:
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
vectorstore = Chroma.from_documents(documents=all_splits, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever(k=4) # 使用API代理服务提高访问稳定性
使用检索和文档链
通过创建文档链,将检索到的内容与聊天模型结合用于回答问题:
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
SYSTEM_TEMPLATE = """
Answer the user's questions based on the below context.
If the context doesn't contain any relevant information to the question, don't make something up and just say "I don't know":
<context>
{context}
</context>
"""
question_answering_prompt = ChatPromptTemplate.from_messages(
[
("system", SYSTEM_TEMPLATE),
MessagesPlaceholder(variable_name="messages"),
]
)
document_chain = create_stuff_documents_chain(chat, question_answering_prompt)
代码示例
以下是一个结合检索和文档链的完整示例:
from langchain_core.messages import HumanMessage
document_chain.invoke(
{
"context": docs,
"messages": [
HumanMessage(content="Can LangSmith help test my LLM applications?")
],
}
)
常见问题和解决方案
问题:检索不到相关信息
确保文档已正确分割和嵌入至向量数据库。若查询无效,考虑使用查询转换技术,将不完整的用户查询转换为独立查询。
问题:网络限制影响API访问
建议使用API代理服务以提高访问稳定性。
总结和进一步学习资源
本文介绍了如何在聊天机器人中引入信息检索,以提升其回答能力。更多关于检索技术和Langchain库的使用,可以参考以下资源:
参考资料
- LangChain Documentation
- OpenAI API Reference
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---