DataEase+MaxKB:讓BI再多個“A”

一、前言

當前DataEase BI更多聚焦于BI展示層,然而,在與組件Copilot 以及后續計劃替換的 Sqlbot的融合方面,目前仍存在一些亟待解決的問題,當它們嘗試與 DataEase 進行結合應用時,出現了兩種較為突出的狀況。

一方面,Copilot與 DataEase 的集成割裂感過于強烈。這種割裂不僅體現在操作流程上,用戶需要在不同組件之間頻繁切換,增加了操作的復雜性和繁瑣程度;還表現在數據交互層面,組件之間無法實現無縫的數據傳遞與共享,導致數據的一致性和連貫性受到影響,極大地降低了用戶的使用體驗。

另一方面,Sqlbot組件在進行數據查詢時,往往針對的是全局數據集。這意味著無論用戶當前正在關注哪個具體的大屏展示內容,組件所返回的查詢結果都是基于整個數據集的宏觀信息。但用戶在實際使用過程中,通常更希望針對當前所展示大屏中的特定數據進行問答交互和深入解析,以獲取與當前展示內容緊密相關的詳細信息和分析結果。現有的這種查詢方式與用戶實際需求之間存在明顯偏差,無法精準滿足用戶對于當前展示大屏數據問答和解析的期望。

基于上述痛點,我們將MaxKB對應應用嵌入DataEase公共鏈接大屏,可以實現針對當前大屏的智能問答。

二、實現

1、環境準備

·部署DataEase:詳見 https://dataease.io/docs/v2/installation/online_installation/

·部署Maxkb:詳見 https://maxkb.cn/docs/v2/installation/online_installtion/

2、MaxKB應用制作

2.1 函數庫編寫

·生成DataEase token

import?jwt
import?requestsfrom Crypto.Cipher?import?AES from Crypto.Util.Padding?import?pad from base64?import?b64encode from uuid?import?uuid4 import?time ? def generate_token(accessKey,secretKey): ????"""生成包含AES加密簽名的JWT令牌""" ????# 生成唯一ID和時間戳 ????unique_id = str(uuid4()) ????timestamp = str(time.time_ns()?// 1000000) ????? ????# AES加密邏輯(原aes_encrypt方法的功能) ????src = accessKey +?"|"?+ unique_id +?"|"?+ timestamp ????secret_key = secretKey.encode('utf-8') ????iv = accessKey.encode('utf-8') ????cipher = AES.new(secret_key, AES.MODE_CBC, iv) ????encrypted = cipher.encrypt(pad(src.encode('utf-8'), AES.block_size)) ????signature = b64encode(encrypted).decode('utf-8') ????? ????# 生成并返回JWT令牌 ????token = jwt.encode( ????????{'accessKey': accessKey,?'signature': signature}, ????????secretKey, ????????algorithm='HS256' ????) ????return?token

·調用DataEase查詢看板詳情接口

import?requests
import?json? def findById(token,id,busiFlag,domain): ? ????# 生成簽名和令牌 ????# 設置請求頭 ????headers = { ????????'Accept':?'*/*', ????????'Content-Type':?'application/json', ????????'x-de-ask-token': token ????} ????? ????requestData = { ????????'id': id, ????????'busiFlag': busiFlag, ????????'source':'main', ????????'resourceTable':'core' ????} ? ????# 發送請求 ????response = requests.post(domain+'/de2api/dataVisualization/findById', headers=headers, json=requestData) ????responseJson = json.loads(response.text) ????title_map = {} ????for?key, value in responseJson['data']['canvasViewInfo'].items(): ????????# 獲取每個對象的title作為新的鍵 ????????title = value.get('title') ????????if?title:?# 確保title存在(避免空值) ????????????title_map[title] = value ????????????? ????return?title_map

·獲取圖表數據

