基于RAG架构的智能房产助手:从架构到手撸代码

随着人工智能技术的快速发展,智能问答系统在房产销售领域的应用越来越广泛。智能房产销售助手能够帮助销售人员更高效地处理客户咨询,提供准确的信息和建议,提升客户满意度。本文将详细介绍基于RAG(Retrieval-Augmented Generation)架构的智能房产销售助手的构建过程,包括数据准备阶段、数据使用阶段以及手撸代码的具体实现。

一、数据准备阶段

数据准备阶段是构建智能房产销售助手的第一步。这个阶段的核心任务是将原始房产相关数据转化为可供智能系统使用的知识库。

1、文档收集与处理

首先,我们需要收集大量的房产相关文档,包括楼盘介绍、购房指南、市场分析报告、政策法规等。这些文档为智能系统提供了丰富的知识来源。文档的收集可以通过互联网搜索、与开发商合作获取资料等方式进行。

也可以通过ChatGPT来生成数据,生成后放txt里面

你是中国顶级的房地产销售,现在培训职场新人,请给出100条实用的销售话术。``每条销售话术以如下格式输出:``[客户问题]``[销售回答]

2、数据向量化

收集到的文档需要经过向量化处理,这一步是通过嵌入模型(Embedding Model)实现的。嵌入模型将文本数据转化为向量表示,使得文本数据能够被计算机处理和理解。向量化处理后的数据被存储在向量数据库中。例如,一个楼盘的介绍文档将被转化为一个高维向量,这个向量能够代表该楼盘的各种信息。

3、知识库构建

向量化的数据存储在向量数据库中,形成系统的知识库。知识库中的每个知识点都有其相关性评分,这些评分反映了知识点在整个知识库中的重要性和相关程度。例如,一个热门楼盘的介绍可能会有较高的相关性评分。知识库的构建需要不断地更新和维护,以保证数据的时效性和准确性。

二、数据使用阶段

数据使用阶段是智能房产销售助手实际运行的阶段。在这个阶段,系统根据用户提出的问题,从知识库中提取相关信息,并生成回答。

1、用户问题向量化

当用户提出问题时,系统首先通过嵌入模型将用户的问题进行向量化处理。例如,用户可能会问:“这个区域有哪些新楼盘?”系统将这个问题转化为一个向量,便于后续的处理和检索。

2、预处理

向量化处理后,系统对用户的问题进行预处理,包括关键词提取、句子分割等步骤。这些预处理步骤有助于提高系统对问题的理解和解析能力。例如,在“这个区域有哪些新楼盘?”这个问题中,系统会提取出“新楼盘”和“区域”等关键词。

3、知识检索与匹配

系统根据预处理后的用户问题,从知识库中检索相关的知识点。检索过程是通过计算用户问题向量与知识库中各知识点向量的相似度实现的。相似度越高,表示该知识点与用户问题的相关性越强。例如,系统可能会找到相关的楼盘介绍和市场分析。

4、排序与选择

系统根据相似度对检索到的知识点进行排序,选择相关性最高的知识点进行进一步处理。这个步骤保证了系统能够优先使用最相关的信息来生成回答。例如,选择最热门的楼盘信息进行回答。

5、Prompt模块生成

在Prompt模块中,系统将选择的知识点与用户问题进行组合,生成一个完整的Prompt。这一步的目的是为大语言模型(LLM)提供一个高质量的输入,确保生成的回答准确且有针对性。例如,将楼盘信息和用户问题组合成完整的对话:“在这个区域有哪些推荐的新楼盘?”

6、大语言模型生成回答

最终,系统将生成的Prompt输入到大语言模型中,由大语言模型生成最终的回答。大语言模型基于其强大的自然语言处理能力,能够生成流畅、连贯且有针对性的回答。例如,生成详细的楼盘介绍和购房建议:“在这个区域,目前有三个新楼盘推荐:A楼盘、B楼盘和C楼盘。A楼盘位于市中心,交通便利,价格适中;B楼盘靠近地铁站,配套设施齐全;C楼盘有较大的优惠政策。”

三、手撸代码实现

在这一部分,我们将提供一个基于RAG架构的智能房产助手的具体实现步骤,包括代码示例和详细说明。

1、初始化数据库,加载并嵌入文本数据

  • 实例化文本加载器,用于从指定文件加载文本数据

  • 加载文本数据

  • 实例化字符级文本分割器,用于将文本分割为更小的片段

  • 分割文档并准备向量存储

