利用LangGraph和Waii實現你的chat2db!

公众号-JavaEdge發表於2024-10-16

0 前言

在資料分析領域快速發展的今天,透過自然語言與資料互動的能力變得越來越有價值。對話式分析旨在使複雜資料結構對沒有專業技能的使用者更易於訪問。

LangGraph 是個框架,用於構建使用語言模型的狀態化、多代理應用程式。Waii 提供文字到 SQL 和文字到圖表的功能,使使用者能夠透過自然語言與資料庫和資料視覺化進行互動。

本文探討 Waii 的能力如何增強 LangGraph 應用程式在對話式分析方面的應用。重點關注 Waii 處理資料庫中複雜連線的方法,這是從自然語言查詢生成準確 SQL 的一個關鍵方面。

1 Waii 的文字到 SQL 能力

對話式分析的核心是將自然語言轉換為資料庫操作的能力。Waii 提供了一個全面的文字到 SQL 解決方案,在幾個關鍵領域很優秀:

  • 高精度的複雜模式連線
  • 適用於大型資料庫的可擴充套件表選擇
  • 定製編譯器,用於語法正確性和查詢最佳化
  • 專門針對過濾器、排序順序、常見指標等的代理流程

下一節深入探討 Waii 如何處理複雜連線。關注這點,因為它是對話式分析的基本能力,許多當今的解決方案都在努力應對。我們將檢查一個示例,看看連線是如何構建的,並解釋如何輕鬆地將 Waii 整合到你現有的 LangGraph 應用程式中以實現這些收益。

2 深入研究:連線處理

示例

想象一下,一個流媒體平臺的資料團隊被指派建立一個全面的導演表現儀表板。他們需要透過結合來自電影、電視劇、型別、關鍵詞、獎項和演員合作的資料來分析什麼使導演成功。

指令

建立一個檢視,為排名前 5 的導演(按標題數量最高)提供以下資訊:

  • 導演的名字
  • 總標題數量
  • 最頻繁的型別
  • 最頻繁的關鍵詞
  • 獲得的獎項數量
  • 電影總收入
  • 他們合作過的演員名單

查詢

Waii 根據這些指令生成的完整查詢可以在附錄 A 中找到。這裡有一個片段,顯示了一些連線:

...
FROM ranked_directors AS rd
INNER JOIN movie_db.movies_and_tv.people AS p
    ON rd.people_id = p.people_id
LEFT JOIN combined_director_genres AS cdg
    ON rd.people_id = cdg.people_id AND cdg.genre_rank = 1
LEFT JOIN combined_director_keywords AS cdk
    ON rd.people_id = cdk.people_id AND cdk.keyword_rank = 1
LEFT JOIN director_awards AS da
    ON rd.people_id = da.people_id
LEFT JOIN director_revenue AS dr
    ON rd.people_id = dr.people_id
LEFT JOIN director_actors AS d_actors
    ON rd.people_id = d_actors.people_id
...

查詢分析

此查詢展示了許多複雜的連線能力:

  1. 複雜連線圖: 查詢中使用了 14 個具有不同限定符、元數和語義的表。
  2. 橋接表連線: 用於連線多對多關係中的實體(例如,導演與電影、電視劇和演員)。
  3. 維度表連線: 用於透過型別和關鍵詞表中的描述性資訊豐富資料。
  4. 複雜連線鏈: 實現連線遙遠的實體,例如透過他們的合作將導演與演員聯絡起來。
  5. 全外連線: 用於結合導演在電影和電視劇中的工作,確保全面覆蓋。
  6. 左連線用於可選資料: 當包括可能不是所有導演都存在的資料時應用(例如,獎項、收入)。

(這個列表不是窮盡的,還有許多其他考慮因素用於準確的連線處理,例如:on 和 where 子句之間的區別,連線順序,非等連線,用於半結構化資料的橫向連線等)

Waii 理解資料庫關係的方法是關鍵。以下是它的工作原理:

3 知識圖構建

Waii 自動構建資料庫物件的全面知識圖。這個圖包含來自多個來源的資訊:

  • 模式資訊
  • 約束(例如,主鍵/外來鍵)
  • 基於分析列名和資料模式的預測
  • 從查詢歷史中提取和排名的連線圖
  • 資料庫文件
  • 資料目錄中定義的關係
  • 隨著時間的推移從系統使用中獲得的反饋

這個圖不斷更新和完善。每次模式更改、新查詢和新的反饋都被分析並整合到圖中。

4 用於查詢構建的代理流程

有了知識圖,Waii 採用一系列代理流程來構建最優查詢:

1. 表選擇: 分析使用者的請求以確定最相關的表。常見的連線關係和對關係語義的理解用於找到可能不直接語義連結到使用者輸入的表和路徑。

2. 連線圖分析: 提議和評估選定表之間的潛在連線路徑。這包括評分連線圖與之前看到的連線和關係語義理解的對齊程度。

