基于阿里云向量检索服务搭建AI智能问答机器人

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
推荐全链路深度定制开发平台,高级版 1个月
OpenSearch LLM智能问答版免费试用套餐,存储1GB首月+计算资源100CU
简介: 基于阿里云向量检索服务搭建AI智能问答机器人

一、概述

什么是向量检索服务

向量检索服务DashVector基于通义实验室自研的高效向量引擎Proxima内核,提供具备水平拓展能力的云原生、全托管的向量检索服务。DashVector将其强大的向量管理、向量查询等多样化能力,通过简洁易用的SDK/API接口透出,方便被上层AI应用迅速集成,从而为包括大模型生态、多模态AI搜索、分子结构分析在内的多种应用场景,提供所需的高效向量检索能力。

上边是来自阿里云的官方文档,每个字都认识,放到一起就是看不懂它能干嘛!,所以又重新搜索了下看它都能用来干嘛:

应用场景

  • 搜索引擎:搜索引擎是向量检索技术最为常见的应用场景之一。通过对用户查询语句和网页内容进行向量化表示,可以实现更加精准的搜索结果匹配。
  • 推荐系统:推荐系统也是向量检索技术的重要应用场景之一。通过对用户历史行为和商品属性进行向量化表示,可以实现个性化的推荐服务。
  • 文本分类:文本分类是将文本按照类别进行分类的任务。向量检索技术可以将文本表示成向量,从而实现更加准确的文本分类。
  • 电商智能搜索和偏好推荐场景:在电商智能搜索和偏好推荐场景中,向量数据库可以实现基于向量相似度的搜索和推荐功能。例如一个电商平台中包含了各种商品的图像和描述信息,用户在搜索商品时,可以通过图像或者描述信息查询相关的商品,并且还希望能够实现推荐功能,自动向用户推荐可能感兴趣的商品。
  • 图片、视频、语音、文本等非结构化数据:非结构化数据可以通过人工智能技术(深度学习算法)提取特征向量,然后通过对这些特征向量的计算和检索来实现对非结构化数据的分析与检索。具体应用如:车辆检索和商品图片检索、视频处理的实时轨迹跟踪、基于语义的文本检索和推荐、声纹匹配、音频检索、文件去重以及新药搜索和基因筛选等。
  • AI问答:典型的问答系统比如通义千问、ChatGPT、在线客户服务系统、QA聊天机器人等。在一个问答系统,其中包含了一些预定义的问题和对应的答案。用户希望能够根据输入的问题,自动匹配到最相似的预定义问题,并返回对应的答案。

看了它的应用场景,以我的理解它就是一个找相似度的搜索工具,应用比较多的应该是电商偏好推荐和AI问答做客服机器人。以下我们就用它的免费试用产品来做一个AI客服机器人 。

二、入门试用

试用创建集群

在链接页面上领取试用资源,有一个月的试用期:https://developer.aliyun.com/topic/dashvector 开通的时候需要填Cluster集群名称。
然后进到向量检索的控制台 https://dashvector.console.aliyun.com/cn-hangzhou/cluster ,因为开通的是Serverless版本的,几乎是秒启动。可以看到集群状态已经是运行正常了。

image-20240105105700362.png

api测试

我们点右侧菜单API-KEY管理先创建一个api-key来进行测试。DashVector提供了python和java的sdk和HTTP API来操作,我们这里使用python的SKD来试用

pip3 install dashvector  ##安装SKD

我这里新建了一个test_dashvector.py的文件来对dashvector简单操作,所做的操作在源码注释里可以参考

#!/usr/bin/env python3
# coding=utf-8
import dashvector
from dashvector import Doc

client = dashvector.Client(
    api_key='sk-xxxxxxxxxxxx',      ###api_key,上边刚建的
    endpoint='vrs-cn-xxxxxxxxxxxxxxx'  ##访问端口在集群详情里获取
)
assert client

client.delete('news_embedings2')

#创建一个名称为quickstart,向量维度为4的 collection
client.create(name='quickstart', dimension=4)

collection = client.get('quickstart')
assert collection


# 通过dashvector.Doc对象,插入单条数据
collection.insert(Doc(id='1', vector=[0.1, 0.2, 0.3, 0.4]))

# 通过dashvector.Doc对象,批量插入2条数据
collection.insert(
    [
        Doc(id='2', vector=[0.2, 0.3, 0.4, 0.5], fields={
   
   'age': 20, 'name': 'zhangsan'}),
        Doc(id='3', vector=[0.3, 0.4, 0.5, 0.6], fields={
   
   'anykey': 'anyvalue'})
    ]
)

# 删除1条Doc数据

collection.delete(ids=['3'])

# 查看Collection统计信息
stats = collection.stats()

print(stats)

