本文介绍如何基于Lindorm全文、向量融合检索等多模能力,快速搭建智能搜索服务。
方案概述
智能搜索是一种基于AI大模型的新型检索方式,它通过深入理解用户意图,提供精准、高效的问答式服务。
本方案帮助您快速构建智能搜索能力,解决以下核心问题:
高效搭建与迭代:无需从零开始,提供开箱即用的基础设施,降低技术门槛,节省开发和运维成本。
应对数据规模增长:支持大规模数据处理,优化检索性能,减少硬件投入和运维压力。
提升检索精准性与灵活性:支持自定义模型部署和调优,满足业务个性化需求,确保搜索结果更贴合实际场景。
通过本方案,您能够专注于核心业务创新,同时获得更智能、更高效的搜索体验。
方案架构
本文将通过Python代码演示如何基于Lindorm全文、向量融合检索能力,帮您快速构建智能搜索业务,本架构仅体现部署和应用中Lindorm产品内容。
步骤一:开通Lindorm多模能力
登录Lindorm管理控制台。
单击页面左上角的创建。
在Lindorm售卖页面,设置以下配置项:
配置项
说明
商品类型
选择Lindorm新版售卖。
形态选择
选择生产型。
实例配置
勾选宽表引擎、LTS、搜索引擎、向量引擎和AI引擎。
单击立即购买,并根据售卖页的指引,完成支付。
步骤二:配置白名单
将客户端IP添加至Lindorm白名单。如何添加,请参见设置白名单。
步骤三:下载代码
请下载代码示例lindorm_smart_search,用于后续配置和构建智能搜索业务。
步骤四:环境配置
运行环境
已安装Python环境,要求安装Python 3.10及以上版本。
安装依赖
pip3 install -r requirements.txt
配置Lindorm连接地址
在已下载代码中的env脚本里配置Lindorm各引擎的连接地址。连接地址获取方法请参见查看连接地址。
大模型推理依赖百炼,需要配置百炼的API Key。API Key获取方法请参见获取API Key。
# AI host(配置AI引擎连接地址)
AI_HOST="ld-bp17j28j2y7pm****-proxy-ai-pub.lindorm.aliyuncs.com"
AI_PORT="9002"
# Row host(配置宽表引擎Mysql兼容地址)
ROW_HOST="ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.aliyuncs.com"
ROW_PORT="33060"
# Search host(配置搜索引擎连接地址)
SEARCH_HOST="ld-bp17j28j2y7pm****-proxy-search-pub.lindorm.aliyuncs.com"
SEARCH_PORT="30070"
# Lindorm user password(配置Lindorm用户密码)
LD_USER="root"
LD_PASSWORD="test****"
# 训练数据集的位置
LOAD_FILE_PATH="data/cmrc2018_train.json"
# 返回结果的最大数量
SEARCH_TOP_K="5"
# 配置百炼的API Key
DASHSCOPE_API_KEY="sk-****"
安装Jupyter Notebook
安装Jupyter。
pip3 install jupyter
生成配置文件
~/.jupyter/jupyter_notebook_config.py
。jupyter notebook --generate-config
获取要设置访问Jupyter的密码 。
from passlib.hash import argon2 print(argon2.hash('Vector123'))
输出密码哈希值,用于Jupyter Notebook的密码配置。输出示例如下:
$argon2id$v=19$m=65536,t=3,p=4$4TyndM75H8N4b+291xqjdA$n0QSxlv/uCLjGR0TX/jbD/XFlEu9BzQGI1b2Mcu6gxg
使用
vim ~/.jupyter/jupyter_notebook_config.py
命令打开并编辑配置文件。#文件最后几行加上如下配置 c.NotebookApp.ip = '*' # 笔记本的默认打开目录, 自行设置 # 笔记本启动后是否打开浏览器, 设为 False即可 c.NotebookApp.open_browser = False # 默认访问端口, 可自行修改 c.NotebookApp.port = 9000 # 下方代码中argon2后面的内容替换成上一步骤已获取到的Jupyter的密码 c.NotebookApp.password = 'argon2:$argon2id$v=19$m=65536,t=3,p=4$4TyndM75H8N4b+291xqjdA$n0QSxlv/uCLjGR0TX/jbD/XFlEu9BzQGI1b2Mcu6gxg' # 这个主目录非常重要,后续您的访问文件需要放在该目录 c.NotebookApp.notebook_dir = u'/data/lindorm/LindormDemo' #设置你打开jupyter notebook的时候想显示的位置,可以设置成经常使用的路径
启动Jupyter服务。前端启动,可以查看是否有启动错误。若需停止服务,可使用
Ctrl+C
来终止进程。jupyter notebook
说明实际业务使用过程中建议使用后端启动Jupyter服务,可以避免因终端关闭导致的服务中断,同时便于后台管理。后端启动请执行:
nohup jupyter notebook --allow-root >/tmp/jupyter.log 2>&1 &
。
步骤五:运行ipynb脚本
在Jupyter中按照lindorm_demo.ipynb
的说明,依次执行代码。
接下来将详细介绍主要的部署环节。
部署流程图
部署环节说明
本文档中模型部署和调用依赖于Hugging Face平台,可能需要特定的网络条件才能正常使用。
环节 | 说明 | 涉及引擎 |
创建父表(知识库) | 创建一个父表,用于存储知识库的原始文本。
| 宽表引擎 |
创建子表(切分知识库) | 创建一个子表,用于存储原文本切分后的段落,这些段落可以根据长度或者结合长度与标点符号来切分。
| 宽表引擎 |
部署及调用模型 | 部署Embedding模型: 部署自带开源BGE-M3模型(内置模型,无需单独下载),用于后续的文本向量化处理,将文本向量化后,可以通过语义实现近似检索。
| AI引擎 |
部署ReRank模型: 部署自带开源BGE ReRank模型(内置模型,无需单独下载),用于对RAG检索结果重排。
| AI引擎 | |
调用问答模型: 通过API Key的方式访问大模型,将提示词(Prompt)提交给大模型。API Key可通过百炼平台申请,详情请参见获取API Key。
| - | |
创建搜索Pipeline | 对子表创建搜索Pipeline,子表内容自动同步到搜索引擎,在搜索引擎内完成Embedding后,将结果写入向量引擎。
| 宽表引擎 搜索引擎 向量引擎 |
创建搜索索引和向量索引 | 创建搜索索引和向量索引,提高检索效率。 示例中使用HNSW,如果数据量大,推荐使用IVF_PQ。小数据集则可以使用FLAT。
| 宽表引擎 搜索引擎 向量引擎 |
检索方式说明
检索选项:全文检索/向量检索/全文与向量混合检索。
检索重排:使用重排/不使用重排。
Prompt:使用父文档/不使用父文档(将Context加入到提示词中)。
检索方式 | 具体描述 | 流程图 |
全文与向量混合检索 | 全文与向量混合检索。
| |
全文与向量混合检索+使用检索重排 | 先进行全文与向量混合检索,然后对混合检索的结果重排序。
| |
全文与向量混合检索+使用检索重排+Prompt |
| |
全文与向量混合检索+使用检索重排+Context Prompt |
|