import?requests
import?json? def getData(token,key,canvasViewMap,domain): ? ????# 生成簽名和令牌 ????# 設置請求頭 ????headers = { ????????'Accept':?'*/*', ????????'Content-Type':?'application/json', ????????'x-de-ask-token': token ????} ????? ????# 發送請求 ????response = requests.post(domain+'/de2api/chartData/getData', headers=headers, json=canvasViewMap[key]) ????responseJson = json.loads(response.text) ? ? ????data = responseJson['data']['data'] ????? ????shortname_to_name = { ????????field["fieldShortName"]: field["name"] ????????for?field in data["fields"] ????} ? ????mapped_table_rows = [] ????for?row in data["tableRow"]: ????????mapped_row = { ????????????shortname_to_name[shortname]: value ????????????for?shortname, value in row.items() ????????} ????????mapped_table_rows.append(mapped_row) ????????? ????return?mapped_table_rows

2.2高級編排

注:

1、其中涉及的id等信息與de嵌入式那里獲取類似,應用見附件

2、原理是通過接口查詢視圖標題(所以視圖必須得有標題且不一樣,故富文本不支持)

3、中間會用到大模型提取視圖標題,目前有些客戶本地部署的大模型不能正確提取標題

3、部署Nginx

yum install gcc pcre-devel openssl-devel -y
wget http://nginx.org/download/nginx-1.20.2.tar.gz && tar -zxvf nginx-1.20.2.tar.gz && cd nginx-1.20.2 &&?./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_v2_module --with-http_sub_module &&?make && make install

cat?/usr/local/nginx/conf/nginx.conf

#user?nobody;
worker_processes??1; ? #error_log?logs/error.log; #error_log?logs/error.log?notice; #error_log?logs/error.log?info; ? #pid???????logs/nginx.pid; ? ? events { ????worker_connections??1024; } ? ? http { ????include??????mime.types; ????default_type?application/octet-stream; ? ????#log_format?main??'$remote_addr - $remote_user [$time_local] "$request" ' ????#??????????????????'$status $body_bytes_sent "$http_referer" ' ????#??????????????????'"$http_user_agent" "$http_x_forwarded_for"'; ? ????#access_log?logs/access.log?main; ? ????sendfile???????on; ????#tcp_nopush????on; ? ????#keepalive_timeout??0; ????keepalive_timeout??65; ? ????#gzip?on; ? ????server_tokens off; ? ? ?????server { ????????????????listen?8088?;? ????????? ????????????????location / { ????????????????????????proxy_pass??http://localhost:9080/;#DataEase ????????????????????????server_name_in_redirect off; ????????????????????????proxy_http_version??????1.1; ????????????????????????proxy_set_header???????Upgrade????????$http_upgrade; ????????????????????????proxy_set_header???????Connection?"upgrade"; ? ????????????????????????proxy_set_header??????????Host $host:$server_port; ????????????????????????proxy_set_header??????????X-Real-IP $remote_addr; ????????????????????????proxy_set_header??????????X-Forwarded-For $proxy_add_x_forwarded_for; ????????????????????????proxy_set_header??????????X-Forwarded-Proto $scheme; ? ????????????????????????sub_filter?'</head>'?'<script async defer src="http://XXX:8080/chat/api/embed?protocol=http&host=XXX:8080&token=XXXX"></script>'; #MaxKB應用嵌入 ????????????????????????sub_filter_once on; ????????????????} ????????} ? ????server { ????????listen???????80; ????????server_name?localhost; ? ????????#charset koi8-r; ? ????????#access_log?logs/host.access.log?main; ? ????????location / { ????????????root??html; ????????????index?index.html index.htm; ????????} ????} }

4、效果展示

三、優化點

  1. 應用中的提示詞可以根據實際需求優化,也可以與智能問數場景結合;
  2. 當前nginx那邊多個大屏+對應mk應用需要多個url代理
通過網盤分享的文件:DataEase.mk
鏈接: https://pan.baidu.com/s/1bRJLBHasveXR4l4wPPaE8g?pwd=7htt 提取碼: 7htt

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920051.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920051.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920051.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VUE 的彈出框實現圖片預覽和視頻預覽

這是一個基于Vue3封裝的媒體預覽組件&#xff0c;主要功能包括&#xff1a;多格式支持&#xff1a;可同時預覽圖片和視頻圖片操作功能&#xff1a;縮放&#xff08;支持滾輪縮放和按鈕控制&#xff09;旋轉&#xff08;90度增量旋轉&#xff09;拖拽&#xff08;僅在放大狀態下…

