0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Redis Enterprise,LangChain,OpenAI 构建一个电子商务聊天机器人

虹科网络可视化技术 2023-11-25 08:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

鉴于最近人工智能支持的API和网络开发工具的激增,许多科技公司都在将聊天机器人集成到他们的应用程序中。

LangChain是一种备受欢迎的新框架,近期引起了广泛关注。该框架旨在简化开发人员与语言模型、外部数据和计算资源进行交互的应用程序开发过程。它通过清晰且模块化的抽象,关注构建所需的所有构建模块,并构建了常用的"链条",即构建模块的组合。例如,对话检索链条可以让用户与外部存储中的数据进行交互,实现真实的对话体验。

LangChain是如何实现这一目标的呢?OpenAI的语言模型并没有针对特定企业的具体数据进行训练或优化。如果您的聊天机器人依赖于该框架,您需要在运行时向OpenAI提供数据。在检索步骤中,我们使用向量相似性搜索(VSS)从Redis中获取与用户查询相关的数据,并将这些数据与原始问题一起输入到语言模型中。这要求模型仅使用提供的信息(在人工智能领域中称为"上下文")来回答问题。

这个链条中的大部分复杂性都归结于检索步骤。因此,我们选择将LangChain与Redis Enterprise集成为一个向量数据库。这种组合为复杂的人工智能和产品开发之间搭建了桥梁。


在这个简短的教程中,我们将展示如何构建一个会话式的零售购物助手,帮助顾客在产品目录中发现那些被埋藏的令人感兴趣的商品。读者可以按照提供的完整代码进行操作。

01

构建你的聊天机器人

首先,安装项目所需的所有组件。

1、安装 Python 依赖项

这个项目需要一些Python库。这些库存储在github仓库的文件中。

pip install langchain==0.0.123pip install openai==0.27.2pip install redis==4.5.3pip install numpypip install pandaspip install gdown

2、准备产品数据集

对于零售聊天机器人,我们选择使用Amazon Berkeley Objects数据集。该数据集包含了大量适用于生成零售助手的亚马逊产品。

使用Python的pandas库来加载和预处理数据集。在加载过程中,我们可以截断较长的文本字段。这样一来,我们的数据集会更加精简,从而节省内存和计算时间。

import pandas as pd
MAX_TEXT_LENGTH=1000 # Maximum num of text characters to use def auto_truncate(val): """Truncate the given text.""" return val[:MAX_TEXT_LENGTH] # Load Product data and truncate long text fields all_prods_df = pd.read_csv("product_data.csv", converters={ 'bullet_point': auto_truncate, 'item_keywords': auto_truncate, 'item_name': auto_truncate })

3、在完全加载了我们的产品数据集之后,进行一些最后的预处理步骤,以清理关键词字段并删除缺失值。

# Replace empty strings with None and drop all_prods_df['item_keywords'].replace('', None, inplace=True) all_prods_df.dropna(subset=['item_keywords'], inplace=True) # Reset pandas dataframe index all_prods_df.reset_index(drop=True, inplace=True)

4、如果你持续在跟进GitHub上的代码步骤,可以使用all_prods_df.head()来查看数据框的前几行。完整的数据集包含超过100,000个产品,但是对于这个聊天机器人,我们将其限制在2500个的子集中。

# Num products to use (subset)NUMBER_PRODUCTS = 2500 # Get the first 2500 productsproduct_metadata = ( all_prods_df .head(NUMBER_PRODUCTS) .to_dict(orient='index')) # Check one of the productsproduct_metadata[0]

02

使用Redis作为向量数据库的设置

1、LangChain为Redis提供了一个简单的包装器,可用于加载文本数据并创建捕捉“含义”的嵌入向量。在以下代码中,我们准备产品文本和元数据,准备文本嵌入的提供程序(OpenAI),为搜索索引分配一个名称,并提供一个用于连接的Redis URL。

import os from langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores.redis import Redis as RedisVectorStore # set your openAI api key as an environment variableos.environ['OPENAI_API_KEY'] = "YOUR OPENAI API KEY" # data that will be embedded and converted to vectorstexts = [ v['item_name'] for k, v in product_metadata.items()] # product metadata that we'll store along our vectorsmetadatas = list(product_metadata.values()) # we will use OpenAI as our embeddings providerembedding = OpenAIEmbeddings() # name of the Redis search index to createindex_name = "products" # assumes you have a redis stack server running on local hostredis_url = "redis://localhost:6379"

2、然后,我们将它们整合在一起,创建Redis向量存储。

# create and load redis with documentsvectorstore = RedisVectorStore.from_texts( texts=texts, metadatas=metadatas, embedding=embedding, index_name=index_name, redis_url=redis_url)

