写点什么

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

  • 2023-07-26
    浙江
  • 本文字数:3693 字

    阅读完需:约 12 分钟

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

背景信息

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


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


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

前提条件

  • 已有大模型:本文适用于各种大模型。

  • 已开通 Hologres 实例:您可以使用 Hologres 免费试用实例,0 元搭建向量数据库,详情请参见新用户免费试用


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


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

实践步骤

1.环境准备。

  • 使用Anaconda环境运行如下命令安装相关依赖:


conda create --name chatbot python=3.8conda activate chatbot
pip install langchain psycopg2-binary torch transformers modelscope bottlepip 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
复制代码


连接信息:



c. 准备语料库。


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


  • 语料库文件需要使用 CSV 格式文件,并包含 title 和 content 两列。

  • 本文将 Hologres 部分用户文档作为语料,内容示例如下。您也可以按照示例文件格式自定义语料库。



  • 语料数据向量化并导入 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|document2419815e-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: 什么是HologresChatbot: 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/chatpython dingding_server.py > log.txt 2>&1 &
复制代码


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


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


发布于: 刚刚阅读数: 5
用户头像

还未添加个人签名 2020-10-15 加入

分享阿里云计算平台的大数据和AI方向的技术创新和趋势、实战案例、经验总结。

评论

发布
暂无评论
基于Hologres向量计算与大模型免费定制专属聊天机器人_人工智能_阿里云大数据AI技术_InfoQ写作社区