【Linux基礎知識系列】第一百零九篇 - 使用shell的輸入與輸出重定向

在 Linux 系統中&#xff0c;Shell 是用戶與操作系統交互的界面&#xff0c;通過命令行輸入命令來執行各種操作。輸入與輸出重定向是 Shell 編程中非常重要的概念&#xff0c;它允許用戶將命令的輸出保存到文件中&#xff0c;或者從文件中讀取輸入&#xff0c;從而實現更靈活的…

Redis面試精講 Day 30:Redis面試真題解析與答題技巧

【Redis面試精講 Day 30】Redis面試真題解析與答題技巧 在“Redis面試精講”系列的第30天&#xff0c;我們迎來收官之作——Redis面試真題解析與答題技巧。這一天的核心目標是&#xff1a;幫助你系統化梳理前29天所學知識&#xff0c;掌握高頻面試題的解題思路&#xff0c;提升…

設計模式:單例模式(Singleton Pattern)

文章目錄一、單例模式的概念二、單例模式的結構三、常見實現方式3.1 餓漢式單例3.2 懶漢式單例一、單例模式的概念 單例模式&#xff08;Singleton Pattern&#xff09;是一種創建型設計模式&#xff0c;它的核心思想是&#xff1a;保證在一個進程中&#xff0c;某個類僅有一個…

Swift 解法詳解 LeetCode 362:敲擊計數器,讓數據統計更高效

文章目錄 摘要 描述 題解答案 題解代碼分析 代碼講解 示例測試及結果 時間復雜度 空間復雜度 總結 摘要 “敲擊計數器”這道題聽上去像個小游戲里的功能,但其實它背后對應的是一個常見的需求:在過去一段時間內統計事件發生的次數。比如網站的訪問量統計、API 調用次數限制、…

coze工作流200+源碼,涵蓋AI文案生成、圖像處理、視頻生成、自動化腳本等多個領域

AI 博主風哥在github分享了 200 實用生產力coze工作流&#xff0c;涵蓋AI文案生成、圖像處理、視頻生成、自動化腳本等多個領域&#xff0c;導入即用&#xff0c;項目地址https://github.com/Hammer1/cozeworkflows github下載慢也可前往該地址下載https://pan.baidu.com/s/1fC…

AI與SEO關鍵詞協同優化

內容概要 人工智能&#xff08;AI&#xff09;技術的迅猛發展正深刻變革著搜索引擎優化&#xff08;SEO&#xff09;的實踐方式&#xff0c;特別是在關鍵詞策略這一核心領域。兩者的深度融合&#xff0c;為企業在數字海洋中精準導航提供了前所未有的強大工具。通過AI驅動的智能…

【Unity開發】Unity核心學習(二)

二、動畫基礎 1、Animation動畫窗口 &#xff08;1&#xff09;介紹&#xff08;2&#xff09;Animation窗口功能2、創建編輯動畫 面板變化&#xff1a;動畫文件界面&#xff1a;3、Animator動畫狀態機 &#xff08;1&#xff09;有限狀態機概念&#xff08;2&#xff09;Anima…

NETSDK1045 當前 .NET SDK 不支持將 .NET 8.0 設置為目標。請將 .NET 5.0 或更低版本設置為目標,或使用支持

C# 項目中的目標框架無法修改并且顯示為空 嚴重性 代碼 說明 項目 文件 行 禁止顯示狀態 錯誤 NETSDK1045 當前 .NET SDK 不支持將 .NET 8.0 設置為目標。請將 .NET 5.0 或更低版本設置為目標&#xff0c;或使用支持 .NET 8.0 的 .NET SDK 版本。 Padim C:\Program …

MNIST 數據集mnist.npz詳解

MNIST 數據集是機器學習領域最著名的數據集之一&#xff0c;全稱為"Modified National Institute of Standards and Technology"數據庫。它包含了大量手寫數字的圖像&#xff0c;是入門機器學習和深度學習的經典數據集。1. MNIST 數據集概述 60,000 張訓練圖像 10,00…