03

创建 LangChain 对话链

现在我们准备好创建一个聊天机器人,使用存储在Redis中的产品数据来进行对话。聊天机器人因其极大的实用性而非常受欢迎。在我们下面构建的场景中,我们假设用户需要穿搭建议。

1、为了引入更多LangChain功能,我们需要导入几个LangChain工具。

from langchain.callbacks.base import CallbackManagerfrom langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandlerfrom langchain.chains import ( ConversationalRetrievalChain, LLMChain)from langchain.chains.question_answering import load_qa_chainfrom langchain.llms import OpenAIfrom langchain.prompts.prompt import PromptTemplate

2、正如在介绍中提到的,这个项目使用了一个ConversationalRetrievalChain来简化聊天机器人的开发。

Redis作为我们的存储介质,保存了完整的产品目录,包括元数据和由OpenAI生成的捕捉产品内容语义属性的嵌入向量。通过使用底层的Redis Vector Similarity Search(VSS),我们的聊天机器人可以直接查询目录,以找到与用户购物需求最相似或相关的产品。这意味着您无需进行繁琐的关键字搜索或手动过滤,VSS会自动处理这些问题。

构成聊天机器人的ConversationalRetrievalChain分为三个阶段:

问题创建:在这个阶段,聊天机器人评估输入的问题,并利用OpenAI GPT模型将其与之前的对话交互知识(如果有)结合起来。通过这个过程,机器人可以更好地理解购物者的问题,并为后续的检索提供准确的上下文。

检索:在检索阶段,聊天机器人根据购物者表达的兴趣项,搜索Redis数据库,以获取最佳的可用产品。通过使用Redis Vector Similarity Search(VSS)等技术,机器人能够快速而准确地检索与购物者需求相匹配的产品。

问题回答:在这个阶段,聊天机器人从向量搜索的查询结果中获取产品信息,并利用OpenAI GPT模型帮助购物者浏览选项。机器人可以生成适当的回答,提供有关产品特征、价格、评价等方面的信息,以帮助购物者做出决策。

3、虽然LangChain和Redis极大地提升了工作流程的效率,但与大型语言模型(如GPT)进行交互时需要使用"提示(prompt)"来进行沟通。我们创造出一组指令作为提示,以引导模型的行为朝着期望的结果发展。为了获得聊天机器人的最佳效果,需要进一步完善提示的设置。

template = """Given the following chat history and a follow up question, rephrase the follow up input question to be a standalone question.Or end the conversation if it seems like it's done.Chat History:\"""{chat_history}\"""Follow Up Input: \"""{question}\"""Standalone question:""" condense_question_prompt = PromptTemplate.from_template(template) template = """You are a friendly, conversational retail shopping assistant. Use the following context including product names, descriptions, and keywords to show the shopper whats available, help find what they want, and answer any questions. It's ok if you don't know the answer.Context:\""" {context}\"""Question:\"\""" Helpful Answer:""" qa_prompt= PromptTemplate.from_template(template)

4、接下来,我们定义两个OpenAI LLM,并分别使用链条对其进行封装,用于问题生成和问题回答。streaming_llm允许我们逐个标记地将聊天机器人的响应传输到stdout,从而为用户提供类似于聊天机器人的用户体验。

# define two LLM models from OpenAIllm = OpenAI(temperature=0) streaming_llm = OpenAI( streaming=True, callback_manager=CallbackManager([ StreamingStdOutCallbackHandler() ]), verbose=True, max_tokens=150, temperature=0.2) # use the LLM Chain to create a question creation chainquestion_generator = LLMChain( llm=llm, prompt=condense_question_prompt) # use the streaming LLM to create a question answering chaindoc_chain = load_qa_chain( llm=streaming_llm, chain_type="stuff", prompt=qa_prompt)

5、最后,我们使用ConversationalRetrievalChain将所有三个步骤封装起来。

chatbot = ConversationalRetrievalChain( retriever=vectorstore.as_retriever(), combine_docs_chain=doc_chain, question_generator=question_generator)

04

虚拟购物助手已就绪

1、请注意,这并不是一个全能的聊天AI。然而,通过Redis的帮助,它存储了完整的产品库知识,我们能够打造出一个相当出色的体验。

# create a chat history bufferchat_history = []# gather user input for the first question to kick off the botquestion = input("Hi! What are you looking for today?") # keep the bot running in a loop to simulate a conversationwhile True: result = chatbot( {"question": question, "chat_history": chat_history} ) print("\n") chat_history.append((result["question"], result["answer"])) question = input()

2、该机器人将实时与您交互,并根据目录中的商品帮助您缩小选择范围。以下是一个简单的示例:

Hi! What are you looking for today? >> gold-plated earrings Hi there! I'm happy to help you find the perfect earrings. Do you have a preference for yellow gold plated sterling silver or platinum or gold-plated sterling silver? >> My preference is the yellow gold plated sterling silver Hi there! Are you looking for yellow gold-plated sterling silver earrings with Swarovski Zirconia or Topaz gemstones? We have a few options that might fit the bill. We have yellow gold-plated sterling silver Swarovski Zirconia fancy green stud earrings, yellow gold-plated sterling silver honey topaz stud earrings made with Swarovski Topaz gemstones, and yellow gold-plated sterling silver antique drop earrings set.

3、在聊天机器人用发出“你好!今天你在找什么?”此类的招呼后,尝试一些示例提示,或者自己创建一个。

05

定制您的链条以提高性能

1、LangChain最好的部分之一是每个类抽象都可以扩展或创建自己的预设。我们自定义BaseRetriever类,在返回结果之前执行一些文档预处理。

import jsonfrom langchain.schema import BaseRetrieverfrom langchain.vectorstores import VectorStorefrom langchain.schema import Documentfrom pydantic import BaseModel class RedisProductRetriever(BaseRetriever, BaseModel): vectorstore: VectorStore class Config: arbitrary_types_allowed = True def combine_metadata(self, doc) -> str: metadata = doc.metadata return ( "Item Name: " + metadata["item_name"] + ". " + "Item Description: " + metadata["bullet_point"] + ". " + "Item Keywords: " + metadata["item_keywords"] + "." ) def get_relevant_documents(self, query): docs = [] for doc in self.vectorstore.similarity_search(query): content = self.combine_metadata(doc) docs.append(Document( page_content=content, metadata=doc.metadata )) return docs

2、我们需要更新检索类和聊天机器人,以使用上述的自定义实现。

redis_product_retriever = RedisProductRetriever(vectorstore=vectorstore) chatbot = ConversationalRetrievalChain( retriever=redis_product_retriever, combine_docs_chain=doc_chain, question_generator=question_generator)

3、大功告成!现在你的聊天机器人可以在对话中注入更多的产品信息。以下是另一个短对话的示例:

