(Elasticsearch)使用阿里云 infererence API 及 semantic text 进行向量搜索

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文展示了如何使用阿里云 infererence API 及 semantic text 进行向量搜索。

原作者:Elastic布道师 刘晓国

在之前的文章 “Elasticsearch 开放推理 API 新增阿里云 AI 搜索支持”,它详细描述了如何使用 Elastic inference API 来针对阿里的密集向量模型,稀疏向量模型, 重新排名及 completion 进行展示。在那篇文章里,它使用了很多的英文的例子。但是阿里的模型更适合中文字来进行展示。

我们知道 Elastic 的开箱即用的稀疏向量模型 ELSER 只适合英文。目前它不支持中文。恰好阿里的稀疏向量模型填补了这个空白。稀疏向量可以开箱即用。对于很多不是很精通人工智能的开发者来说,这无疑是个福音,而且它使用的资源很小。

更多阅读,可参阅 Elasticsearch 的“阿里云 AI 搜索推理服务”。

稀疏向量

根据文档,我们使用如下的命令来创建稀疏向量的推理 API 端点:

PUT _inference/sparse_embedding/alibabacloud_ai_search_sparse
{
    "service": "alibabacloud-ai-search",
    "service_settings": {
        "api_key": "<api_key>",
        "service_id": "ops-text-sparse-embedding-001",
        "host": "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
        "workspace": "default"
    }
}

在上面,我们需要从阿里云获得 api_key 来进行。运行上面的命令:

image.png

我们接下来可以通过如下的方式来测试(如下信息由地址获得):

POST _inference/alibabacloud_ai_search_sparse
{
  "input": "阿里巴巴(中国)有限公司成立于2007年03月26日,法定代表人蒋芳"
}

上面的命令显示的结果为:

image.png

我们从上面的显示结果可以看出来,它和我们之前的 Elastic ELSER 输出是不同的。这里应该是 unicode。

image.png

上面的命令和下面的命令是一样的:

POST _inference/sparse_embedding/alibabacloud_ai_search_sparse
{
  "input": "阿里巴巴(中国)有限公司成立于2007年03月26日,法定代表人蒋芳"
}

因为每个 endpoint 在 Elasticsearch 创建时,都会自动检测并识别出它是什么类型的模型,所以上面路径中的 sparse_embedding 是可以省去的。

密集向量

同样,我们使用如下的命令来创密集向量的推理 API 端点:

PUT _inference/text_embedding/alibabacloud_ai_search_embeddings
{
    "service": "alibabacloud-ai-search",
    "service_settings": {
        "api_key": "<api_key>",
        "service_id": "ops-text-embedding-001",
        "host": "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
        "workspace": "default"
    }
}

运行上面的命令,我们可以看到:

image.png

我们可以使用如下的命令来生成密集向量:

POST _inference/alibabacloud_ai_search_embeddings
{
  "input": "阿里巴巴(中国)有限公司成立于2007年03月26日,法定代表人蒋芳"
}

image.png

密集向量是一个浮点数的数组。我们在生成的时候,其实还是可以对它进行标量量化,这样可以节省内存消耗,并提高搜索的速度。

完成 - completion

我们甚至可以针对搜索的结果运用大模型来得到一个 completion 的结果,比如,我们使用如下的命令来生成一个 completion 的推理 API 端点:

PUT _inference/completion/alibabacloud_ai_search_completion
{
    "service": "alibabacloud-ai-search",
    "service_settings": {
        "host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
        "api_key": "{{API_KEY}}",
        "service_id": "ops-qwen-turbo",
        "workspace" : "default"
    }
}

image.png

我们可以通过如下的例子来展示 completion:

POST _inference/completion/alibabacloud_ai_search_completion
{
  "input": "阿里巴巴(中国)有限公司是什么时候成立的?"
}

image.png

这个结果是结合大模型而生成的。大模型提供了一个基于在大模型训练时得到的结果。

重新排名 - rerank

同样,我们可以按照如下的命令来生成一个 rerank 的推理 API 端点:

PUT _inference/rerank/alibabacloud_ai_search_rerank
{
    "service": "alibabacloud-ai-search",
    "service_settings": {
        "api_key": "<api_key>",
        "service_id": "ops-bge-reranker-larger",
        "host": "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
        "workspace": "default"
    }
}

image.png

在上面的 input 里,我们列举了两个文档。我们可以通过 rerank 端点来针对这两个文档重新进行排序。假如我们想搜索的文字是 “阿里巴巴(中国)有限公司是哪一年成立的?”。那么 rerank 返回来的结果是:

image.png

从上面,我们可以看出来,第二个文档比第一个文档更为贴近,也就是它的相关度更高。

RAG 应用

在很多情况下,我们企业有很多的业务数据或者私有数据每时每刻都在生成,而大模型的知识仅限于在它生成的时候,所以很多的时候,大模型有很多的知识是不知道的。如果我们不对大模型的回答进行限制,那么它可能给出的答案就是错误的,从而产生幻觉。在实际的应用中,我们通常把业务或私有数据保存于像 Elasticsearch 这样的向量数据库中。在搜索时,我们首先搜索 Elasticsearch,并把搜索的结果发送给大模型做为 prompt 的一部分,这样就可以解决幻觉的问题。

image.png

首先,我们来创建一个稀疏向量索引:

PUT alibaba_sparse
{
  "mappings": {
    "properties": {
      "inference_field": {
        "type": "semantic_text",
        "inference_id": "alibabacloud_ai_search_sparse"
      }
    }
  }
}

然后,我们写入如下的两个文档:

PUT alibaba_sparse/_bulk
{"index": {"_id": "1"}}
{"inference_field": "阿里巴巴(中国)有限公司成立于2007年03月26日,法定代表人蒋芳"}
{"index": {"_id": "2"}}
{"inference_field": "阿里云(Alibaba Cloud Computing Co. Ltd,又名:阿里云计算有限公司)创立于2009年,总部设在杭州,为阿里巴巴集团的数字技术与智能骨干业务,向全球客户提供全方位云服务,包括自有服务器、弹性计算、存储、网络安全、数据库和大数据等服务。"}

我们通过如下的命令来进行搜索:

GET alibaba_sparse/_search
{
  "query": {
    "semantic": {
      "field": "inference_field",
      "query": "阿里云是什么时候成立的?"
    }
  }
}

上面搜索结果为:

阿里云排第一位

"阿里云(Alibaba Cloud Computing Co. Ltd,又名:阿里云计算有限公司)创立于2009年,总部设在杭州,为阿里巴巴集团的数字技术与智能骨干业务,向全球客户提供全方位云服务,包括自有服务器、弹性计算、存储、网络安全、数据库和大数据等服务。"

阿里巴巴排第二位

"阿里巴巴(中国)有限公司成立于2007年03月26日,法定代表人蒋芳"


含有阿里云的文档排在第一的位置。这个就是我们所说的向量搜索。


在实际的很多例子中,我们有时想得到一个唯一的答案,甚至这个答案是推理出来的,而不原始的文档。这个时候我们就需要用到大模型,也就是使用 completion 这个推理端点。


我们首先来做如下的搜索:

GET alibaba_sparse/_search
{
  "query": {
    "semantic": {
      "field": "inference_field",
      "query": "阿里巴巴公司的法人是谁?"
    }
  }
}

image.png

这次只有一个文档被列出来了。我们在下面使用 completion 端点:

POST _inference/completion/alibabacloud_ai_search_completion
{
  "input": "<|system|>
    你是一个知识渊博的人.</s>
    <|user|>
    CONTEXT:
    阿里巴巴(中国)有限公司成立于2007年03月26日,法定代表人蒋芳
    
    QUESTION: 
    阿里巴巴公司的法人是谁?</s>
    <|assistant|>"
}

在上面,我们把上面搜索的结果文档 “阿里巴巴(中国)有限公司成立于2007年03月26日,法定代表人蒋芳” 作为 context 的一部分,并把搜索的问题也一并提交。我们使用 completion 端点 API 来查看结果:

image.png

上面显示的结果是 “阿里巴巴公司的法定代表人是蒋芳”。很显然这个和之前的直接使用 completion 而没有 context 的结果是完全不同的:

POST _inference/completion/alibabacloud_ai_search_completion
{
  "input": "阿里巴巴法定代表是谁?"
}

image.png

可以这样理解,有了从 Elasticsearch 向量数据库(实时业务数据或私有数据)中搜索来的结果并提供给大模型,大模型可以根据这些上下文,得到更为贴近答案的搜索结果。这个在实际的使用中避免幻觉!


另外一个例子:

POST _inference/completion/alibabacloud_ai_search_completion
{
  "input": "<|system|>
    你是一个知识渊博的人.</s>
    <|user|>
    CONTEXT:
    阿里巴巴(中国)有限公司成立于2007年03月26日,法定代表人蒋芳
    
    QUESTION: 
    阿里巴巴(中国)有限公司是什么时候成立的?</s>
    <|assistant|>"
}

image.png

有关如何构建提示(prompt)

按照构建提示(prompt)的方法,我们来创建一个密集向量的索引:

PUT alibaba_dense
{
  "mappings": {
    "properties": {
      "inference_field": {
        "type": "semantic_text",
        "inference_id": "alibabacloud_ai_search_embeddings"
      }
    }
  }
}

我们按照同样的方法来写入文档:

PUT alibaba_dense/_bulk
{"index": {"_id": "1"}}
{"inference_field": "阿里巴巴(中国)有限公司成立于2007年03月26日,法定代表人蒋芳"}
{"index": {"_id": "2"}}
{"inference_field": "阿里云 (又名:阿里云计算有限公司)创立于2009年,总部设在杭州,为阿里巴巴集团的数字技术与智能骨干业务,向全球客户提供全方位云服务"}

我们来对这个密集向量索引 alibaba_dense 来进行搜索:

GET alibaba_dense/_search
{
  "query": {
    "semantic": {
      "field": "inference_field",
      "query": "Alibaba 的法人是谁?"
    }
  }
}

aliyun-image (1).png

很显然,在我们的搜索中,我们并没有使用 “阿里巴巴”,我们查询的是 Alibaba。在向量空间里 “阿里巴巴” 等同于 “Alibaba”。同样地,

GET alibaba_dense/_search
{
  "query": {
    "semantic": {
      "field": "inference_field",
      "query": "Aliyun是什么样的公司?"
    }
  }
}

上面的搜索的结果是:

image .png

很显然,含有 “阿里云” 的文档排名为第一尽管我们搜索的是 “Alibaba”。

自动分块

我们知道 semantic_text 字段可以帮我们自动把一大段的文字进行分块,而不需要我们手动去分块。这个是 semantic_text 一个非常大的好处。我们来创建一个叫做 alibaba_dense_large_text 的索引:

 
PUT alibaba_dense_large_text
{
  "mappings": {
    "properties": {
      "inference_field": {
        "type": "semantic_text",
        "inference_id": "alibabacloud_ai_search_embeddings"
      }
    }
  }
}

我们也为这个索引创建一个大的文档:

PUT alibaba_dense_large_text/_doc/1
{
    "inference_field": "
    阿里巴巴集团简介
阿里巴巴集团(Alibaba Group)是一家总部位于中国浙江省杭州市的全球知名科技公司,成立于1999年,由马云及其团队创建。作为一家以科技驱动为核心的企业,阿里巴巴在电子商务、云计算、金融科技、数字媒体、物流等领域拥有广泛布局,成为全球互联网行业的重要参与者。
创立背景与早期发展
阿里巴巴的诞生始于1999年,当时中国的互联网刚刚兴起。马云和他的团队怀着通过互联网赋能中小企业的愿景,推出了全球批发交易市场阿里巴巴网站(Alibaba.com)。最初,这个平台主要为中小企业提供展示产品和寻找国际买家的机会,帮助中国的制造商走向全球市场。经过几年发展,阿里巴巴迅速崭露头角,成为全球领先的B2B电子商务平台。
2003年,阿里巴巴推出了面向个人消费者的C2C平台淘宝网(Taobao),迅速吸引了大量用户。凭借“免费开店”的模式,淘宝在短时间内与其他电商平台展开竞争并取得成功。为了增强用户体验,阿里巴巴在2004年推出了第三方支付平台支付宝(Alipay),解决了在线支付的信任问题,这一创新奠定了中国电子商务快速发展的基础。
业务生态与战略布局
阿里巴巴通过不断拓展业务,逐步构建了涵盖电商、金融、物流和云计算等领域的多元化生态系统。
电子商务领域
作为阿里巴巴的核心业务,电子商务包括淘宝、天猫(Tmall)和全球速卖通(AliExpress)等平台。其中,淘宝以满足个人消费者需求为主,天猫则面向品牌和企业,提供高品质的商品和服务。全球速卖通致力于连接海外买家与中国卖家,在国际市场上影响力日益增强。
云计算与大数据
阿里云(Alibaba Cloud)是阿里巴巴集团的核心技术部门,成立于2009年,提供云计算服务、人工智能解决方案和大数据技术支持。如今,阿里云已成为全球领先的云服务提供商,为企业数字化转型提供支撑。
金融科技
支付宝的母公司蚂蚁集团是阿里巴巴金融科技布局的重要组成部分。通过支付宝,阿里巴巴为用户提供线上支付、理财、贷款等服务,推动了中国无现金社会的发展。
物流与供应链
菜鸟网络(Cainiao Network)成立于2013年,致力于优化物流效率,构建覆盖全球的智能物流网络。菜鸟的技术和平台能力提升了电商物流服务的速度和可靠性。
数字媒体与娱乐
阿里巴巴还在数字媒体领域积极布局,包括优酷、阿里影业和虾米音乐等,推动内容生态的建设。此外,集团通过投资文化创意产业和拓展体育事业,进一步丰富了品牌内涵。
国际化与创新
近年来,阿里巴巴不断加快国际化步伐,旨在成为全球消费者与企业的桥梁。集团通过并购和合作,扩展了其在东南亚、欧洲和北美等市场的业务。例如,通过收购Lazada,阿里巴巴增强了其在东南亚地区的电商影响力。
此外,阿里巴巴还积极探索新技术,包括人工智能、区块链和物联网。这些技术的应用不仅优化了集团的现有业务,还为未来的创新奠定了基础。
企业文化与社会责任
阿里巴巴的企业文化以“让天下没有难做的生意”为核心使命,鼓励员工创新和协作。马云强调企业的社会责任,并倡导将资源用于公益事业。例如,阿里巴巴基金会支持环境保护、教育发展和扶贫工作,为社会创造长期价值。
面临的挑战与未来展望
尽管阿里巴巴取得了显著成就,但也面临着国际竞争加剧、行业监管加强和技术创新压力等挑战。为了保持领先地位,阿里巴巴需要在全球范围内持续创新,同时积极适应不同市场的法规和文化。
展望未来,阿里巴巴将继续推动科技与商业的融合,助力中小企业和消费者实现更多价值。同时,通过技术研发和全球化布局,阿里巴巴有望在全球数字经济的发展中扮演更加重要的角色。
结语
作为中国乃至全球最具影响力的互联网公司之一,阿里巴巴的成长历程展现了科技对商业模式的深刻变革。通过不断创新和拓展,阿里巴巴正在为全球经济注入新的活力,也为无数企业和消费者创造了前所未有的机会。未来,阿里巴巴仍将以技术和商业为驱动,为构建更加便捷和高效的数字化世界而努力。
    "
}

上面的文章的字数大概在1000个字左右。


我们可以通过如下的方法来查看写入的文档:

GET alibaba_dense_large_text/_search

image.png

从上面,我们可以看出来,semantic_text 字段自动将一个很长文字的文档分块,并分别对它们进行向量化。


希望本文能为您在使用阿里云和Elasticsearch进行向量搜索的探索中提供有价值的参考和启发。未来,随着技术的不断演进,我们期待看到更多基于语义理解的智能应用落地,推动搜索技术向更高的层次发展。

























