首页 > 其他分享 >基于Hologres向量计算与大模型免费定制专属聊天机器人

基于Hologres向量计算与大模型免费定制专属聊天机器人

时间:2023-07-26 15:00:44浏览次数:62  
标签:存储 JSONB jsonb 模型 Hologres 向量 专属

简介:本文为您介绍如何基于Hologres向量计算能力,结合大模型的阅读理解和信息整合能力,对该垂直行业的问题提供更贴切的回答,即费、快速定制专属聊天机器人。

背景信息

大模型可以广泛应用于各行各业。使用大模型定制聊天机器人,除了训练大模型的方式外,还可以使用提示词微调(Prompt-tuning)的方法,在提问时提供特定行业的相关语料,结合大模型的阅读理解和信息整合能力,对该垂直行业的问题提供更贴切的回答。

Hologres是一站式实时数仓引擎,与达摩院自研高性能向量计算软件库Proxima深度整合,支持高效、易用的向量计算能力,详情请参见Proxima向量计算

可以将Hologres作为向量实时存储和检索引擎,把定制语料作为向量存储并输出给大模型,最终实现定制聊天机器人的快速搭建。

前提条件

  • 已有大模型:本文适用于各种大模型。
  • 已开通Hologres实例:您可以使用Hologres免费试用实例,0元搭建向量数据库,详情请参见新用户免费试用

说明 :建议使用Hologres 8CU规格,免费试用实例处理的向量数据规模为百万级。如有更大规模向量数据,请使用更大规格实例。

  • 已安装Anaconda,详情请参见Anaconda

实践步骤

1.环境准备。
  • 使用Anaconda环境运行如下命令安装相关依赖:
conda create --name chatbot python=3.8
conda activate chatbot

pip install langchain psycopg2-binary torch transformers modelscope bottle
pip install <大模型相关依赖>
  • 准备大模型:本文以支持通过API访问的大模型为例,您需要准备大模型API访问密钥。
  • 单击代码与样例数据或运行如下命令克隆本文所需代码与样例数据:

说明: 如果通过下载链接下载的代码与样例数据,使用前请进行解压。如果使用如下代码克隆代码与样例数据,请在使用前下载Git

git clone https://github.com/aliyun/alibabacloud-hologres-connectors.git
2.大模型试用。

先试用原生大模型,针对部分Hologres相关的专业问题进行问答。

a. 在holo-chatbot/chatbot.py代码的main函数(107行)中,修改chat_model_name为您想使用的大模型,示例代码如下:

****说明 ****:您可以使用任意LangChain支持的大模型,详见LangChain chat models,也可 以为其他大模型实现相应的接口后进行调用。

# 选择大模型
from langchain.chat_models import <chat_model_name>

chat_model = <chat_model_name>(<api_key>='xxx', <api_base>='xxx', temperature=0.1)
bot = Chatbot(chat_model, args.clear, args.no_vector_store)

b. 使用如下命令进入大模型:

说明 :首次使用会自动下载Embedding模型(约400 MB),需要较长时间,第二次调用则不需要此过程。

# 切换目录至代码所在目录
cd alibabacloud-hologres-connectors/holo-chatbot
# 运行如下命令打开设置向导,各个设置项按回车跳过即可
python generate_config.py

# -n --no-vector-store: 不通过Hologres向量检索,直接调用大模型进行问答
python chatbot.py -n

c. 提问问题及大模型对应回答如下:

Human: 什么是Hologres?
Chatbot: Hologres是一个分析型云原生数据仓库,由阿里云提供。它可以处理PB级别的数据,并提供了高性能的查询和分析能力。Hologres支持SQL和PostgreSQL协议,并提供了与阿里云生态系统的深度集成,例如MaxCompute和DataWorks。
Human: Hologres中有什么加速jsonb的方法吗?
Chatbot:是的,Hologres提供了一种名为“Gin Index”的方法来加速jsonb类型的查询。Gin Index是一种基于倒排索引的数据结构,它可以快速地定位包含特定jsonb键值对的行。在Hologres中,您可以使用CREATE INDEX语句创建Gin Index,例如:
CREATE INDEX idx_gin ON my_table USING gin(my_jsonb_column);
这将在my_table表的my_jsonb_column列上创建一个Gin Index。之后,您可以使用jsonb的查询操作符(例如->、->>、#>、#>>)来查询该列,并且查询将使用Gin Index进行加速
Human: Hologres中的列存jsonb是什么?
Chatbot: Hologres中的列存jsonb是一种数据类型,它可以存储JSON格式的数据。JSON是一种轻量级的数据交换格式,常用于Web应用程序中。jsonb是一种二进制格式的JSON,它可以提供更快的查询速度和更小的存储空间。在Hologres中,您可以使用jsonb列来存储和查询JSON数据。
3.Hologres向量数据准备。

a. 在Hologres中创建数据库,详情请参见创建数据库

b. 完善连接信息。

运行如下命令打开设置向导,并填写连接信息。后续您也可以手动修改config/config.yaml文件来更新连接信息。

python generate_config.py

连接信息:

参数

说明

HOLO_ENDPOINT

Hologres实例的网络地址。进入Hologres管理控制台实例详情页获取网络地址。

HOLO_PORT

Hologres实例的端口。进入Hologres管理控制台实例详情页获取端口。

HOLO_USER

当前阿里云账号的AccessKey ID。您可以单击AccessKey 管理,获取AccessKey ID。

HOLO_PASSWORD

当前阿里云账号的AccessKey Secret。您可以单击AccessKey 管理,获取AccessKey Secret。

HOLO_DATABASE

Hologres实例的数据库名称。

c. 准备语料库。

本文以下载的代码与样例数据中data目录下的example_data.csv文件为例。

  • 语料库文件需要使用CSV格式文件,并包含title和content两列。
  • 本文将Hologres部分用户文档作为语料,内容示例如下。您也可以按照示例文件格式自定义语料库。

title

content

你是谁

我是Holo chatbot,一个智能问答机器人。我会尽我所能根据给定文档数据库回答您的问题。

你是如何实现的、架构是怎样的

我采用Langchain框架进行开发,Langchain是一个简单易用的python大语言模型开发框架,其中集成封装了很多实用工具。我的后端采用Hologres进行向量数据存储,可以存储大量文本以及向量数据并进行快速向量近似查询,以取得最相关的文档。最后我通过调用大模型 API来实现问答。

什么是实时数仓Hologres

Hologres是阿里巴巴自主研发的一站式实时数仓引擎(Real-Time Data Warehouse),支持海量数据实时写入、实时更新、实时加工、实时分析……

  • 语料数据向量化并导入Hologres:

运行如下命令将语料数据转化为向量(Text Embedding),并写入Hologres。

说明 :本文使用达摩院在魔搭平台的CoRom开源中文embedding模型,将语料转换为768维的向量数据,详情请参见coROM

python chatbot.py -l

您可以在Hologres的langchain_pg_embedding表中查询转化后的向量数据:

SELECT * FROM langchain_pg_embedding limit 1;

--返回结果示例
id|embedding|metadata|document
2419815e-1407-11ee-bee5-acde48001122|{0.395261,0.123794,0.761932,0.413286,...}|{"source": "data/example_data.csv", "row": 1}|title: 你是如何实现的、架构是怎样的 content: 我采用Langchain框架进行开发,Langchain是一个简单易用的python大语言模型开发框架,其中集成封装了很多实用工具。我的后端采用Hologres进行向量数据存储,可以存储大量文本以及向量数据并进行快速向量近似查询,以取得最相关文档。最后我通过调用大模型 API来实现问答。
4.大模型和语料库效果验证。

将上文语料库对应的向量数据输入给大模型进行提示词微调,运行如下命令进入大模型再询问其相同的问题。

python chatbot.py
  • 问题一:相较于原生大模型,经语料库优化后的回答可以总结出Hologres更丰富更准确的优势。
Human: 什么是Hologres
Chatbot: Hologres是阿里巴巴自主研发的一站式实时数仓引擎(Real-Time Data Warehouse),支持海量数据实时写入、实时更新、实时加工、实时分析,支持标准SQL(兼容PostgreSQL协议和语法,支持大部分PostgreSQL函数),支持PB级数据多维分析(OLAP)与即席分析(Ad Hoc),支持高并发低延迟的在线数据服务(Serving),支持多种负载的细粒度隔离与企业级安全能力,与MaxCompute、Flink、DataWorks深度融合,提供企业级离在线一体化全栈数仓解决方案。Hologres致力于高性能、高可靠、低成本、可扩展的实时数仓引擎研发,为用户提供海量数据的实时数据仓库解决方案和亚秒级交互式查询服务,广泛应用在实时数据中台建设、精细化分析、自助式分析、营销画像、人群圈选、实时风控等场景。
  • 问题二:优化后的大模型已经可以理解Hologres加速查询JSONB类型的核心信息,并将版本信息、原理等内容总结得较为完整。
Human: Hologres中有什么加速jsonb的方法吗?
Chatbot: 是的,Hologres从 V1.3版本开始支持对于JSONB类型开启列式存储优化,能够降低JSONB数据的存储大小并加速查询。开启JSONB列式存储优化后,系统会在底层自动将JSONB的列转换为强Schema的列式存储,查询JSONB中某一个Value时就可以直接命中指定列,从而提升查询性能。同时因为JSONB中的Value是按列式存储的,在存储层可以达到像普通结构化数据一样的存储和压缩效率,从而有效降低存储,实现降本增效。
  • 问题三:优化后的大模型可以很好地将列存理解为列式存储优化,并完整总结JSONB列存原理。
Human: Hologres中的列存jsonb是什么?
Chatbot: Hologres中的列存JSONB是指将JSONB类型的数据按列式存储,即将JSONB中的每个键值对拆分成单独的列进行存储,而不是将整个JSONB对象作为一个整体存储。这种存储方式可以提高查询效率,因为查询时只需要命中需要的列,而不需要扫描整个JSONB对象。同时,列存JSONB还可以有效地降低存储空间,因为相同的值可以被重复存储在不同的行中,从而实现数据的压缩。Hologres从 V1.3版本开始支持对于JSONB类型开启列式存储优化。

可见经过优化,大模型在Hologres专业领域的回答已经非常准确。

5.(可选)聊天机器人接入钉钉群聊。

聊天机器人可以接入钉钉群聊,您也可以仿照dingding_server.py中的方式将Chatbot接入其他服务。

a. 打开钉群,添加自定义机器人,详情请参见自定义机器人接入

其中安全设置选择加签并打开Outgoing机制,在其中填入您部署大模型定制聊天机器人服务器的IP和任意Token。将Webhook中的access_token和secret作为环境变量DINGDING_TOKEN和DINGDING_SECRET输入到连接信息(config/config.yaml)中。

b. 使用如下命令在服务器上部署HTTP服务。

# 该脚本会在后台服务钉钉机器人发来的http请求,URL为 http://localhost:8889/chat
python dingding_server.py > log.txt 2>&1 &

c. 接入钉钉群聊,开始聊天。

您可以在钉钉群聊中@聊天机器人,开始聊天。

标签:存储,JSONB,jsonb,模型,Hologres,向量,专属
From: https://blog.51cto.com/u_15316473/6854607

相关文章

  • Introduction to Embedding for Retrieval 向量化召回简介
    引言搜广推类似场景都是retrieval+ranking两阶段方式,前者用从海量候选粗选一轮,后者再用负载模型,是效果、延迟和机器资源的trade-off的产物。retrieval广泛使用embedding+ANN方案,比起invertindex个性化更强。embedding动机,word2vec用向量表示高维的one-hot编码,向量的距......
  • PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素
    原文链接:http://tecdat.cn/?p=24346最近我们被客户要求撰写关于用户流失数据挖掘的研究报告,包括一些图形和统计输出。在今天产品高度同质化的品牌营销阶段,企业与企业之间的竞争集中地体现在对客户的争夺上“用户就是上帝”促使众多的企业不惜代价去争夺尽可能多的客户。但是企......
  • Cortex M4 中断向量设置
    CortexM4中断向量表设置Keywords:CortexM4CM4Vectortable中断前言本文叙述了因Vectortable设置错误导致进入hardfault中断的问题,现象就是APP运行卡死。起因今天同事在app最前面加了固定大小的校验,然后将新的程序烧录之后,bootloader无法正常启动app,我对此问题比较感......
  • 第四章 测试向量的生成
    1.TessentATPG流程1.1ATPG基本概念ATPG:Auto-Test-pattern-Generation:自动化测试向量生成基于故障或者电路结构,而非功能生成向量集合基于布尔逻辑运算的算法,将测试向量输入待测芯片,再对比芯片期望输出ATPG算法:工具首先会使用各种随机的测试向量检测容易检测的故障,......
  • 专属于“电脑族”的护眼小知识
    对于成年人,大部分工作方式已经离不开电脑,这是无可奈何的事情,但是这里有一份专属于你的护眼知识,让在屏幕前的你,了解如何缓解眼疲劳。首先,由于长时间注视电脑屏幕,注意力比较集中,从而眨眼次数减少,使眼睛不能得到泪液充分的滋润,从而导致眼睛干涩、疲劳等,这属于用眼过度,分析完原因......
  • 从A+B 到 sin A+cos B 再到 向量A+向量B
    从\(A+B\)到\(\sinA+\cosB\)再到\(\vec{A}+\vec{B}\)目录从\(A+B\)到\(\sinA+\cosB\)再到\(\vec{A}+\vec{B}\)前言弧度\(\pi\)弧度的单位:rad角度与弧度例一例二基本三角函数直角坐标系中的角与三角函数正弦定理余弦定理关于\(\sin^2A+\cos^2A=1\)的证明欧拉函数向量向量的......
  • EDS从小白到专家丨打造你的专属“数据物流”系统
     “数据快递”如何支撑便捷就医?本期让我们来了解如何使用EDS打造专属的“数据物流”系统......本文分享自华为云社区《【EDS从小白到专家】第2期—EDS-打造你的专属“数据物流”系统》,作者:开天aPaaS小助手。“数据快递”如何支撑便捷就医?本期让我们来了解如何使用EDS打造专属......
  • 向量自回归(VAR)模型分析消费者价格指数 (CPI) 和失业率时间序列|附代码数据
    原文链接:http://tecdat.cn/?p=24365最近我们被客户要求撰写关于向量自回归(VAR)模型的研究报告,包括一些图形和统计输出。var对象指定了p阶平稳的多变量向量自回归模型(VAR(p))模型的函数形式并存储了参数值 ( 点击文末“阅读原文”获取完整代码数据******** )。描述varm 对象的......
  • python怎么把三个向量合成一个矩阵
    在Python中,可以使用多种方法将三个向量合成一个矩阵。下面将介绍两种常见的方法:使用NumPy库和使用列表推导式。使用NumPy库NumPy是Python中用于科学计算的强大库,可以方便地进行向量和矩阵的操作。下面是使用NumPy库将三个向量合成一个矩阵的示例代码:首先,需要安装NumPy库,可以使用......
  • ubuntu16.04安装qdrant向量数据库
    qdrant向量数据库目前只支持docker部署1、安装docker(如果已经安装,跳过)在服务器上安装一下docker,下面是在ubutnu下安装docker1aptupdate2aptinstallapt-transport-httpsca-certificatescurlgnupglsb-release3curl-fsSLhttps://download.docker.com/linux/ubuntu/......