背景
随着生成式AI技术“火爆出圈”,预示着人工智能未来发展趋势的同时,也为我国人工智能市场注入源源不断的活力,更多企业关注如何将“超级工具”应用到实际业务中去,生成式人工智能技术在通用任务上表现优秀,但面对垂直业务领域,还无法给出精确的回答。如何在垂直领域针对特定知识构建企业专属问答并且确保生成的内容可控,是垂直领域服务的关键。
阿里云智能开放搜索OpenSearch一站式智能搜索业务开发平台,具备高性能向量检索能力,通过向量检索+大模型可以构建可靠的垂直领域的智能问答方案,同时快速在业务场景中进行实践及应用。
本文将详细介绍如何通过“OpenSearch向量检索版+大模型”的实践方案,帮助企业快速搭建智能问答系统。
企业专属模型方案
1. 方案介绍
OpenSearch+大模型方案整体分为2个部分,首先将业务数据进行向量化预处理,其次在线搜索服务进行检索及内容生成。
1.1. 业务数据预处理
首先需要对业务数据进行向量化处理,然后构建向量索引。
步骤1:将文本形式的业务数据导入文本向量化模型中,得到向量形式的业务数据
步骤2:将向量形式的业务数据导入到OpenSearch向量检索版中,构建向量索引
1.2. 搜索问答在线服务
实现搜索功能后,结合Top N搜索结果,基于LLM问答模型返回搜索问答结果
步骤1:将终端用户输入的query输入文本向量化模型,得到向量形式的用户query
步骤2:将向量形式的用户query输入OpenSearch向量检索版
步骤3:使用OpenSearch向量检索版内置的向量检索引擎得到业务数据中的Top N搜索结果
步骤4:将Top N搜索结果整合作为prompt,输入LLM问答模型
步骤5:将问答模型生成的问答结果和向量检索得到的搜索结果返回给终端用户
2. 方案优势
优势一:高性能:自研的高性能向量检索引擎
OpenSearch向量检索版支持千亿数据毫秒级响应,实时数据更新秒级可见
OpenSearch向量检索版的检索性能优于开源向量搜索引擎数倍,在高QPS场景下召回率明显优于开源向量搜索引擎
OpenSearch向量检索版VS开源引擎性能:中数据场景
数据来源阿里巴巴智能引擎事业部团队,2022年11月
OpenSearch向量检索版VS开源引擎性能:大数据场景
数据来源阿里巴巴智能引擎事业部团队,2022年11月
优势二:低成本:采用多种方式优化存储成本、减少资源消耗
数据压缩:可将原始数据转化为float形式存储,并再采用zstd等高效算法进行数据压缩,实现存储成本优化
精细索引结构设计:针对不同类型索引,可采用不同优化策略,降低索引大小
非全内存加载:可以使用mmap非lock的形式加载索引,有效降低内存开销
引擎优势:OpenSearch向量检索版引擎本身具备构建索引大小、GPU资源耗用的优势,同等数据条件下,OpenSearch向量检索版内存占用仅为开源向量检索引擎的50%左右
优势三:可灵活、快速搭建企业专属智能问答方案
稳定可靠:使用客户业务数据而非公开数据进行内容生成,输出结果更加稳定、可靠。
交互升级:可同时满足用户搜索、问答需求,可使用问答式搜索交互形态取代常规搜索形式。
方案实践
1. 购买OpenSearch向量检索版实例
购买实例可参考购买OpenSearch向量检索版实例。
2. 配置OpenSearch向量检索版实例
新购买的实例,其状态为“待配置”,之后需要为该实例配置一张表,之后才可正常搜索。
填写表基础信息,点击下一步:
配置说明:
表名称:可自定义
数据分片数:分片数设置时,请填写不超过256的正整数, 用于提升全量构建速度、单次查询性能。(部分存量实例,仍需各索引表分片数保持一致;或至少一个索引表分片数为1,其余索引表分片数一致)
数据更新资源数:数据更新所用资源数,每个索引默认免费提供2个4核8G的更新资源,超出免费额度的资源将产生费用,详情可参考向量检索版计费概述
场景模板:选择“通用模板”
数据同步,配置数据源,点击下一步:
配置参数说明:
数据源类型:选择API推送数据源,表示用户的数据通过API的方式推送至实例中
字段配置,至少需要定义2个字段主键字段和向量字段(向量字段需要设置为多值float类型):
注:
向量字段名称必须为
embedding_index
需要按照图中字段名称、类型等来设置,否则数据无法自动推送。
向量索引配置:
为向量添加包含字段:
向量索引高级配置。可以参考如下配置向量索引参数,详情可参考向量索引通用配置:
注:向量维度需要是1536维
表配置完成后,点击确认创建:
可在变更历史中查看表创建进度,手动触发全量完成后即可进行查询测试:
3.向量检索版+大模型系统构建
3.1 下载大模型工具OpenSearch-LLM,并解压到llm目录
3.2 在llm目录中的.env文件中配置Chat相关信息,用户需自行购买Chat相关服务。
使用Chat
LLM_NAME=OpenAI
OPENAI_API_KEY=***
OPENAI_API_BASE=***
OPENAI_EMBEDDING_ENGINE=text-embedding-ada-002
OPENAI_CHAT_ENGINE=gpt-35-turbo
VECTOR_STORE=OpenSearch
# OpenSearch信息
OPENSEARCH_ENDPOINT=ha-cn-wwo38nf8q01.ha.aliyuncs.com
OPENSEARCH_INSTANCE_ID=ha-cn-wwo38nf8q01
OPENSEARCH_TABLE_NAME=llm
OPENSEARCH_DATA_SOURCE=ha-cn-wwo38nf8q01_llm
OPENSEARCH_USER_NAME=opensearch #用户名是购买向量检索版时设置的用户名
OPENSEARCH_PASSWORD=chat001 #密码是购买向量检索版时设置的密码
使用微软Azure OpenAI
LLM_NAME=OpenAI
OPENAI_API_KEY=***
OPENAI_API_BASE=***
OPENAI_API_VERSION=2023-03-15-preview
OPENAI_API_TYPE=azure
# 填写azure中OpenAI模型的deployment
OPENAI_EMBEDDING_ENGINE=embedding_deployment_id
OPENAI_CHAT_ENGINE=chat_deployment_id
VECTOR_STORE=OpenSearch
# opensearch信息
OPENSEARCH_ENDPOINT=ha-cn-wwo38nf8q01.ha.aliyuncs.com
OPENSEARCH_INSTANCE_ID=ha-cn-wwo38nf8q01
OPENSEARCH_TABLE_NAME=llm
OPENSEARCH_DATA_SOURCE=ha-cn-wwo38nf8q01_llm
OPENSEARCH_USER_NAME=opensearch #用户名是购买向量检索版时设置的用户名
OPENSEARCH_PASSWORD=chat001 #密码是购买向量检索版时设置的密码
注:
配置中的opensearch信息要和前面购买的向量检索版实例对应
公网访问OPENSEARCH_ENDPOINT 需要使用公网域名(公网域名需要给访问服务的机器加IP白名单),同时去掉
http://
OPENSEARCH_TABLE_NAME表示表的名称:
OPENSEARCH_DATA_SOURCE 是实例名_表名的拼接,也就是
OPENSEARCH_INSTANCE_ID + "_" +OPENSEARCH_TABLE_NAME
, 比如OPENSEARCH_INSTANCE_ID=ha-cn-wwo38nf8q01,OPENSEARCH_TABLE_NAME=llm,那么OPENSEARCH_DATA_SOURCE=ha-cn-wwo38nf8q01_data
3.3 数据处理和推送
使用llm目录中的script/embed_files.py脚本对用户数据文件进行处理,目前支持Markdown和PDF格式的文件。处理完成后会自动推送到前文配置好的向量检索实例中。 下面是一个例子,将用户目录${doc_dir}下的文档推送到购买的实例,并自动构建索引。
python -m script.embed_files -f ${doc_dir}
使用-f选项指定需要处理的文档所在目录
3.4 启动问答服务
cd ~/llm
python api_demo.py
3.5 使用curl命令测试
测试请求:
curl -H "Content-Type: application/json" http://127.0.0.1:8000/chat -d '{"query": "介绍一下opensearch"}'
输出:
{
"success": true,
"result": "OpenSearch是一个分布式搜索引擎,由阿里巴巴开发。可以用于存储、处理和分析大规模数据,具有高可用性、可扩展性和高性能的特点。",
"prompt": "Human: 根据搜索结果回答问题。 Search Results: OpenSearch是一个分布式搜索引擎,由阿里巴巴开发。它支持 SQL 查询语句,并提供了内置的 UDF(User Defined Function)功能,允许客户以插件形式开发自己的 UDF。OpenSearch可以用于存储、处理和分析大规模数据,具有高可用性、可扩展性和高性能的特点。可以通过分布式运维工具进行部署,支持在物理机上拉起分布式集群,也可以在云平台上使用云原生架构进行部署。\n\n 根据上述已知信息,简洁和专业的来回答用户的问题。如果无法从中得到答案,请说不知道,不允许在答案中添加编造成分,答案请使用中文。\n Query:介绍一下OpenSearch Assistant: "
}
4.参考prompt
{
"prompt": "Human: 根据搜索结果回答问题。 Search Results: OpenSearch规格类型对比: 1.行业算法版与高性能检索版的区别:产品概述:OpenSearch简介 OpenSearch是基于阿里巴巴自主研发的大规模分布式搜索引擎搭建的一站式智能搜索业务开发平台,在大数据场景下实现千亿数据毫秒级响应,提供订单、物流、保单等场景检索方案。产品架构 SaaS平台,开发者可以通过控制台或API与系统交互。场景化配置,开发者仅需创建应用实例,配置数据源,配置字段结构、搜索属性,等待索引重建完成后,即可通过SDK/控制台进行搜索测试。大数据检索,较之行业算法版,高性能检索版取消了繁重的行业算法能力,在支持搜索通用能力(分析器、排序)的基础上,重点关注业务查询和写入的吞吐,为开发者提供了大数据集检索场景下,秒级响应、实时查询的能力。产品特性 高吞吐,单表支持万级别的写入TPS,秒级更新。安全、稳定 提供7×24小时的运行维护,并以在线工单和电话报障等方式提供技术支持,具备完善的故障监控、自动告警、快速定位等一系列故障应急响应机制。基于阿里云的AccessKeyId和AccessKeySecret安全加密对,从访问接口上进行权限控制和隔离,保证用户级别的数据隔离,用户数据安全有保障。数据冗余备份,保证数据不会丢失. Query: OpenSearch有哪些版本 Assistant: ",
}
效果演示
总结与展望
本方案介绍了如何使用OpenSearch向量检索版结合LLM问答模型构建企业专属搜索问答系统。更多搜索解决方案可参考OpenSearch产品官网
OpenSearch针对对话式搜索场景,推出LLM智能问答版。提供SaaS化解决方案,一站式应用企业专属大模型,构建智能搜索问答系统,详情可参考LLM智能问答版!
本解决方案中的“开源向量模型”、“大模型”等来自第三方(合称“第三方模型”)。阿里云无法保证第三方模型合规、准确,也不对第三方模型本身、及您使用第三方模型的行为和结果等承担任何责任。请您在访问和使用前慎重考虑。此外我们也提醒您,第三方模型附有“开源许可证”、“License”等协议,您应当仔细阅读并严格遵守这些协议的约定。