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!");

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

    关注

    206

    文章

    27064

    浏览量

    201453
  • 人工智能
    +关注

    关注

    1777

    文章

    43920

    浏览量

    230661
  • VSS
    VSS
    +关注

    关注

    1

    文章

    31

    浏览量

    21331
收藏 人收藏

    评论

    相关推荐

    揭秘聊天机器人的“大脑”-大语言模型

    如果说 AI 正处于改变历史的“iPhone 时刻”,那么聊天机器人就是其首批热门应用之一。
    的头像 发表于 04-17 10:01 346次阅读
    揭秘<b class='flag-5'>聊天机器人</b>的“大脑”-大语言模型

    Perplexity将Yelp数据引入其聊天机器人

    Perplexity首席执行官Aravind Srinivas告诉The Verge,许多人正在使用像常规搜索引擎一样的聊天机器人 —— 直接从源头提供他们想要的东西的信息是有意义的,比如选择餐馆。
    的头像 发表于 03-19 17:36 405次阅读
    Perplexity将Yelp数据引入其<b class='flag-5'>聊天机器人</b>

    谷歌AI聊天机器人改名为Gemini

    谷歌(Google)近日宣布,旗下备受瞩目的AI聊天机器人Bard正式更名为Gemini,并推出了一款功能更加强大的付费版本——Gemini Advanced。这一战略调整旨在与微软、OpenAI等科技巨头在AI聊天机器人市场展
    的头像 发表于 02-18 11:28 534次阅读

    字节跳动推出AI聊天机器人Coze扣子

    近日,字节跳动正式推出了名为“Coze扣子”的AI聊天机器人开发平台。自2月1日起,这一平台已正式上线,为开发者和用户提供了一个全新的交互体验。
    的头像 发表于 02-03 09:31 766次阅读

    虹科分享 | 用RedisLangChain定制AI代理——OpenGPTs

    OpenAI最近推出了OpenAI GPTs——一个构建定制化AI代理的无代码“应用商店”,随后LangChain开发了类似的开源工具OpenGPTs。OpenGPTs是一款低代码的开
    的头像 发表于 01-18 10:39 150次阅读
    虹科分享 | 用<b class='flag-5'>Redis</b>为<b class='flag-5'>LangChain</b>定制AI代理——OpenGPTs

    RedisLangChain定制AI代理——OpenGPTs

    OpenAI最近推出了OpenAIGPTs——一个构建定制化AI代理的无代码“应用商店”,随后LangChain开发了类似的开源工具OpenGPTs。OpenGPTs是一款低代码的开源框架,专用
    的头像 发表于 01-13 08:03 561次阅读
    用<b class='flag-5'>Redis</b>为<b class='flag-5'>LangChain</b>定制AI代理——OpenGPTs

    OpenAI将推出GPT Store,供用户销售及分享基于GPT的聊天机器人

    为方便用户使用,GPTStore将设置搜索栏,以供快速查找相关的聊天机器人。排行榜则会甄选热门的GPT及受欢迎程度高的开发者作品予以展示。
    的头像 发表于 01-05 10:41 211次阅读

    如何用AI聊天机器人写出万字长文

    如何用AI聊天机器人写出万字长文
    的头像 发表于 12-26 16:25 500次阅读

    英伟达计划芯片设计过程中使用聊天机器人

    据英伟达首席科学家Bill Dally介绍,“我们发现许多资深设计师花费了大量的时间来回答初级设计师的问题。利用聊天机器人回答初级设计问题可以为高级设计师节省大量时间。”
    的头像 发表于 10-31 17:16 710次阅读

    全球与中国AI聊天机器人市场:增长趋势、竞争格局与前景展望

    与人类用户进行对话。 它可以使用自然语言处理(NLP)和机器学习(ML)等各种技术和方法来构建聊天机器人有多种类型,包括基于规则的聊天机器人和自学习
    的头像 发表于 08-01 18:07 1104次阅读

    印度Dukaan推出应用生成式AI聊天机器人

          近日印度电子商务初创公司Dukaan宣布采用生成式人工智能(AI)聊天机器人来改善其客服工作。据了解这一举措大大提高了客服效率,并显著降低了成本。 Dukaan公司在应用生成式AI聊天机器人
    的头像 发表于 07-17 10:21 389次阅读

    聊天机器人开源分享

    电子发烧友网站提供《聊天机器人开源分享.zip》资料免费下载
    发表于 06-20 15:07 1次下载
    <b class='flag-5'>聊天机器人</b>开源分享

    医疗保健领域AI聊天机器人时代的用户安全和隐私保护

    使用基于人工智能的聊天机器人的一个重大风险是拟人化,患者错误地将类似人类的品质和情感归因于聊天机器人。由于缺乏真正的人类理解和同理心,这可能会导致不切实际的期望、误解和潜在的有害情况。为了降低这种
    发表于 06-15 09:42 296次阅读

    AI聊天机器人ChatGPT与3DFrame集成以革新虚拟产品演示

    研发INTEGRATEDXR®的Vection Technologies (ASX:VR1, OTC:VCTNY)欣然宣布将OpenAI开发的高级人工智能(AI)聊天机器人ChatGPT与用于沉浸
    的头像 发表于 05-23 05:51 719次阅读

    Snapchat将免费提供其人工智能聊天机器人

    Snap将向Snapchat的7.5亿月用户免费发布其“My AI”聊天机器人,这一举措距离OpenAI驱动的聊天机器人首次向该应用的300多万付费用户开放不到两个月。
    的头像 发表于 05-18 17:37 1762次阅读