2026年7月2日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

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

发布日期:2024-07-19 07:10:07 浏览次数: 3212
随着人工智能技术的快速发展,智能问答系统在房产销售领域的应用越来越广泛。智能房产销售助手能够帮助销售人员更高效地处理客户咨询,提供准确的信息和建议,提升客户满意度。本文将详细介绍基于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_BOTSALES_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 OpenAIEmbeddingsfrom langchain.vectorstores import Chromafrom langchain.chains import RetrievalQAfrom langchain.chat_models import ChatOpenAIfrom langchain.text_splitter import CharacterTextSplitter
# 导入OpenAI库和环境变量管理工具,用于配置API访问import openaiimport osfrom dotenv import load_dotenv, find_dotenvfrom langchain.document_loaders import TextLoader
# 加载环境变量_ = load_dotenv(find_dotenv())# 从环境变量中获取OpenAI的API密钥和基础URLopenai.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_BOTSALES_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应用,推动行业的发展与创新。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