全部產品
Search
文件中心

Hologres:基於Hologres和大模型免費定製專屬聊天機器人

更新時間:Aug 30, 2025

本文為您介紹如何基於Hologres向量計算能力,無需進行模型訓練,即可免費、快速定製專屬聊天機器人。

背景資訊

大模型可以廣泛應用於各行各業。使用大模型定製聊天機器人,除了訓練大模型的方式外,還可以使用提示詞微調(Prompt-tuning)的方法,在提問時提供特定行業的相關語料,結合大模型的閱讀理解和資訊整合能力,對該垂直行業的問題提供更貼切的回答。

Hologres是一站式即時數倉引擎,與達摩院自研高效能向量計算軟體庫Proxima深度整合,支援高效、易用的向量計算能力,詳情請參見Proxima向量計算

可以將Hologres作為向量即時儲存和檢索引擎,把定製語料作為向量儲存並輸出給大模型,最終實現定製聊天機器人的快速搭建。

前提條件

  • 已有大模型:本文適用於各種大模型。

  • 已開通Hologres執行個體。

    說明

    建議使用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相關的專業問題進行問答。

    1. 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)
    2. 使用如下命令進入大模型:

      說明

      首次使用會自動下載Embedding模型(約400 MB),需要較長時間,第二次調用則不需要此過程。

      # 切換目錄至代碼所在目錄
      cd alibabacloud-hologres-connectors/holo-chatbot
      # 運行如下命令開啟設定嚮導,各個設定項按斷行符號跳過即可
      python generate_config.py
      
      # -n --no-vector-store: 不通過Hologres向量檢索,直接調用大模型進行問答
      python chatbot.py -n
    3. 提問問題及大模型對應回答如下:

      • 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向量資料準備。

    1. 在Hologres中建立資料庫,詳情請參見建立資料庫

    2. 完善串連資訊。

      運行如下命令開啟設定嚮導,並填寫串連資訊。後續您也可以手動修改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執行個體的資料庫名稱。

    3. 準備語料庫。

      本文以下載的代碼與範例資料中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_embedding表中查詢轉化後的向量資料:

        SELECT * FROM langchain_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. (可選)聊天機器人接入DingTalk群聊。

    聊天機器人可以接入DingTalk群聊,您也可以仿照dingding_server.py中的方式將Chatbot接入其他服務。

    1. 開啟釘群,添加自訂機器人。

      其中安全設定選擇加簽並開啟Outgoing機制,在其中填入您部署大模型定製聊天機器人伺服器的IP和任意Token。將Webhook中的access_tokensecret作為環境變數DINGDING_TOKENDINGDING_SECRET輸入到串連資訊(config/config.yaml)中。

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

      # 該指令碼會在後台服務DingTalk機器人發來的http請求,URL為 http://localhost:8889/chat
      python dingding_server.py > log.txt 2>&1 &
    3. 接入DingTalk群聊,開始聊天。

      您可以在DingTalk群聊中@聊天機器人,開始聊天。