printf("hello Hi! What are you looking for today? >>> fancy footwear for going out Hi there! We have a few great options for women's shoes and sandals. We have the Amazon Brand - The Fix Women's Giana Open Toe Bootie with Pearl Buckle, bright white leather, 9.5 B US, Flavia Women's Beige Fashion Sandals-7 UK (39 EU) (8 US) (FL/236/BEG), Flavia Women's Blue Fashion Sandals-8 UK (40 EU) (9 US) (FL/211/BLU), and The Fix Women's Faris Flat Slide Sandal with Pearls. All of these shoes feature a variety of styles and colors to choose from. Let me know if you have any questions about any of these items! >>> These are nice. However, I am looking for men's shoes. Can you help me? Hi there! We have a great selection of men's formal shoes available. We have Amazon Brand - Symbol Men's Formal Shoes, Amazon Brand - Symbol Men's Leather Formal Shoes, and more. All of our formal shoes are made from high quality materials and feature a variety of closure types, toe styles, and heel types. They also come with a manufacturer's warranty and care instructions to ensure they last. Let me know if you have any questions or need help finding the perfect pair of shoes for you! >>>Can you show me some more men's options? Hi there! I'm here to help you find the perfect item for you. We have a few options available for men's formal shoes. We have the Men's Stainless Steel Link Bracelet, the Amazon Brand - Arthur Harvey Men's Leather Formal Shoes, and the Amazon Brand - Symbol Men's Formal Derby shoes. All of these items feature a variety of features such as leather material, lace-up closure, pointed toe, block heel, and more. If you have any questions about any of these items, please let me know. I'm happy to help! >>> Ok this looks great, thanks!world!");

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    213

    文章

    30580

    浏览量

    219558
  • 人工智能
    +关注

    关注

    1813

    文章

    49734

    浏览量

    261507
  • VSS
    VSS
    +关注

    关注

    1

    文章

    36

    浏览量

    22005
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3576机器人核心:三屏异显+八路摄像头,重塑机器人交互与感知

    ,已经成为机器人开发者不容忽视的核心处理器。而米尔电子的MYD-LR3576开发板,则以其丰富的接口、稳定的性能和成熟的软硬件支持,为快速原型验证和产品开发提供了绝佳的平台。如果您正在寻找款能够同时处理复杂视觉任务和丰富交互界
    发表于 10-29 16:41

    工业机器人的特点

    是实现工业互联网的基础,也是第步。 三大优势:提高产品品质、提高产出、适用范围广 机器人在生产上的优势可以分为提高产品品质、提高产出以及适用范围广三方面。提高产品品质 工业机器人
    发表于 07-26 11:22

    小智 AI 聊天机器人 (XiaoZhi AI Chatbot)

    小智 AI 聊天机器人款基于开源硬件的智能对话设备,由开发者“虾哥”以 ​MIT 许可证发布,旨在帮助用户入门 AI 硬件开发,将大语言模型(LLM)应用于实体设备中。小智 AI 聊天机器人
    的头像 发表于 05-30 15:56 1.2w次阅读
    小智 AI <b class='flag-5'>聊天机器人</b> (XiaoZhi AI Chatbot)

    盘点#机器人开发平台

    地瓜机器人RDK X5开发套件地瓜机器人RDK X5开发套件产品介绍 旭日5芯片10TOPs算力-电子发烧友网机器人开发套件 Kria KR260
    发表于 05-13 15:02

    【「# ROS 2智能机器人开发实践」阅读体验】视觉实现的基础算法的应用

    的本质是解决“鸡与蛋”问题:机器人需要地图来定位,又需要准确定位来构建地图。书中从前端(传感器数据处理)和后端(位姿优化)两层面解析了SLAM的算法逻辑。 激光雷达和视觉SLAM各有优劣,例如激光
    发表于 05-03 19:41

    【「# ROS 2智能机器人开发实践」阅读体验】机器人入门的引路书

    的非常好的,特别是些流程图,很清晰的阐释了概念 很适合作为初学者入门的引路书 还能了解很多技术和框架,破除初学者的自负困境,让初学者知道功能是由很多开发者维护的,前人已经为各种产品搭建了完善的框架。避免陷入得一个人单打独斗的错觉
    发表于 04-30 01:05

    名单公布!【书籍评测活动NO.58】ROS 2智能机器人开发实践

    Gazebo机器人仿真平台,以RDK X3、RDK X5赋能生态产品——OriginBot智能机器人开源套件为原型讲解,手把手教读者从零构建
    发表于 03-03 14:18

    OpenAI即将推出GPT-5模型

    先进技术,其中包括备受瞩目的o3工具。通过整合这些技术,GPT-5模型将实现更加强大的功能和性能。 值得提的是,GPT-5模型将被广泛应用于OpenAI聊天机器人ChatGPT以及API平台。这意味着用户将能够体验到更加智能
    的头像 发表于 02-13 11:21 913次阅读

    马斯克DOGE团队开发政府AI聊天机器人

    近日,据媒体引述消息人士透露,全球首富马斯克旗下的政府效率部门(DOGE)正着手为美国联邦总务署(GSA)打造款定制的生成式人工智能(GenAI)聊天机器人——GSAi。
    的头像 发表于 02-10 18:04 1019次阅读

    OpenAI自研传感器,打造未来智能机器人

    近日,OpenAI硬件部门总监Caitlin Kalinowski透露了令人瞩目的消息:公司正在积极开发系列配备定制化传感器的智能机器人
    的头像 发表于 01-14 10:05 871次阅读

    【「具身智能机器人系统」阅读体验】2.具身智能机器人的基础模块

    具身智能机器人的基础模块,这个是本书的第二部分内容,主要分为四部分:机器人计算系统,自主机器人的感知系统,自主机器人的定位系统,自主
    发表于 01-04 19:22

    【「具身智能机器人系统」阅读体验】2.具身智能机器人大模型

    。 多模态融合的创新与突破 机器人控制技术的另一个重要突破在于多模态大模型的应用。相比于仅通过文字进行人机交互的传统方法,现代机器人能够融合视觉、声音、定位等多模态输入信息,为任务执行提供更加全面的感知
    发表于 12-29 23:04

    【「具身智能机器人系统」阅读体验】1.初步理解具身智能

    的各个方面。 第5部分(第14章)通过实际案例的应用研究对本书提到的概念进行总结,作者实际构建具身智能
    发表于 12-28 21:12

    OpenAI探索人形机器人开发

    前解散的内部机器人软件团队。 这系列的举措表明,OpenAI正在加大对机器人技术的投入,并寻求在这领域取得突破。据两名直接了解讨论的人士
    的头像 发表于 12-26 10:27 832次阅读

    Cloudera推出RAG Studio,助力企业快速部署聊天机器人

    企业在利用实时企业数据部署RAG聊天机器人方面迈出了重要步,且整个过程仅需几分钟。 RAG Studio是款无代码解决方案,它极大地简化了非技术用户使用AI应用的难度。通过这平台
    的头像 发表于 12-12 11:06 1026次阅读