学习笔记21《LangChain实战课:构建易速鲜花聊天机器人》| 豆包MarsCode AI刷题

133 阅读3分钟

学习笔记21《LangChain实战课:构建易速鲜花聊天机器人》

课程概览

在本次LangChain实战课中,我们继续为易速鲜花的市场部、销售部和客服部门的员工,以及易速鲜花的广大用户开发一个聊天机器人。这个聊天机器人将集成LLM和LangChain的核心功能,以提供更好的用户体验和业务支持。

聊天机器人项目说明

聊天机器人(Chatbot)是LLM和LangChain的核心用例之一,它们能够进行长时间的对话并访问用户想要了解的信息。本项目的核心组件包括聊天模型、提示模板、记忆和检索器。

技术实现细节

我们将遵循敏捷开发原则,先开发一个基础版本的机器人,然后逐步加入更多功能,如基于易速鲜花的企业知识库进行检索,以及数据库查询功能。

第一步:开发最基本的聊天机器人

我们使用LangChain的ConversationChain实现一个基础的聊天对话工具。

# 设置OpenAI API密钥
import os
os.environ["OPENAI_API_KEY"] = 'Your OpenAI Key'

# 导入所需的库和模块
from langchain.schema import HumanMessage, SystemMessage
from langchain.chat_models import ChatOpenAI

# 创建一个聊天模型的实例
chat = ChatOpenAI()

# 创建一个消息列表
messages = [
    SystemMessage(content="你是一个花卉行家。"),
    HumanMessage(content="朋友喜欢淡雅的颜色,她的婚礼我选择什么花?")
]

# 使用聊天模型获取响应
response = chat(messages)
print(response)

第二步:增加记忆机制

我们通过ConversationBufferMemory给Chatbot增加记忆,让它能够记住与用户之间的先前互动。

# 导入所需的库和模块
from langchain.memory import ConversationBufferMemory
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder

# 带记忆的聊天机器人类
class ChatbotWithMemory:
    def __init__(self):
        self.chat = ChatOpenAI()
        self.memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
        self.prompt = ChatPromptTemplate(
            messages=[
                SystemMessagePromptTemplate.from_template("你是一个花卉行家。"),
                MessagesPlaceholder(variable_name="chat_history"),
                HumanMessagePromptTemplate.from_template("{question}")
            ]
        )

    def chat_loop(self):
        print("Chatbot 已启动! 输入'exit'来退出程序。")
        while True:
            user_input = input("你: ")
            if user_input.lower() == 'exit':
                print("再见!")
                break
            self.memory.add_user_message(user_input)
            response = self.chat([self.prompt.format_messages(chat_history=self.memory.get_chat_history(), question=user_input)])
            print(f"Chatbot: {response.content}")

第三步:增加检索机制

我们整合易速鲜花的内部文档资料,让聊天机器人能够基于业务流程给出专业的回答。

# 导入所需的库
from langchain.vectorstores import Qdrant
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter

# ChatBot类的实现-带检索功能
class ChatbotWithRetrieval:
    def __init__(self, dir):
        # 加载和处理文档
        documents = self.load_documents(dir)
        # 文本的分割和向量化
        text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=0)
        all_splits = text_splitter.split_documents(documents)
        self.vectorstore = Qdrant.from_documents(
            documents=all_splits,
            embedding=OpenAIEmbeddings(),
            location=":memory:",
            collection_name="my_documents"
        )
        # 初始化LLM和Memory
        self.llm = ChatOpenAI()
        self.memory = ConversationSummaryMemory(
            llm=self.llm,
            memory_key="chat_history",
            return_messages=True
        )

    def load_documents(self, dir):
        # 实现文档加载逻辑
        pass

    def chat_loop(self):
        print("Chatbot 已启动! 输入'exit'来退出程序。")
        while True:
            user_input = input("你: ")
            if user_input.lower() == 'exit':
                print("再见!")
                break
            # 调用检索链
            response = self.qa(user_input)
            print(f"Chatbot: {response['answer']}")

思考题

  1. 重构代码:使用ConversationChain中的Memory来重构并简化代码。
  2. 数据库查询功能:增加对数据库的查询能力,让用户或者业务人员知道某种鲜花的库存情况、销售情况等等。

总结

通过本节课的学习,我们成功构建了一个具备记忆和检索功能的聊天机器人,它不仅能够提供基于世界知识的回答,还能够根据易速鲜花的内部文档和数据库提供专业的回答。下节课,我们将学习如何将这个聊天机器人部署到网络中,供企业内部员工和用户使用。