#删除Collection
# client.delete('quickstart')

上边的代码会为集群建一个collection(一个集合,同一类数据放在一起),为collection插入和删除数据。也可以在控制台上做以上操作,在集群控制台的collection列表中点击进入这个collection,新增、更新、删除、查询等操作都可以在这里进行。注意试用的集群只能建两个Collection,超过两个会报错。

三、AI智能问答机器人

准备工作:

客服语料数据: 需要有相关的语料知识库来生成向量数据,这里用的是在github上找了一个语料 https://github.com/PlexPt/chatgpt-corpus/blob/main/kefu/1.md 自己用的时候可以参考修改

模型服务灵积api-key:在使用语料库生成向量数据时需要用到text-embedding的模型,所以以需要建一个灵积的api-key:https://dashscope.console.aliyun.com/apiKey 注意这里的api是收费的,开通时送的有免费额度,足够这次测试试用了。在上方的总览里也能看到用过的模型和剩余免费额度

具体代码实现:

1、embedding.py 文件:主要是将1.md语料按行生成向量值,然后写入到名为kefu_embedings的collection中。

#!/usr/bin/env python3
# coding=utf-8
import dashscope
from dashscope import TextEmbedding

from dashvector import Client, Doc


def prepare_data(path, batch_size=25):
    f=open(path, 'r', encoding='utf-8')
    lines=f.readlines()
    batch_docs = []
    for line in lines:
        batch_docs.append(line)
        if len(batch_docs) == batch_size:
            yield batch_docs
            batch_docs = []

    if batch_docs:
        yield batch_docs

def generate_embeddings(news):
    rsp = TextEmbedding.call(
        model=TextEmbedding.Models.text_embedding_v1,
        input=news
    )
    embeddings = [record['embedding'] for record in rsp.output['embeddings']]
    return embeddings if isinstance(news, list) else embeddings[0]


if __name__ == '__main__':
    ##灵积模型服务的key
    dashscope.api_key = 'sk-xxxxxxxx'

    # 初始化 dashvector client--DashVector向量检索服务
    client = Client(
        api_key='sk-xxxxxxxxxxxxxxxxx',
        endpoint='vrs-cn-xxxxxxxx'
    )

    collection='kefu_embedings'
    ret = client.delete(name=collection)
    assert ret


    # 创建集合:指定集合名称和向量维度, text_embedding_v1 模型产生的向量统一为 1536 维
    rsp = client.create(collection, 1536)
    assert rsp

    # 加载语料
    id = 0
    collection = client.get(collection)
    for news in list(prepare_data('1.md')): ##1.md为语料库,在程序同级目录中,每行一个问题及答案
        #print(news)
        ids = [id + i for i, _ in enumerate(news)]
        id += len(news)

        vectors = generate_embeddings(news)
        # 写入 dashvector 构建索引
        rsp = collection.upsert(
            [
                Doc(id=str(id), vector=vector, fields={
   
   "raw": doc})
                for id, vector, doc in zip(ids, vectors, news)
            ]
        )
        assert rsp

2、question.py 文件:使用导入的语料来查询


#!/usr/bin/env python3
# coding=utf-8
from dashvector import Client

from embedding import generate_embeddings
import dashscope

from dashscope import Generation


def answer_question(question, context):
    prompt = f'''请基于```内的内容回答问题。"
    ```
    {context}
    ```
    我的问题是:{question}。
    '''

    rsp = Generation.call(model='qwen-turbo', prompt=prompt)
    return rsp.output.text

def search_relevant_news(question,collection):
    # 初始化 dashvector client--DashVector向量检索服务
    client = Client(
        api_key='sk-xxxxxxxxxxxxxxxxxx',  ##向量检索api-key
        endpoint='vrs-cn-xxxxxxxxxxxxx'         ###集群地址
    )

    # 获取刚刚存入的集合
    collection = client.get(collection)
    assert collection

    # 向量检索:指定 topk = 1
    rsp = collection.query(generate_embeddings(question), output_fields=['raw'],
                           topk=1)
    assert rsp
    return rsp.output[0].fields['raw']

if __name__ == '__main__':
    dashscope.api_key = 'sk-xxxxxxxxxxxxxx'   ###积灵模型api-key
    collection='kefu_embedings'
    # question = '我的订单还没有到货,我想取消订单怎么来操作?'
    # question = '最近的订单在哪里查?'
    question = '小明的爸爸妈妈结婚为什么没有邀请小明?'
    context = search_relevant_news(question,collection)
    answer = answer_question(question, context)

    print(f'问题: {question}\n' f'回答: {answer}')

测试:

测试了如下三个问题,可以看出回答还是相当准确的,不是相关的问题也不会有提示:

问题: 我的订单还没有到货,我想取消订单怎么来操作?
回答: 您可以进入“我的订单”页面,找到相应的订单后点击取消订单按钮即可。需要注意的是,只有未发货的订单才能被取消。

问题: 最近的订单在哪里查?
回答: 您可以登录我们的网站,点击“我的订单”选项卡,并输入您的订单号码和密码,以查看您最近的订单状态。

问题: 小明的爸爸妈妈结婚为什么没有邀请小明?
回答: 抱歉,这个问题与提供的信息无关,请提出相关问题。

四、问题及建议

1、API的接口报错信息有待加强,现在报错基本没有信息提示,得自己慢慢排查
2、控制台要更加完善,增加批量导入、自动生成向量等界面,更加方便的增加和修改内容库

参考:

https://help.aliyun.com/document_detail/2510235.html

相关文章
|
12天前
|
人工智能 Java Serverless
阿里云函数计算助力AI大模型快速部署
随着人工智能技术的快速发展,AI大模型已经成为企业数字化转型的重要工具。然而,对于许多业务人员、开发者以及企业来说,探索和利用AI大模型仍然面临诸多挑战。业务人员可能缺乏编程技能,难以快速上手AI模型;开发者可能受限于GPU资源,无法高效构建和部署AI应用;企业则希望简化技术门槛,以更低的成本和更高的效率利用AI大模型。
63 12
|
11天前
|
机器学习/深度学习 人工智能 UED
OOTDiffusion:开源AI虚拟试衣工具,智能适配性别和体型自动调整衣物
OOTDiffusion是一款开源的AI虚拟试衣工具,能够智能适配不同性别和体型,自动调整衣物尺寸和形状,生成自然贴合的试穿效果。该工具支持半身和全身试穿模式,操作简单,适合服装电商、时尚行业从业者及AI试穿技术爱好者使用。
95 27
OOTDiffusion:开源AI虚拟试衣工具,智能适配性别和体型自动调整衣物
|
11天前
|
机器学习/深度学习 Web App开发 人工智能
Amurex:开源AI会议助手,提供实时建议、智能摘要、快速回顾关键信息
Amurex是一款开源的AI会议助手,提供实时建议、智能摘要、快速回顾关键信息等功能,帮助用户提升会议效率。本文将详细介绍Amurex的功能、技术原理以及如何运行和使用该工具。
65 18
Amurex:开源AI会议助手,提供实时建议、智能摘要、快速回顾关键信息
|
5天前
|
人工智能 数据库 自然语言处理
拥抱Data+AI|DMS+AnalyticDB助力钉钉AI助理,轻松玩转智能问数
「拥抱Data+AI」系列文章由阿里云瑶池数据库推出,基于真实客户案例,展示Data+AI行业解决方案。本文通过钉钉AI助理的实际应用,探讨如何利用阿里云Data+AI解决方案实现智能问数服务,使每个人都能拥有专属数据分析师,显著提升数据查询和分析效率。点击阅读详情。
拥抱Data+AI|DMS+AnalyticDB助力钉钉AI助理,轻松玩转智能问数
|
2天前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
4天前
|
人工智能 自然语言处理 机器人
机器人迈向ChatGPT时刻!清华团队首次发现具身智能Scaling Laws
清华大学研究团队在机器人操作领域发现了数据规模定律,通过大规模数据训练,机器人策略的泛化性能显著提升。研究揭示了环境和对象多样性的重要性,提出了高效的數據收集策略,使机器人在新环境中成功率达到约90%。这一发现有望推动机器人技术的发展,实现更广泛的应用。
48 26
|
3天前
|
传感器 机器学习/深度学习 人工智能
AI视频监控卫士技术介绍:智能化河道管理解决方案
AI视频监控卫士系统,通过高清摄像头、智能传感器和深度学习技术,实现河道、水库、城市水务及生态保护区的全天候、全覆盖智能监控。系统能够自动识别非法行为、水质变化和异常情况,并实时生成警报,提升管理效率和精准度。
30 13
|
1天前
|
人工智能 大数据 测试技术
自主和开放并举 探索下一代阿里云AI基础设施固件创新
12月13日,固件产业技术创新联盟产业峰会在杭州举行,阿里云主导的开源固件测试平台发布和PCIe Switch固件技术亮相,成为会议焦点。
|
10天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
2天前
|
缓存 人工智能 负载均衡
AI革新迭代:如何利用代理IP提升智能系统性能
在人工智能快速发展的背景下,智能系统的性能优化至关重要。本文详细介绍了如何利用代理IP提升智能系统性能,涵盖数据加速与缓存、负载均衡、突破地域限制、数据传输优化和网络安全防护等方面。结合具体案例和代码,展示了代理IP在实际应用中的价值和优势。
11 0
下一篇
DataWorks