def init_db():`    `"""`    `初始化数据库,加载并嵌入文本数据。`    `"""`    `# 实例化文本加载器,用于从指定文件加载文本数据`    `loader = TextLoader("langchain/sales_chatbot/jp_source/real_estate_sales_data.txt", encoding="utf-8")`    `# 加载文本数据`    `documents = loader.load()``   `    `# 实例化字符级文本分割器,用于将文本分割为更小的片段`    `text_splitter = CharacterTextSplitter(`        `separator=r'\d+\.',`        `chunk_size=100,`        `chunk_overlap=0,`        `length_function=len,`        `is_separator_regex=True,`    `)`    `# 分割文档并准备向量存储`    `docs = text_splitter.split_documents(documents)`    `vectordb = Chroma.from_documents(`        `documents=docs,`        `collection_name="real_estates_sale",`        `embedding=embedding,`        `persist_directory=persist_directory`    `)`    `# 持久化向量数据库`    `vectordb.persist()

2、初始化房产销售聊天机器人

  • 创建向量数据库实例

  • 实例化基于OpenAI GPT模型的聊天模型

  • 初始化检索式问答机器人

  • 启用返回源文档的功能

def initialize_sales_bot():`    `"""`    `初始化房产销售聊天机器人。`    `"""`    `# 创建向量数据库实例`    `db = Chroma(persist_directory=persist_directory, embedding_function=embedding, collection_name="real_estates_sale")`    `# 实例化基于OpenAI GPT模型的聊天模型`    `llm = ChatOpenAI(model_name=model, temperature=0, verbose=True)`    `# 初始化检索式问答机器人`    `global SALES_BOT`    `SALES_BOT = RetrievalQA.from_chain_type(llm,`                                           `retriever=db.as_retriever(search_type="similarity_score_threshold",`                                                                     `search_kwargs={"score_threshold": 0.8}))`    `# 启用返回源文档的功能`    `SALES_BOT.return_source_documents = True``   `    `return SALES_BOT``   

3、启动Gradio界面,提供与房产销售聊天机器人的交互界面

  • 启动交互式界面
def sales_chat(message, history):`    `"""`    `房产销售聊天接口函数。`    `根据输入的消息和历史记录与房产销售聊天机器人进行对话。`    `"""`    `print(f"[message]{message}")`    `print(f"[history]{history}")`    `# TODO: 从命令行参数中获取`    `enable_chat = True``   `    `ans = SALES_BOT({"query": message})`    `# 如果有相关文档或聊天模型启用,返回回答`    `if ans["source_documents"] or enable_chat:`        `print(f"[result]{ans['result']}")`        `print(f"[source_documents]{ans['source_documents']}")`        `return ans["result"]`    `else:`        `# 否则,返回标准回答`        `return "这个问题我要问问领导"``   ``def launch_gradio():`    `"""`    `启动Gradio界面,提供与房产销售聊天机器人的交互界面。`    `"""`    `demo = gr.ChatInterface(`        `fn=sales_chat,`        `title="房产销售",`        `chatbot=gr.Chatbot(height=600),`    `)`    `# 启动交互式界面`    `demo.launch(share=True, server_name="0.0.0.0")

4、完整可运行代码