深入理解HTTPS:從概念到實戰優化

深入理解HTTPS&#xff1a;從概念到實戰優化一&#xff1a;概述二&#xff1a;工作流程三&#xff1a;創建自簽名證書四&#xff1a;案例1&#xff09;案例一&#xff1a;HTTPS 搭建2&#xff09;案例二&#xff1a;HTTP/2 搭建3&#xff09;案例三&#xff1a;HTTP 重定向 HTT…

MySQL數據備份與恢復全攻略

一、數據備份與恢復按照備份方式分類&#xff1a;物理備份&#xff0c;直接復制數據庫的物理文件&#xff0c;可以直接拷貝和恢復&#xff1b;邏輯備份&#xff0c;通過SQL語句導出數據庫結構和數據&#xff0c;可用于不同版本和不同類型的MySQL數據庫之間的數據遷移。按照數據…

單機多卡間大張量傳輸迷惑行為?

老鐵們我最近真的好慘&#x1f62d;&#xff0c;一個大模型在單機多卡上運行就是出錯&#xff0c;debug看的老眼昏花&#xff0c;最后發現大張量在設備間直接傳輸會有很發癲的行為&#xff0c;還請大家幫我看看&#x1f647;?摒棄屎山一樣的代碼&#xff0c;簡單運行下列腳本i…

無法將“pnpm”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正確,然后再試一次。

1 問題描述今天使用pnpm安裝如下報錯&#xff1a;pnpm : 無法將“pnpm”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫&#xff0c;如果包括路徑&#xff0c;請確保路徑正確&#xff0c;然后再試一次。 所在位置 行:1 字符: 1pnpm install~~~~ Categor…

內核編譯 day61

二&#xff1a;內核啟動 一&#xff1a;流程 sudo vim /etc/network/interfaces sudo chmod 0666 /etc/default/tft...... //修改可讀uboot命令&#xff1a; help/&#xff1f; &#xff1a; 幫助手冊&#xff0c;列出uboot支持的所有命令 printenv/print 打印環境變量 sete…

【YOLOv5部署至RK3588】模型訓練→轉換RKNN→開發板部署

已在GitHub開源與本博客同步的YOLOv5_RK3588_object_detect項目&#xff0c;地址&#xff1a;https://github.com/A7bert777/YOLOv5_RK3588_object_detect/tree/main 詳細使用教程&#xff0c;可參考README.md或參考本博客第六章 模型部署 文章目錄一、項目回顧二、模型選擇介紹…

Telematics Control Unit(TCU)的系統化梳理

1、Telematics Control Unit (TCU)概述 TCU中文名為遠程信息處理控制單元&#xff0c;很多場合都稱為Telematics Box&#xff0c;又叫TBox&#xff0c;顧名思義&#xff0c;一般都為一個獨立的盒子&#xff08;如圖2、圖3所示&#xff09;&#xff0c;負責和云端的遠程信息交互…

Appium學習筆記

adb構成client端&#xff0c;在電腦上&#xff0c;負責發送adb命令daemon守護進程&#xff0c;在手機上&#xff0c;負責接收和執行adb命令server端&#xff0c;在電腦上&#xff0c;負責管理client和daemon之間的通信![[Pasted image 20250825201322.png]]包名&#xff0c;對應…

棧指針(Stack Pointer)是什么?

棧指針(Stack Pointer)是什么? 首先,用一個簡單易懂的方式解釋棧指針(Stack Pointer)。 核心比喻:摞起來的書 想象有一摞書整齊地堆在桌面上: 這摞書就是“棧”(Stack),它是一種后進先出(LIFO) 的數據結構。你只能從最頂部拿走一本書(“彈出”),或者把一本新…

數據結構:紅黑樹(Red-Black Tree)

目錄 從AVL樹的“煩惱”說起 如何用“顏色”來定義“大致平衡”&#xff1f;—— 紅黑樹的五個規則 五個規則如何保證“大致平衡”&#xff1f; 用 C/C 代碼定義紅黑樹的結構 定義顏色和節點結構 定義樹的結構和哨兵節點 從AVL樹的“煩惱”說起 我們從已經了解的 AVL 樹出…