3. 評估/細化連線條件: 單獨檢查以確保外連線和連線條件正確應用。這也是我們檢視外連線的“on”與“where”子句條件的地方。

4. 查詢構建: 根據選擇的連線圖和條件構建 SQL 查詢。

5. 編譯和最佳化: 確保連線在語法上正確並針對效能進行最佳化。我們還執行使用者對查詢的操作約束(例如,最大輸出行數,最大輸入分割槽)。

結果是,SQL 查詢不僅準確回答了使用者的問題,而且以最佳化的方式針對特定的資料庫結構和查詢引擎。

5 構建對話式分析應用程式

現在我們已經瞭解了 Waii 如何處理連線和文字到 SQL,讓我們探討如何將這種能力與 LangGraph 結合起來構建複雜的對話式分析應用程式。

LangGraph 是構建代理系統的事實上的框架。對於任何需要精確、周到的資料庫訪問的 LangGraph 應用程式,Waii 是一個很好的補充。將 Waii 與 LangGraph 整合允許開發人員建立在保持互動上下文的同時執行復雜查詢的系統,提高了應用程式的整體智慧。

6 實現細節

實施此係統涉及幾個關鍵元件:

1. LangGraph 框架: 提供多代理系統的總體結構,管理狀態和代理互動。

2. Waii API 整合: SQL 生成和視覺化代理將呼叫 Waii 的 API 以利用其文字到 SQL 和文字到圖表的能力。

3. 自然語言處理: 用於理解使用者輸入和生成易於理解的響應。

4. Waii 執行 API: 執行生成的 SQL 查詢對實際資料庫進行操作。注入程式碼以執行使用者級別的安全策略,例如限制行/列訪問。

5. 狀態管理: 維護多個使用者互動之間的上下文,允許後續問題和迭代分析。

典型的互動流程可能如下所示:

  1. 使用者輸入一個問題。
  2. LangGraph 問題分類器決定請求最好從記憶體還是資料庫中回答
  3. [可選] Waii SQL 生成器建立一個最佳化的 SQL 查詢。
  4. [可選] Waii SQL 執行器注入安全約束,執行查詢並檢索結果。
  5. [可選] 結果分類器決定輸出應該是資料還是視覺化。
  6. [可選] Waii 圖表生成器根據資料和後設資料建立相關圖表。
  7. LangGraph 洞察生成代理綜合最終結果供使用者使用
  8. 迴圈重複。

(可選 / 影像中未顯示:在錯誤或異常情況下,LangGraph 迴圈,重寫輸入並重新生成所需的物件。)

在此過程中,對話管理代理維護狀態,允許上下文後續問題和更自然、流暢的互動。

示例的完整實現在附錄 B 中給出。

7 好處和用例

LangGraph 和 Waii 的這種整合用於資料庫訪問提供了幾個關鍵好處:

  1. 可訪問性: 透過自然語言互動,複雜的資料分析變得對非技術使用者可訪問。
  2. 分析深度: 系統可以處理手動制定具有挑戰性的複雜查詢。
  3. 上下文理解: 維護的狀態允許更自然、上下文感知的關於資料的對話。
  4. 視覺洞察: 自動生成的相關視覺化增強了對資料的理解。
  5. 可擴充套件性: 系統可以適應大型、複雜的資料庫,而不會成比例地增加終端使用者的複雜性。

潛在的用例涵蓋各個行業:

  • 商業智慧: 執行人員可以在不學習 SQL 或 BI 工具的情況下查詢複雜的業務資料。
  • 醫療保健: 研究人員可以探索大型醫療資料庫,關聯患者結果中的不同因素。
  • 金融: 分析人員可以快速調查市場趨勢和公司績效的多個維度。
  • 電子商務: 營銷團隊可以分析客戶行為模式以指導策略。
  • 教育: 管理員可以洞察學生表現和資源分配。

8 結論

LangGraph 的多代理能力和 Waii 的高階文字到 SQL 和視覺化功能的結合為分析和資料處理開闢了新的機會。透過使複雜的資料分析透過自然語言變得可訪問,這種方法大大降低了從資料中獲得高質量洞察的障礙。

關注我,緊跟本系列專欄文章,咱們下篇再續!

作者簡介:魔都架構師,多家大廠後端一線研發經驗,在分散式系統設計、資料平臺架構和AI應用開發等領域都有豐富實踐經驗。

各大技術社群頭部專家博主。具有豐富的引領團隊經驗,深厚業務架構和解決方案的積累。

負責:

  • 中央/分銷預訂系統效能最佳化
  • 活動&券等營銷中臺建設
  • 交易平臺及資料中臺等架構和開發設計
  • 車聯網核心平臺-物聯網連線平臺、大資料平臺架構設計及最佳化
  • LLM Agent應用開發
  • 區塊鏈應用開發
  • 大資料開發挖掘經驗
  • 推薦系統專案

目前主攻市級軟體專案設計、構建服務全社會的應用系統。

參考:

  • 程式設計嚴選網

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章