相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
7天前
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案
101 3
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
|
4天前
|
自然语言处理 安全 API
API First:模型驱动的阿里云API保障体系
本文介绍了阿里云在API设计和管理方面的最佳实践。首先,通过API First和模型驱动的方式确保API的安全、稳定和效率。其次,分享了阿里云内部如何使用CloudSpec IDL语言及配套工具保障API质量,并实现自动化生成多语言SDK等工具。接着,描述了API从设计到上线的完整生命周期,包括规范校验、企业级能力接入、测试和发布等环节。最后,展望了未来,强调了持续提升API质量和开源CloudSpec IDL的重要性,以促进社区共建更好的API生态。
|
1天前
|
JSON 数据挖掘 API
唯品会按关键字搜索 VIP 商品 API 接口的开发应用与收益
在电商蓬勃发展的今天,精准的商品搜索功能至关重要。唯品会的按关键字搜索VIP商品API接口通过高效、精准的检索,提升了用户购物体验和商家销售业绩。该接口基于RESTful架构,采用JSON格式交互,支持唯品会APP内搜索、第三方平台合作及数据分析等场景,显著提升用户活跃度与忠诚度,拓展销售渠道,增加收入,并挖掘数据驱动的商业价值,助力唯品会持续发展。
14 4
|
19天前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
123 2
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
4天前
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案。
|
10天前
|
人工智能 自然语言处理 文字识别
自学记录鸿蒙API 13:实现智能文本识别Core Vision Text Recognition
在完成语音助手项目后,我尝试了HarmonyOS Next API 13中的Core Vision Text Recognition API,体验其强大的文本识别功能。该API支持多语言高精度识别,能快速将图像中的文本提取为结构化信息,适用于文档扫描、票据管理和实时翻译等场景。通过权限配置、初始化服务、实现识别功能和构建用户界面,我完成了文本识别应用的开发,并探索了性能优化与功能扩展。鸿蒙生态的强大支持让开发者能更便捷地实现复杂功能。未来计划将此技术应用于实际项目,如票据管理或实时翻译工具。如果你也对文本识别感兴趣,不妨一起探索!
67 11
|
11天前
|
监控 搜索推荐 API
京东按图搜索京东商品(拍立淘)API接口的开发、应用与收益
京东通过开放商品详情API接口,尤其是按图搜索(拍立淘)API,为开发者、企业和商家提供了创新空间和数据支持。该API基于图像识别技术,允许用户上传图片搜索相似商品,提升购物体验和平台竞争力。开发流程包括注册账号、获取密钥、准备图片、调用API并解析结果。应用场景涵盖电商平台优化、竞品分析、个性化推荐等,为企业带来显著收益,如增加销售额、提高利润空间和优化用户体验。未来,随着数字化转型的深入,该API的应用前景将更加广阔。
56 1
|
18天前
|
搜索推荐 API 定位技术
一文看懂Elasticsearch的技术架构:高效、精准的搜索神器
Elasticsearch 是一个基于 Lucene 的开源搜索引擎,以其强大的全文本搜索功能和快速的倒排索引技术著称。它不仅支持数字、文本、地理位置等多类型数据,还提供了可调相关度分数、高级查询 DSL 等功能。Elasticsearch 的核心技术流程包括数据导入、解析、索引化、查询处理、得分计算及结果返回,确保高效处理大规模数据并提供准确的搜索结果。通过 RESTful API、Logstash 和 Filebeat 等工具,Elasticsearch 可以从多种数据源中导入和解析数据,支持复杂的查询需求。
76 0
|
API
阿里云API大赛决赛在即,15战队将上演争冠之战
阿里云API应用创新大赛总决赛来袭,15个参赛战队上演夺冠之位
1627 0
|
1天前
|
JSON API 数据格式
京东商品SKU价格接口(Jd.item_get)丨京东API接口指南
京东商品SKU价格接口(Jd.item_get)是京东开放平台提供的API,用于获取商品详细信息及价格。开发者需先注册账号、申请权限并获取密钥,随后通过HTTP请求调用API,传入商品ID等参数,返回JSON格式的商品信息,包括价格、原价等。接口支持GET/POST方式,适用于Python等语言的开发环境。
27 11

相关产品

  • 检索分析服务 Elasticsearch版