iT邦幫忙

2024 iThome 鐵人賽

DAY 22
1
生成式 AI

懶人救星:生成式AI 系列 第 22

Day22-LlamaIndex 黑科技圖解:讓你在無 SQL 技能下秒變查詢達人!

  • 分享至 

  • xImage
  •  

前言✨

先前我們介紹了文檔檢索、查詢和聊天等功能。現今隨著企業數據量的激增,企業和組織越來越依賴數據來做出決策。然而許多用戶並不具備 SQL 編寫能力,因此 Text-to-SQL 的技術變的日益重要。LlamaIndex 也提供了 Text-to-SQL 的模組方便用戶快速部屬,透過文字檢索、查詢企業資料庫。

【Text-To-SQL📝】

Text-to-sql 具備了以下優勢:

  • 降低技術門檻⬇️:
    Text-to-SQL 技術使得非技術用戶能夠通過自然語言進行數據查詢,打破了與結構化數據之間的壁壘。用戶不需要具備SQL知識,就能有效地從數據庫中提取所需資訊。
  • 提高開發效率⚡:
    開發人員可以利用 Text-to-SQL 技術快速生成SQL查詢,從而節省學習和編寫複雜 SQL 語句的時間。這對於需要頻繁查詢數據的場景尤為重要,因為它能顯著提高工作效率.
  • 靈活性和擴展性🔄:
    LLM 在理解自然語言方面的強大能力使其能夠處理各種複雜的查詢需求。通過精心設計的 Prompt 和上下文資訊,這些模型可以生成準確的 SQL 查詢,滿足多樣化的業務需求.
  • 增強用戶體驗🌟:
    用戶可以通過自然語言獲得即時反饋,這改善了數據查詢的整體體驗。系統能夠迅速理解用戶意圖並轉化為可執行的SQL,從而提升了用戶滿意度.

接著我們將手把手教你如何快速透過 LlamaIndex 實現 Text-to-SQL ,就跟著我們一起看下去吧!

  1. 首先我們必須先建立 DataBase ,可以透過 Docker 快速鍵立一個 MYSQL DB

  2. 有了 DB 我們需要一個實驗的資料,大家可以選擇自己喜歡的資料或可以使用原本已有的資料庫內容。(以下資料來至政府資料開放平台)。
    https://ithelp.ithome.com.tw/upload/images/20240920/20168117X8KfWIrNY3.png

  3. 確認 DataBase 和 Data 都準備就緒後,我們就開始準備 LlamaIndex 的相關依賴。

    pip install llama-index
    pip install llama-index-llms-openai
    pip install pymysql
    
  4. 執行以下程式碼:

    import os
    os.environ["OPENAI_API_KEY"] = "YOUR-API-KEY"
    
    import llama_index.core
    llama_index.core.set_global_handler("simple")
    from sqlalchemy import create_engine
    from llama_index.core import SQLDatabase
    from llama_index.core.query_engine import NLSQLTableQueryEngine
    
    # Connect to Data Base
    # LIKE create_engine("mysql+pymysql://ithom:12345@127.0.0.1:3306/ithome_db)
    engine = create_engine("mysql+pymysql://USER:PASSWORD@HOST:PORT/DB)
    
    # Create QueryEngine: Stock → 你的表名稱
    sql_database = SQLDatabase(engine, include_tables=['Stock'])
    query_engine = NLSQLTableQueryEngine(
        sql_database=sql_database, tables=["Stock"]
    )
    
    # Query
    query_str = "成交量最高的10支股票"
    response = query_engine.query(query_str)
    
    # Result
    print(response.source_nodes[0].metadata['sql_query'])
    """
    Out[1]:SELECT 證券代號, 證券名稱, 成交股數
    FROM Stock
    ORDER BY 成交股數 DESC
    LIMIT 10;
    """
    
    print(response.source_nodes[0].metadata['result'])
    # Out[2]:[('00632R', '元大台灣50反1', 232220000), ('00680L', '元大美債20正2', 103366000), ('00715L', '期街口布蘭特正2', 88539000), ('00665L', '富邦恒生國企正2', 75017000), ('00637L', '元大滬深300正2', 66850000), ('00688L', '國泰20年美債正2', 56320000), ('00650L', '復華香港正2', 32874000), ('1314', '中石化', 24754000), ('00753L', '中信中國50正2', 24549000), ('712', '復華富時不動產', 23230000)]
    
    
    print(response.response)
    # Out[3]:成交量最高的10支股票分別是元大台灣50反1、元大美債20正2、期街口布蘭特正2、富邦恒生國企正2、元大滬深300正2、國泰20年美債正2、復華香港正2、中石化、中信中國50正2和復華富時不動產。其中,成交股數最高的是元大台灣50反1,達到232220000股。
    

    如果有開啟llama_index.core.set_global_handler("simple")能觀察 LlamaIndex 已經將複雜的流程簡化成簡單的幾行程式碼,完整流程如下圖:
    https://ithelp.ithome.com.tw/upload/images/20240920/20168117D5kC8hiUGW.png

  5. 當然如果你想單純執行 Retrivel 功能 LlamaIndex 也提供了 NLSQLRetriever 模組,能更幫助用戶快速崁入自己的系統之中。另外也可以透過 llm、text_to_sql_prompt等參數去做更詳細的控制。

結論🎯

LlamaIndex 提供了一個強大的工具集,讓非技術背景的用戶也能輕鬆進行數據查詢,並將 Text-to-SQL 技術變得更加實用。透過簡單的幾行程式碼,開發者可以快速部署並運用自然語言來生成精確的 SQL 查詢,無需深入學習複雜的 SQL 語法。此外,LlamaIndex 的靈活性和擴展性,結合強大的 LLM 能力,使得查詢過程更加智能化並且能夠滿足各類業務需求。無論是對於開發者還是非技術用戶,這都大幅提升了數據檢索的效率與用戶體驗。

這樣的解決方案,讓企業在面對龐大的數據量時,能更快、更準確地獲取關鍵數據,並用於支援決策。隨著 LLM 技術的持續發展,未來我們可以預見這類工具在各行各業的應用將更加廣泛。


上一篇
Day21-揭秘 LlamaIndex:用圖解帶你搞懂複雜查詢與對話引擎!
下一篇
Day23-Text to SQL 的改進方法: DIN-SQL 心得
系列文
懶人救星:生成式AI 26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言