從RAG到TAG:探索表增強生成(TAG)的力量 原創(chuàng) 精華
01、概述
在人工智能(AI)不斷發(fā)展的時代,數(shù)據(jù)的交互與利用方式也隨之演變。在AI驅動的數(shù)據(jù)檢索領域,出現(xiàn)了兩種重要的方法:檢索增強生成(RAG)和最近嶄露頭角的表增強生成(TAG)。盡管RAG通過將AI與外部數(shù)據(jù)檢索系統(tǒng)結合,實現(xiàn)了有效的信息獲取,但TAG則通過使大型語言模型(LLM)能夠直接與結構化數(shù)據(jù)庫交互,提供了一種全新的范式。
在這篇文章中,我們將深入探討TAG,分析其如何超越RAG,并介紹由TAG-Research開發(fā)的強大LOTUS庫,提供一些使用LOTUS的理論代碼示例。同時,我們還將探討TAG在各個行業(yè)(包括金融)中的實際應用,展現(xiàn)其變革潛力。
02、理解RAG與TAG
什么是檢索增強生成(RAG)?
檢索增強生成(RAG)將檢索系統(tǒng)與LLM相結合。它使用基于向量的嵌入方法搜索和檢索相關文檔,然后利用這些文檔增強LLM的回答。這種方法在LLM需要訪問訓練數(shù)據(jù)之外的最新信息時特別有效。
RAG的工作原理:
- 查詢編碼:用戶的自然語言查詢被轉換為向量表示。
- 文檔檢索:系統(tǒng)在文檔數(shù)據(jù)庫中搜索與查詢向量最相似的文檔。
- 響應生成:LLM使用檢索到的文檔和自身知識庫生成回答。
應用案例:
- 客戶支持系統(tǒng)獲取相關政策更新。
- 聊天機器人提供基于最新新聞文章的信息。
什么是表增強生成(TAG)?
表增強生成(TAG)提供了一種更直接和結構化的方法,允許LLM使用SQL或其他數(shù)據(jù)庫特定查詢語言查詢數(shù)據(jù)庫。TAG讓LLM能夠:
- 直接訪問結構化數(shù)據(jù):從關系數(shù)據(jù)庫中檢索精確的數(shù)據(jù)點。
- 處理復雜查詢:管理涉及聚合、排序和多字段操作的查詢。
- 綜合有意義的響應:根據(jù)精確數(shù)據(jù)生成詳細答案。
TAG的工作原理:
- 查詢合成:LLM解釋用戶的自然語言查詢并將其轉換為SQL命令。
- 查詢執(zhí)行:SQL查詢在數(shù)據(jù)庫上執(zhí)行,以檢索精確數(shù)據(jù)。
- 答案生成:LLM根據(jù)查詢結果生成自然語言響應。
TAG的優(yōu)勢:
- 精準性:直接訪問結構化數(shù)據(jù)確保更高的準確性。
- 復雜性:能夠處理涉及多種操作的多面查詢。
- 效率:通過消除嵌入的需求,減少計算開銷。
03、為什么TAG優(yōu)于RAG?
1. 直接訪問結構化數(shù)據(jù)帶來更高的精準度
RAG通過向量嵌入近似數(shù)據(jù)檢索,這可能導致結果不夠精確,尤其在處理細微查詢時。相比之下,TAG直接訪問結構化數(shù)據(jù)庫,允許其檢索精確的數(shù)據(jù)點。
示例:
- RAG:搜索“被認為是經典的高票房浪漫影片”可能會檢索提到這些影片的文檔,但未必提供準確的排名。
- TAG:執(zhí)行SQL查詢直接從數(shù)據(jù)庫過濾和排名影片,確保結果準確且量身定制。
2. 處理復雜、多面查詢
TAG在管理涉及多個字段和操作(如排序、過濾和聚合)的復雜查詢方面表現(xiàn)優(yōu)異,而RAG由于依賴相似度檢索在這方面有所欠缺。
示例:
- 金融分析:生成季度增長排名前幾的股票清單需要聚合和排序數(shù)據(jù),而TAG能夠輕松處理這些任務。
- 醫(yī)療研究:確定不同人群的某項手術的平均恢復時間涉及復雜的數(shù)據(jù)處理,更適合使用TAG。
3. 降低對嵌入的依賴
像RAG這樣的基于嵌入的檢索系統(tǒng)在處理大型數(shù)據(jù)集時可能資源密集,而TAG通過使用SQL查詢直接訪問數(shù)據(jù),降低計算成本,提高速度。
優(yōu)勢:
- 效率:更快的數(shù)據(jù)檢索,在實時環(huán)境中至關重要。
- 可擴展性:在處理大型數(shù)據(jù)集時表現(xiàn)更佳。
04、引入LOTUS:增強TAG的能力
由TAG-Research開發(fā)的LOTUS庫是一個強大的語義查詢引擎,旨在擴展TAG的能力。它提供了一個靈活且聲明式的編程模型,能夠使LLM無縫交互結構化和非結構化數(shù)據(jù)。
LOTUS的關鍵特性
- 語義操作符:針對表格數(shù)據(jù)的自然語言處理專用函數(shù)。
- sem_filter:根據(jù)自然語言條件過濾行。
- sem_join:使用基于語言的標準連接表。
- 類似Pandas的API:提供與Pandas相似的接口,方便熟悉Python的數(shù)據(jù)科學家和工程師使用。
- 與LLM集成:與包括OpenAI在內的各種LLM配置,利用AI進行自然語言解釋和數(shù)據(jù)處理。
優(yōu)勢:
- 簡化需要對數(shù)據(jù)進行復雜推理的AI驅動應用的開發(fā)。
- 增強TAG在傳統(tǒng)SQL能力之外處理復雜數(shù)據(jù)查詢的實用性。
05、使用Azure OpenAI SDK和LOTUS實現(xiàn)TAG:實踐示例
為了說明TAG的實現(xiàn),我們將提供使用Azure OpenAI SDK和LOTUS庫的代碼示例。
前提條件
- Azure賬戶:訪問Azure OpenAI服務。
- Python環(huán)境:Python 3.6或更高版本。
- 數(shù)據(jù)庫設置:訪問關系數(shù)據(jù)庫(例如,SQL Server、PostgreSQL)。
安裝所需庫
pip install azure-ai-openai lotus-nlp pyodbc pandas
設置環(huán)境
# Azure OpenAI SDK
from azure.identity import DefaultAzureCredential
from azure.ai.openai import OpenAIClient
# LOTUS Library
import lotus
# Database Libraries
import pyodbc
import pandas as pd
# Set up Azure OpenAI Client
endpoint = "https://your-openai-resource.openai.azure.com/"
credential = DefaultAzureCredential()
openai_client = OpenAIClient(endpoint=endpoint, credential=credential)
# Set up LOTUS with OpenAI LLM
llm = lotus.OpenAI(azure_openai_client=openai_client)
# Database Connection
conn = pyodbc.connect(
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=your_server;DATABASE=your_database;UID=your_username;PWD=your_password'
)```
將數(shù)據(jù)加載到LOTUS
假設我們有一個電影表:
# Load data into a Pandas DataFrame
movies_df = pd.read_sql_query("SELECT * FROM movies", conn)
# Create a LOTUS table
movies_table = lotus.Table.from_dataframe(movies_df, name="movies", llm=llm)```
示例1:尋找高票房浪漫經典
自然語言查詢:
“列出票房最高的前5部被認為是經典的浪漫影片?!?/p>
使用LOTUS:
# Apply semantic filter
filtered_movies = movies_table.sem_filter("genre is romance and is considered a classic")
# Sort and select top 5
top_movies = filtered_movies.sort_values(by="box_office", ascending=False).head(5)
print(top_movies[['title', 'box_office']])
解釋:
- sem_filter:利用LLM解釋自然語言條件。
- 排序和選擇:標準的Pandas操作。
示例2:復雜的金融查詢
讓我們在金融背景下展示TAG的一個示例用例。
自然語言查詢:
“識別上個季度收入增長超過20%且市盈率低于15的科技公司?!?/p>
實現(xiàn):
# Load financial data
stocks_df = pd.read_sql_query("SELECT * FROM stocks", conn)
stocks_table = lotus.Table.from_dataframe(stocks_df, name="stocks", llm=llm)
# Apply semantic filter
filtered_stocks = stocks_table.sem_filter(
"sector is technology and revenue growth last quarter above 20% and P/E ratio below 15"
)
print(filtered_stocks[['company_name', 'revenue_growth', 'pe_ratio']])
解釋:
- 直接交互:TAG借助LOTUS允許直接查詢復雜條件。
- 不需要復雜的SQL:自然語言條件就足夠了。
06、TAG的實際應用
1. 醫(yī)療和醫(yī)學研究
用例:
查詢:“找出50-60歲患者在X手術后的平均恢復時間?!?/p>
TAG優(yōu)勢:直接查詢各個維度的患者數(shù)據(jù),確保分析準確和相關。
實現(xiàn):
# Assuming patient_data_table is a LOTUS table
filtered_patients = patient_data_table.sem_filter(
"age between 50 and 60 and underwent Procedure X"
)
average_recovery = filtered_patients['recovery_time'].mean()
print(f"Average Recovery Time: {average_recovery} days")
2. 客戶支持
用例:
查詢:“找出客戶投訴的主要問題。”
TAG優(yōu)勢:通過分析客戶支持表,識別投訴模式。
實現(xiàn):
# Assuming customers_table is a LOTUS table
high_value_customers = customers_table.sem_filter(
"purchases over $1,000 last month and high engagement"
)
print(high_value_customers[['customer_id', 'total_purchases', 'engagement_score']])
07、結語
表增強生成(TAG)正快速成為AI驅動數(shù)據(jù)檢索的新標準,通過直接與結構化數(shù)據(jù)交互,提升了準確性和處理復雜查詢的能力。通過LOTUS庫的引入,TAG進一步擴展了其潛力,使開發(fā)人員能夠構建高效的、基于數(shù)據(jù)的應用程序,滿足不斷增長的行業(yè)需求。
隨著企業(yè)在利用數(shù)據(jù)獲取競爭優(yōu)勢的過程中,TAG的實施將不僅限于提升用戶體驗,更將成為推動行業(yè)創(chuàng)新的核心驅動力。在金融、醫(yī)療和客戶支持等領域,TAG的實際應用展現(xiàn)了其變革性的潛力,未來將為更多行業(yè)的數(shù)字化轉型鋪平道路。
參考:
本文轉載自公眾號Halo咯咯 作者:基咯咯
