作者:多愚、本岩
大语言模型时代
背景
ChatGPT一声炮响,把整个世界带到了大模型时代。2022年11月30日Open AI发布ChatGPT,短短两个月时间月活过亿,惊人的增长速度刷新了AI应用的记录。于是各大公司停止观望,积极投入到大模型技术的研发,多家公司宣布要把大模型技术加入到自身产品线。短短几个月时间,大模型成了路人皆知的话题,现在我们每天都被各种大模型相关的消息轰炸,围绕大模型的技术也层出不穷,同时也掀起了新一轮投资、创业热潮。
大语言模型拥有多任务能力,一个大模型就可以完成写文章、写代码、翻译、解题、逻辑推理、对话等。由于在这些任务上接近或者达到人类水平,以致于引起大家对于失业的担忧。但是我们仔细分析就会发现,这些任务虽然都属于某一个专业领域,但是大模型能完成的仍然仅限于比较通用的任务,比如写代码,只能高质量完整通用算法的代码,具体到某一个细分业务领域就无能为力了。ChatGPT的对话能力已经比较强大,但是如果具体到垂直领域的业务场景,也表现不佳,比如作为特定产品的智能客服对很多问题都只能回答不知道。ChatGPT在通用任务上表现优秀,但无法解决众多垂直业务领域问题,这也不是ChatGPT模型本身的定位,而是需要通过其生态应用去解决。如何在垂直领域针对特定业务构建企业专属问答并且确保生成内容可控,是垂直领域面临的主要问题,也是从事行业搜索和问答的应用努力的方向。OpenSearch作为行业智能搜索产品,其使命就是去解决这一问题,我们正在做积极的探索。同时Havenask作为云产品OpenSearch和阿里内部引擎HA3的开源版本,也进行了尝试和探索。
技术方案
目前业界最常用的方案就是“文档切片+向量检索+大模型生成答案”的方式,这个方案在以前就是基于文档内容的问答,只是少了大模型生成答案这一步。主要包含两个流程,数据处理流程和查询流程。如下图所示,数据处理流程就是将包含业务数据的非结构化文档PDF、Word、Markdown等进行处理,提取出文本,再按照完整语义切成有限字数的小片段,再将切片向量化以后推送到向量数据库构建向量索引,这样数据处理就完成了。
接下来就是查询流程(见下图),用户查询的时候,首先将查询词向量化,然后使用向量化的查询词进行向量检索得到相似的前几个文档片段向量,然后组装prompt,prompt由一些指令和向量检索结果组成。最后将原始query和prompt一起发送给大模型生成答案,这就是一个完整的流程。
Finetune和Prompt
使用特定业务场景数据finetune模型,可以教会模型在该场景下回答问题的方式,尽可能保证生成答案可控和可靠,finetune机制产品化以后,用户就可以按照产品要求的格式上传finetune数据,自动finetune出企业专属模型。对于大模型来说prompt非常重要,有各种各样的prompt技巧,吴恩达和OpenAI还联合推出了一门如何给ChatGPT做prompt的课程。假设把大模型当成一个具备一定思维能力的人,prompt就是给这个人下达一个任务,想要让任务顺利完成,给它下达的任务指令必须清晰明确,和我们日常工作中分配工作是类似的。在前文所述方案中,通常是将TopN的检索结果作为prompt的主体,再告诉它一些指令,比如“不懂不要瞎说”,“参考检索结果生成答案"等,然后将temperature设置到尽可能小,防止模型自由发挥。下面是一个简单的prompt示例:
{ "prompt": "Human: 作为一名产品技术支持,请根据搜索结果回答问题,如果无法回答,不要生成答案。 Search Results: OpenSearch规格类型对比: 1.行业算法版与高性能检索版的区别:产品概述:OpenSearch简介 OpenSearch是基于阿里巴巴自主研发的大规模分布式搜索引擎搭建的一站式智能搜索业务开发平台,在大数据场景下实现千亿数据毫秒级响应,提供订单、物流、保单等场景检索方案。产品架构 SaaS平台,开发者可以通过控制台或API与系统交互。场景化配置,开发者仅需创建应用实例,配置数据源,配置字段结构、搜索属性,等待索引重建完成后,即可通过SDK/控制台进行搜索测试。大数据检索,较之行业算法版,高性能检索版取消了繁重的行业算法能力,在支持搜索通用能力(分析器、排序)的基础上,重点关注业务查询和写入的吞吐,为开发者提供了大数据集检索场景下,秒级响应、实时查询的能力。产品特性 高吞吐,单表支持万级别的写入TPS,秒级更新。安全、稳定 提供7×24小时的运行维护,并以在线工单和电话报障等方式提供技术支持,具备完善的故障监控、自动告警、快速定位等一系列故障应急响应机制。基于阿里云的AccessKeyId和AccessKeySecret安全加密对,从访问接口上进行权限控制和隔离,保证用户级别的数据隔离,用户数据安全有保障。数据冗余备份,保证数据不会丢失. Query: OpenSearch不同版本有什么区别? Assistant: ", }
成本问题
由于大模型都是逐字生成的方式,每生成一个字就要进行一次推理,每次调用大模型消耗的算力较大,从用户的角度来讲,得到完整的答案耗时都较长,虽然为了改善用户体验采用了逐字输出的方式,但是不能从根本上解决大模型生成性能问题。为了提高性能,需要使用昂贵的A100卡,或者用单机多卡,这些都带来了大模型类应用的高成本,相对以前,客户需要付出的成本成倍增长,很难进行大规模的商业推广。围绕大模型提升推理性能,降低推理成本仍然是当前大模型应用面临的主要问题。
Havenask大模型实践
Havenask简介
Havenask是阿里巴巴集团推出的开源大规模分布式搜索引擎,也是阿里内部业务广泛使用的HA3搜索引擎的开源版本。HA3支持了包括淘宝、天猫、菜鸟、高德、饿了么、全球化在内的众多阿里搜索业务。Havenask继承了HA3的优点,同时剥离了内部业务逻辑,并针对开源社区进行了优化,有以下技术优势:
- 极致工程性能:支持千亿级数据实时检索,百万QPS查询,百万TPS写入,毫秒级查询延迟与秒级数据更新,真正的工业级开源软件,可以用在实际生产环境和商用。
- SQL查询支持:支持SQL语法便捷查询,查询体验对开源社区友好。
- 丰富插件机制:支持各类业务插件,允许开源社区和开源用户自己通过插件植入自身业务逻辑,打造自己的搜索引擎。
- 高性能向量检索:可通过与插件配合实现多模态搜索,满足更多场景的搜索服务搭建需求。
- 内置大模型支持:可以对接ChatGPT、ChatGLM等大模型,允许用户基于Havenask做下一代的搜索和问答产品。
更多详情请参考Havenask产品文档
Havenask大模型方案(Havenask-LLM)
业界有很多整合ChatGPT进行文档问答的框架,Havenask作为向量检索引擎,有自己的用户群和生态,如果想要基于Havenask搭建企业专属的问答系统,就可以使用Havenask-LLM,Havenask-LLM通过集成ChatGLM和ChatGPT,支持了基于文档的问答。目前Havenask支持问答的方式就是前文所述经典方案“文档切片+向量检索+大模型生成答案”的方案,流程如下图所示,首先用户借助Havenask-LLM提供的工具将Markdown或PDF格式的文档进行文本提取,切片,向量化处理,并最终推送到Havenask构建向量索引。用户查询时将Query向量化,并从Havenask检索出topN(N可以自定义)的向量,TopN的原始文本为Prompt主体,再加一些指令,将Prompt连同原始问题一起发给ChatGPT API或者ChatGLM,生成最终答案返回给用户。
Havenask-LLM的架构如下图所示,整体分为3个部分:
- 问答服务: 分为离线数据处理和在线查询。
- 推理服务:支持开源大模型ChatGLM和ChatGPT API,用户可以自己选择其中一种使用即可。同时支持Text2Vec模型,提供文本向量化服务。
- Havenask:作为向量引擎,提供向量索引构建、向量存储和向量查询服务。
问答服务
数据处理
- 插入:将长文本拆分成小的chunk,调用大模型生成向量,推到引擎中。
- 更新、删除:每个文档有个id,插入引擎的chunk数据带上文档id,更新和删除时先从引擎查出文档对应的所有pk进行删除。之后再插入新的数据。
查询管理
- 对查询Query进行向量化
- 查询Havenask引擎,获取topN的检索结果
- 将结果作为Prompt连同原始问题发给大模型生成答案
推理服务
加载不同的大模型并提供API接口,对外提供服务
Havenask
提供向量索引构建,向量索引存储,和向量索引查询功能
下一步规划
前述经典方案简洁易于实现,但是方案本身只解决了非结构化文档的问答,实际业务数据中,除了非结构化数据,还有结构化数据,另外还有用户数据,这些数据都可以参与到问答或者模型finetune中。其次大语言模型只解决语言层面的问题,但不解决实际任务的执行,比如在产品技术支持场景中,想实现遇到某一类问题就自动提工单的功能,提工单需要收集齐信息后,自动提交工单,这是语言模型无法解决的,需要对接工单系统解决。另外并不是所有问题,都能被大语言模型解决,比如输入文字,生成图片,这些就需要特定领域模型去解决,比如stable diffusion。还有就是大语言模型有时效性问题,无法回答最近发生的事情,这里就需要对接其他平台来解决。这些问题我们会在下个版本去解决。简要设计参考下图:
提供离线数据管理模块,支持将非结构化数据、结构化数据、以及用户属性和用户使用产品过程中的反馈数据同步到系统,离线数据管理模块进行文档切片,文本、图片和视频的向量化等必要的数据处理和存储,然后将向量和文本推送到索引构建服务构建向量索引和文本索引,索引构建完成会推送到向量引擎供查询使用。同时部分业务数据会推送到大模型服务进行用户级模型finetune生成用户专属模型,大语言面模型服务对外提供prompt生成和管理,用户级模型finetune,并提供对各种大模型的封装和调用,同时对于复杂任务,还提供任务拆解功能,拆解出来的任务由任务管理模块统一管理。用户查询时获取用户信息、所处场景或任务的信息然后决策要不要做向量检索,请求发给大模型,还是特定领域模型,根据角色完成请求生成答案后返回给用户,这样就完成了一轮问答。
结语
以ChatGPT为代表的生成式AI的研究进展对很多领域产生了影响,ChatGPT则是深刻的影响了自然语言对话系统。人类研究自然语言对话系统最早还是从图灵测试开始,先后使用过各种不同方法,比如专家系统和海量知识库、自然语言理解、深度学习等,设计出来的对话系统非常复杂,但效果始终无法达到预期,相应的应用产品都差强人意,只能在非常狭窄的领域内应用。目前只有类似天猫精灵、Siri之类的个人助理类产品为人们熟知,但也主打内容和指令,而不是语言对话能力。ChatGPT的出现,给对话系统的发展带来了转机,不久的将来,有望通过更加简单的设计来超越以往对话系统的能力,之前需要做的各种自然语言理解和推理任务,都可以由大语言模型来处理,对话系统只需要围绕大语言模型设计好不同场景的业务逻辑。除了对话以外,对搜索的影响也很大,一直有一种看法认为搜索的未来就是对话和问答,基于大模型技术,搜索产品可以有全新的体验,比如微软推出的New Bing就给大家展示了一种对话式搜索产品形态。原有的搜索产品有机会借助大模型技术进行技术革新,但如果不能跟上技术的步伐,这些搜索产品就面临被淘汰和颠覆的风险。OpenSearch团队正在积极推进这方面的工作。