AI 文摘

LLM之RAG实战如何构建一个RAG支持的聊天机器人,包括聊天、嵌入和重排序





作者: AINLP 来源: AINLP

在人工智能和机器学习不断发展的环境中,聊天机器人变得越来越复杂,从简单的基于规则的回复转变为基于上下文的对话。在这篇博客文章中,我们将深入研究创建一个RAG支持的聊天机器人,该聊天机器人利用先进的NLP模型进行聊天、嵌入和重新排序,并使用hnswlib 进行高效的文档检索。

设置环境

在深入研究代码之前,请确保安装了必要的库。这包括cohere、hnswlib和非结构化。可以使用pip安装它们:

pip install cohere hnswlib unstructured

此外,请确保正确设置了环境变量,尤其是COHERE_API_KEY ,因为它对于访问Cohere的API至关重要。

步骤1:准备文档集合

我们的聊天机器人需要一个知识库来提取信息。为此,需要创建一个Documents 类:

* 从URLs收集源文档;

* 使用HTML分区和基于标题的分块将这些文档划分为块;

* 使用Cohere的嵌入模型嵌入这些块,以便后续进行检索。

class Documents:
    def __init__(self, sources):
        # Initialization and methods to load, embed, and index documents
        # ...
  

    def load(self):
        # Load and partition documents
        # ...
  

    def embed(self):
        # Embed documents using Cohere
        # ...
  

    def index(self):
        # Create hnswlib index
        # ...

步骤2:使用hnswlib对文档建立索引

一旦文档准备好并表示为嵌入,就可以使用hnswlib创建一个高效的索引,聊天机器人根据查询嵌入快速检索最相关的文档。


# Indexing snippet from the Documents class
def index(self):
    print("Indexing documents...")
    self.idx = hnswlib.Index(space="ip", dim=1024)
    self.idx.init_index(max_elements=self.docs_len, ef_construction=512, M=64)
    self.idx.add_items(self.docs_embs, list(range(self.docs_len)))
    print(f"Indexing complete with {self.idx.get_current_count()} documents.")

步骤3:建立聊天机器人

Chatbot 类可以利用Cohere 的聊天和重排序API生成响应并细化搜索结果。

***generate_response** 方法处理用户消息、生成搜索查询并检索相关文档;

* 然后,使用这些文档生成上下文相关的响应。

class Chatbot:
    def __init__(self, docs):
        self.docs = docs
        self.conversation_id = str(uuid.uuid4())
  

    def generate_response(self, message):
        # Generate and process responses
        # ...
  

    def retrieve_docs(self, response):
        # Retrieve documents based on queries
        # ...

步骤4:与Streamlight集成

要使聊天机器人具有互动性,可以使用Streamlit 创建用户友好的web界面。Streamlit支持输入文本,并可以展示聊天机器人的响应。


import streamlit as st
  

def main():
    st.title("AI Chatbot")
    user_message = st.text_input("Enter your message:")
    if st.button("Send"):
        with st.spinner('Generating response...'):
            response = chatbot.generate_response(user_message)
            for event in response:
                st.write(event.text)
  

if __name__ == "__main__":
    main()

** 运行聊天机器人**

streamlit run app.py

结论

构建RAG支持的聊天机器人是创建能够以有意义的方式理解和响应人类查询的人工智能应用程序的重要一步。通过将Cohere的NLP模型和高效的文档检索相结合,您可以创建一个聊天机器人,它不仅能理解上下文,还能提供知情和准确的回复。

该项目不仅展示了Generative AI的实际应用,而且对于那些希望深入研究AI和ML领域的人来说,它也是一个极好的学习工具。

这是一个基本流程,可以更好地理解此应用程序的基本原理。

完整的代码,如下所示:


import streamlit as st
import cohere
import os
import hnswlib
from your_existing_code import Documents, Chatbot
  

# Initialize the Cohere client
co = cohere.Client(os.environ["COHERE_API_KEY"])
  

# Define your sources here (or load them from an external source)
sources = [
    {
        "title": "Similarity Between Words and Sentences", 
        "url": "https://docs.cohere.com/docs/similarity-between-words-and-sentences"},
    {
        "title": "The Attention Mechanism", 
        "url": "https://docs.cohere.com/docs/the-attention-mechanism"},
    {
        "title": "Transformer Models", 
        "url": "https://docs.cohere.com/docs/transformer-models"}   
]
  

# Create instances of your classes
documents = Documents(sources)
chatbot = Chatbot(documents)
  

# Streamlit app
def main():
    st.title("AI Chatbot")
  

    # User message input
    user_message = st.text_input("Enter your message:", key="user_message")
  

    # Chatbot response
    if st.button("Send"):
        with st.spinner('Generating response...'):
            response = chatbot.generate_response(user_message)
            for event in response:
                st.write(event.text)  # Display the chatbot's response
  

# Run the app
if __name__ == "__main__":
    main()

参考文献:

[1] https://medium.com/@fbanespo/how-to-build-a-rag-powered-chatbot-with-chat-embed-and-rerank-a6d8236d7be7

进技术交流群请添加AINLP小助手微信(id: ainlp2)

请备注具体方向+所用到的相关技术点

![](https://api.allorigins.win/raw?url=https://mmbiz.qpic.cn/mmbiz_jpg/nW2ZPfuYqSJADkmZ2IX6Z23znAibuEevotDMq9iaMxiapK7jfMibiauGFkycicAJEs6x5U9SGyDJZ0S1tRed9TPNUUDQ/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。

  


![](https://api.allorigins.win/raw?url=https://mmbiz.qpic.cn/mmbiz_jpg/nW2ZPfuYqSKABHCqVVQkVYPrM4XY1vsd0iaeuXzyJnoFc8cibd5mYb4wdA3WMQtiaPVmr0XLZHMuVibqWncibpnTSnQ/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)       

更多AI工具,参考Github-AiBard123国内AiBard123

可关注我们的公众号:每天AI新工具