基於 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

c.連接信息:

參數 說明
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實例的數據庫名稱。

d.準備語料庫。本文以下載的代碼與樣例數據中data目錄下的example_data.csv文件爲例。

  • 語料庫文件需要使用CSV格式文件,幷包含titlecontent兩列。
  • 本文將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類型開啓列式存儲優化。

1.可見經過優化,大模型在Hologres專業領域的回答已經非常準確。
2.(可選)聊天機器人接入釘釘羣聊。聊天機器人可以接入釘釘羣聊,您也可以仿照dingding_server.py中的方式將Chatbot接入其他服務。

a.打開釘羣,添加自定義機器人,詳情請參見自定義機器人接入

其中安全設置選擇加簽並打開Outgoing機制,在其中填入您部署大模型定製聊天機器人服務器的IP和任意Token。將Webhook中的access_tokensecret作爲環境變量DINGDING_TOKENDINGDING_SECRET輸入到連接信息(config/config.yaml)中。

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

# 該腳本會在後臺服務釘釘機器人發來的http請求,URL爲 http://localhost:8889/chat
python dingding_server.py > log.txt 2>&1 &

c.接入釘釘羣聊,開始聊天。

您可以在釘釘羣聊中@聊天機器人,開始聊天。

點擊立即免費試用雲產品 開啓雲上實踐之旅!

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章