# 导入Gradio库,用于构建交互式界面``import gradio as gr``   ``# 导入Langchain库的相关模块,用于文本嵌入、向量存储和链式处理``from langchain.embeddings.openai import OpenAIEmbeddings``from langchain.vectorstores import Chroma``from langchain.chains import RetrievalQA``from langchain.chat_models import ChatOpenAI``from langchain.text_splitter import CharacterTextSplitter``   ``# 导入OpenAI库和环境变量管理工具,用于配置API访问``import openai``import os``from dotenv import load_dotenv, find_dotenv``from langchain.document_loaders import TextLoader``   ``# 加载环境变量``_ = load_dotenv(find_dotenv())``# 从环境变量中获取OpenAI的API密钥和基础URL``openai.api_key = os.getenv('OPENAI_API_KEY')``openai.api_base = os.getenv('OPENAI_API_URL')``model = os.getenv('OPENAI_API_MODEL')``persist_directory = 'data/'``   ``# 初始化OpenAI嵌入模型``embedding = OpenAIEmbeddings(model="text-embedding-ada-002", base_url=os.getenv('OPENAI_API_URL'), api_key=os.getenv('OPENAI_API_KEY'))``   ``def init_db():`    `"""`    `初始化数据库,加载并嵌入文本数据。`    `"""`    `# 实例化文本加载器,用于从指定文件加载文本数据`    `loader = TextLoader("langchain/sales_chatbot/jp_source/real_estate_sales_data.txt", encoding="utf-8")`    `# 加载文本数据`    `documents = loader.load()``   `    `# 实例化字符级文本分割器,用于将文本分割为更小的片段`    `text_splitter = CharacterTextSplitter(`        `separator=r'\d+\.',`        `chunk_size=100,`        `chunk_overlap=0,`        `length_function=len,`        `is_separator_regex=True,`    `)`    `# 分割文档并准备向量存储`    `docs = text_splitter.split_documents(documents)`    `vectordb = Chroma.from_documents(`        `documents=docs,`        `collection_name="real_estates_sale",`        `embedding=embedding,`        `persist_directory=persist_directory`    `)`    `# 持久化向量数据库`    `vectordb.persist()``   ``def initialize_sales_bot():`    `"""`    `初始化房产销售聊天机器人。`    `"""`    `# 创建向量数据库实例`    `db = Chroma(persist_directory=persist_directory, embedding_function=embedding, collection_name="real_estates_sale")`    `# 实例化基于OpenAI GPT模型的聊天模型`    `llm = ChatOpenAI(model_name=model, temperature=0, verbose=True)`    `# 初始化检索式问答机器人`    `global SALES_BOT`    `SALES_BOT = RetrievalQA.from_chain_type(llm,`                                           `retriever=db.as_retriever(search_type="similarity_score_threshold",`                                                                     `search_kwargs={"score_threshold": 0.8}))`    `# 启用返回源文档的功能`    `SALES_BOT.return_source_documents = True``   `    `return SALES_BOT``   ``def sales_chat(message, history):`    `"""`    `房产销售聊天接口函数。`    `根据输入的消息和历史记录与房产销售聊天机器人进行对话。`    `"""`    `print(f"[message]{message}")`    `print(f"[history]{history}")`    `# TODO: 从命令行参数中获取`    `enable_chat = True``   `    `ans = SALES_BOT({"query": message})`    `# 如果有相关文档或聊天模型启用,返回回答`    `if ans["source_documents"] or enable_chat:`        `print(f"[result]{ans['result']}")`        `print(f"[source_documents]{ans['source_documents']}")`        `return ans["result"]`    `else:`        `# 否则,返回标准回答`        `return "这个问题我要问问领导"``   ``def launch_gradio():`    `"""`    `启动Gradio界面,提供与房产销售聊天机器人的交互界面。`    `"""`    `demo = gr.ChatInterface(`        `fn=sales_chat,`        `title="房产销售",`        `chatbot=gr.Chatbot(height=600),`    `)`    `# 启动交互式界面`    `demo.launch(share=True, server_name="0.0.0.0")``   ``def query():`    `"""`    `直接通过代码查询向量数据库中与给定查询相关的内容。`    `"""`    `db = Chroma(persist_directory=persist_directory, embedding_function=embedding, collection_name="real_estates_sale")`    `query = "有优惠吗"`    `retriever = db.as_retriever(`        `search_type="similarity_score_threshold",`        `search_kwargs={"score_threshold": 0.8})`    `# 获取与查询相关的文档`    `docs = retriever.get_relevant_documents(query)`    `# 打印相关文档的内容`    `for doc in docs:`        `print("=====================")`        `print(doc.page_content + "\n")``   ``if __name__ == "__main__":`    `# 初始化数据库`    `# init_db()`    `# 初始化房产销售聊天机器人`    `initialize_sales_bot()`    `# 启动Gradio界面`    `# launch_gradio()`    `# 直接执行查询`    `query()

四、总结

构建基于RAG架构的智能房产销售助手是一个复杂而系统化的过程,从数据准备到手撸代码,每一个环节都至关重要。通过本文的介绍,希望大家能够基于对智能房产销售助手的构建过程有一个全面的了解,可以泛化到其他AI应用上面,并能够在实际应用中有所借鉴。随着技术的不断进步,类似智能房产销售助手将会在房产销售领域发挥其重要作用,大家也可以根据这个方法研发更多的AI应用,推动行业的发展与创新。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值