项目名称:RAG+小模型phi3实现银行客服理财产品年化收益率查询全程实现细节公开
报告日期:2024年8月18日
项目负责人:阿灿
项目概述:
本项目结合检索增强生成模型(RAG, Retrieval-Augmented Generation)与轻量级模型phi3,为银行客服系统带来革命性的变革,显著提升客户在查询理财产品年化收益率时的体验与效率。
1 项目的应用场景
随着金融市场的快速发展和理财产品种类的日益丰富,客户在选择和了解银行理财产品时,对年化收益率等关键信息的查询需求日益增长。传统方式下,客户可能需通过复杂的菜单导航、人工客服咨询或自行阅读冗长的产品说明书来获取这些信息,过程繁琐且效率不高。本项目旨在通过智能化手段,将RAG模型与高效的小模型phi3相结合,为银行客服系统赋能,实现快速、准确、个性化的理财产品年化收益率查询服务。
2 项目亮点
- 智能化查询体验:利用RAG模型的检索与生成能力,系统能够自动从海量理财产品数据库中检索相关信息,并基于用户的具体需求(如风险偏好、投资期限等)生成个性化的查询结果,大大简化了查询流程,提升了用户体验。
- 高效小模型phi3:采用轻量级但高效的phi3模型,在保证准确率的同时,显著降低了计算资源消耗和响应时间,使得系统能够更快速地响应用户请求,尤其适用于高并发场景下的客户服务。
- 精准匹配与推荐:结合用户历史查询记录和偏好分析,系统能够更精准地推荐符合用户需求的理财产品,提高客户满意度和转化率。
- 透明化服务:项目强调全程实现细节的公开,不仅提升了系统的可信度和透明度,也为后续的优化和迭代提供了丰富的数据支持和经验参考。
- 可扩展性与灵活性:RAG+phi3的组合架构具备良好的可扩展性和灵活性,能够轻松适应不同银行的具体需求和业务场景变化,为银行数字化转型提供强有力的技术支撑。
技术方案与实施步骤
- 模型选择
项目采用的技术方案主要围绕检索增强生成RAG(Retrieval-Augmented Generation)模型与轻量级小模型phi3的结合应用:
- phi3小模型的优势
高效性:phi3是微软AI研究院开发的一系列开放式AI模型中的一款,以其小巧高效著称。在同等参数规模下,phi3展现出卓越的性能,能够用较小的体积实现与大型模型相近甚至更优的效果,这大大降低了计算资源消耗和响应时间。
成本效益:相较于大型模型,phi3的部署和推理成本更低,使得银行在享受AI技术带来的便利时,无需承担过高的经济负担。
灵活性:phi3的轻量级特性使其更易于集成到现有的银行客服系统中,同时也便于根据业务需求进行定制和优化。
- 选择理由
适应场景需求:银行客服理财产品年化收益率查询是一个高频次、低延迟的服务场景,phi3的高效性和成本效益使其成为理想的选择。
数据安全与隐私保护:phi3作为开源模型,其代码透明和可定制性有助于银行在部署过程中加强数据安全和隐私保护措施,降低数据泄露风险。
未来可扩展性:随着技术的不断进步和业务需求的变化,phi3的轻量级架构为未来的升级和扩展提供了便利。
- RAG模型的优势分析
- 检索与生成能力的结合
RAG模型通过结合检索和生成两种能力,实现了对海量信息的有效整合和利用。在查询理财产品年化收益率时,RAG模型能够首先根据用户查询意图从数据库中检索相关信息,然后基于这些信息生成准确、个性化的回答。
- 应对复杂查询需求
面对用户多样化的查询需求(如不同风险偏好、投资期限等),RAG模型能够通过检索机制快速定位到相关信息,并通过生成机制将这些信息整合成符合用户需求的回答。
- 提升回答质量
通过引入外部数据源(如银行理财产品数据库)和先进的生成算法,RAG模型能够生成更加准确、全面、专业的回答。这有助于提升银行客服系统的专业性和可信度,增强用户对银行服务的满意度和忠诚度。
- 数据的构建
- 理财产品产品外部数据
为了测试项目,从平安银行网站公开的理财产品中选择了天天成长2号产品介绍,制作成了txt文档作为RAG外部数据源。txt信息不仅包括该理财产品的年化收益率,还包括平安银行公司介绍,产品管理机构,投资方向,交易规则等。
- 向量化处理化方法
项目采用的向量化方法是运用NVIDIA 的嵌入模型ai-embed-qa-4对外部文档进行向量化处理。NVIDIA的嵌入模型通过提供强大的、具有上下文感知的、计算高效的语言表示,显著提升各上下游任务的效果。
实施步骤:
- 环境搭建
- 服务器RHEL9虚拟环境和相关包安装
- 安装anaconda3
- conda create --name ai_endpoint python=3.8
- conda activate ai_endpoint
- pip install langchain-nvidia-ai-endpoints
- pip install jupyterlab
- pip install langchain_core
- pip install langchain
- pip install matplotlib
- pip install numpy
- pip install faiss-cpu==1.7.2
- pip install openai
- 配置 jupyter 密码并允许远程访问:
- 生成配置文件
jupyter lab --generate-config
- 生成密码
打开 ipython,创建一个经过加密的密码:
ipython
In[1]:from jupyter_server.auth importpasswd
## 新版本notebook需要输入 In[1]:from notebook.auth importpasswd
In[2]:passwd()
Enter password:
Verify password:
Out[2]:'argon2:...'
In[3]: exit
复制生成的密文:'argon2:...'
- 修改默认配置文件
vim ~/.jupyter/jupyter_lab_config.py
修改如下内容:
c.ServerApp.allow_remote_access =True
c.ServerApp.ip ='*'
c.ServerApp.open_browser =False
c.Server.password =u'argon2:...刚才复制的密文'
c.Server.port =8886# 指定一个访问端口
- 用如下命令重新启动并指定一个端口
jupyter lab --no-browser --port=8886
控制台输出的token要复制出来
- 远程访问的地址是:address_of_remote:8886/lab
页面中的token要从控制台复制粘贴
- 代码实现
整个代码实现部分可以借助经典的RAG图来说明。分两个大的过程,第一大过程是文档即外部数据的向量化,第二大过程是用户查询和生成结果。第一大过程又可分为3个小过程。
- 文档向量化
- 文档预处理
# 读取外部txt数据,这里是理财产品的txt文档
ps = os.listdir("./zh_data/")
data = []
sources = []
for p in ps:
if p.endswith('.txt'):
path2file="./zh_data/"+p
with open(path2file,encoding="utf-8") as f:
lines=f.readlines()
for line in lines:
if len(line)>=1:
data.append(line)
sources.append(path2file)
#进行一些基本的清理并删除空行
documents=[d for d in data if d != '\n']
len(data), len(documents), data[0]
- 文档向量化
#文本分割
text_splitter = CharacterTextSplitter(chunk_size=400, separator=" ")
docs = []
metadatas = []
for i, d in enumerate(documents):
splits = text_splitter.split_text(d)
#print(len(splits))
docs.extend(splits)
metadatas.extend([{"source": sources[i]}] * len(splits))
# 设定嵌入模型
embedder = NVIDIAEmbeddings(model="ai-embed-qa-4")
# 运用嵌入模型将文档向量化
store = FAISS.from_texts(docs, embedder , metadatas=metadatas)
- 保存到向量数据库
store.save_local('./zh_data/nv_embedding')
- 用户查询和生产
# 加载向量
store = FAISS.load_local("./zh_data/nv_embedding", embedder, allow_dangerous_deserialization=True )
# 创建检索器
retriever = store.as_retriever()
# 定义提示模板
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"Answer solely based on the following context:\n<Documents>\n{context}\n</Documents>",
),
("user", "{question}"),
]
)
# 构建处理链
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
#调用处理链
chain.invoke("平安银行天天成长2号理财产品的年化收益率为多少?")
项目成果与展示:
- 应用场景展示
在当今数字化金融时代,银行客户对于理财产品的需求日益增长,而快速、准确地获取理财产品的年化收益率信息成为提升客户体验的关键。本项目通过结合检索增强生成模型(RAG, Retrieval-Augmented Generation)与高效小模型phi3,构建了一个智能化的银行客服理财产品年化收益率查询系统。以下是该系统在实际应用中的几个典型场景展示:
场景一:客户自助查询
背景:张先生是某银行的长期客户,他计划将一部分资金投入到理财产品中,但对当前可选择的理财产品年化收益率不太了解。张先生通过银行APP或官方网站进入“理财产品查询”页面,输入关键词“年化收益率查询”并选择“自助查询”。
场景二:客服辅助查询
背景:李女士致电银行客服热线,希望了解近期推出的几款高收益理财产品的具体年化收益率。语音识别:银行客服系统首先通过语音识别技术将李女士的语音请求转换为文本。
- 功能演示
使用RAG技术前后对比,没有使用RAG技术时,输出如下:
使用RAG技术后,输出如下:
项目总结与展望:
- 项目评估和未来方向: 目前使用的模型部署在NVIDIA NIM平台,对于部分银行用户来说是不可接受的,因此后面还需把模型部署到用户端。
附件与参考资料
[1] 基于Conda 安装配置 Jupyter,Mac远程连接 - 简书
[2] 2024 NVIDIA开发者社区夏令营环境配置指南(Win & Mac)_csdn 2024nvidia开发者-CSDN博客