本文介绍如何基于Lindorm全文、向量融合检索以及在线推理等多模能力,快速搭建智能搜索服务。
背景介绍
近两年,AI大模型的迅速崛起为搜索产品注入了新的活力。这一发展不仅改变了用户获取信息的方式,也为企业和开发者带来了全新的机遇。如今,检索的形式已不再局限于关键词匹配,而是朝向更高效、更智能的对话式问答方向发展。过去,用户检索一个专业问题通常需要从多个平台搜集资料,并花大量时间对这些资料进行整合才能解决问题。而现在,智能检索则可以深入理解用户的搜索意图,快速整合提炼信息,显著提高了信息获取效率。
随着用户信息消费习惯的变化,搜索产品的智能化已成为提升用户体验、增加用户粘性的关键因素。微软率先在Bing中整合GPT模型,以提供更符合用户需求的回答;Google也推出了Gemini,直接针对用户提问来生成答复。
越来越多企业希望将传统搜索服务升级成智能搜索,但在构建智能搜索的过程中面临着以下三大挑战:
快速搭建和迭代的需求:当前AI行业还处于快速发展阶段,企业需要将主要精力集中在核心业务创新上。从零开始搭建基础设施不仅效率低下,而且涉及多种架构各异的组件,运维方式和技术栈差异大,导致学习成本高,同时部署或更新模型也需要大量的时间和技术投入。
数据规模膨胀和成本增加:随着数据规模的不断增长,内存成本和计算资源的需求也会显著增加。传统的检索方案可能无法有效处理大规模数据,导致检索速度下降,并且增加了硬件投入和运维成本。
检索的准确性和灵活性:通用搜索引擎方案的检索对业务全程黑盒,使得业务难以根据实际效果对架构进行调整。因此,企业需要一种更加灵活的智能搜索解决方案,例如支持自定义部署微调后的嵌入(Embedding)和重排序(Rerank)模型等。
本文将通过Python代码演示如何基于Lindorm全文、向量融合检索以及在线推理能力,帮您快速构建智能搜索业务。
步骤一:开通Lindorm多模能力
登录Lindorm管理控制台。
单击页面左上角的创建。
在Lindorm售卖页面,设置以下配置项:
配置项
说明
商品类型
选择Lindorm新版售卖。
形态选择
选择生产型。
实例配置
勾选宽表引擎、LTS、搜索引擎、向量引擎和AI引擎。
单击立即购买,并根据售卖页的指引,完成支付。
步骤二:配置白名单
将客户端IP添加至Lindorm白名单。如何添加,请参见设置白名单。
步骤三:下载代码
请下载lindorm_smart_search代码,以便在后续步骤中构建智能搜索业务。
步骤四:环境配置
运行环境
已安装Python环境,要求安装Python 3.10及以上版本。
安装依赖
下载依赖requirements.txt。
安装依赖。
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(配置向量引擎连接地址)
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'))
输出示例如下:
$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中运行已下载的ipynb脚本。
部署流程图
部署环节说明
环节 | 说明 | 涉及引擎 |
创建父表(知识库) | 创建一个父表,用于存储知识库的原始文本。
| 宽表引擎 |
创建子表(切分知识库) | 创建一个子表,用于存储原文本切分后的段落,这些段落可以根据长度或者结合长度与标点符号进行切分。
| 宽表引擎 |
模型部署 | 部署Embedding模型: 部署自带开源BGE-M3模型,用于后续的文本向量化处理,将文本向量化后,可以通过语义进行近似检索。
| AI引擎 |
部署Rerank模型: 部署自带开源BGE Rerank模型,用于对RAG检索结果重排。
| AI引擎 | |
部署问答模型: 通过API Key的方式访问大模型,将提示词(Prompt)提交给大模型。
| - | |
创建搜索Pipeline | 对子表创建搜索Pipeline,子表内容自动同步到搜索引擎,并在搜索引擎内完成Embedding。
| 宽表引擎 搜索引擎 向量引擎 |
创建搜索索引和向量索引 | 创建搜索索引,提高检索效率。 示例中使用HNSW,如果数据量大,推荐使用IVF_PQ。小数据集则可以使用FLAT。
| 宽表引擎 搜索引擎 向量引擎 |
检索方式说明
检索选项:全文检索/向量检索/全文和向量混合检索。
检索重排:使用重排/不使用重排。
Prompt:使用父文档/不使用父文档(使用Context进行Prompt)。
检索方式 | 具体描述 | 流程图 |
全文和向量混合检索 | 全文和向量混合检索
| |
获取原始语料 +使用检索重排 | 先获取原始语料,再检索重排。
| |
全文和向量混合检索 +使用检索重排 +Prompt |
| |
全文和向量混合检索 +使用检索重排 +Context Prompt |
|