Tương tác với cơ sở dữ liệu thường đòi hỏi trình độ chuyên môn kỹ thuật có thể khiến dữ liệu nằm ngoài tầm với của nhiều người. Hãy xem xét một giám đốc tài chính cần hiểu các con số và xu hướng tài chính của công ty. Theo truyền thống, giám đốc này sẽ phải dựa vào các nhà phân tích SQL để trích xuất dữ liệu cần thiết từ cơ sở dữ liệu. Sự phụ thuộc này có thể gây ra sự chậm trễ và khoảng cách giao tiếp, đặc biệt là nếu giám đốc cần tinh chỉnh các truy vấn của họ nhiều lần để có được thông tin chi tiết mong muốn.
Nhưng text2SQL, một khả năng chuyển đổi ngôn ngữ tự nhiên thành các câu lệnh ngôn ngữ truy vấn có cấu trúc, đã thay đổi trò chơi. Với text2SQL, giám đốc tài chính có thể tương tác trực tiếp với cơ sở dữ liệu bằng ngôn ngữ tự nhiên. Ví dụ, người dùng có thể nhập một câu hỏi liên quan đến doanh nghiệp như "Giá trị đơn hàng trung bình của mỗi khách hàng trong tháng trước là bao nhiêu?"
Công cụ AI Text-to-SQL sẽ xử lý câu hỏi và tạo truy vấn SQL tương ứng:
Select customer_id, AVG(order_value) AS average_order_value FROM orders WHERE order_date >= DATE_SUB(CURRDATE(), INTERVAL 1 MONTH) GROUP BY customer_id;
Sau đó thực thi nó trên cơ sở dữ liệu và hiển thị kết quả cho người dùng.
Trong bài viết này, chúng tôi sẽ giải thích vai trò của LLM trong text2SQL, thảo luận về những thách thức vốn có trong khả năng này và khám phá SherloQ, một công cụ text2SQL có độ chính xác cao và mạnh mẽ do nhóm Skypoint phát triển.
Khả năng chuyển đổi text2SQL đã được cải thiện đáng kể với sự trợ giúp của các mô hình ngôn ngữ lớn (LLM). Các mô hình này sử dụng lượng lớn dữ liệu và kiến trúc mạng nơ-ron mạnh mẽ để hiểu và tạo ra văn bản giống con người. Bằng cách đào tạo trên các tập dữ liệu đa dạng, LLM có thể khái quát hóa trên nhiều tác vụ khác nhau, bao gồm cả việc dịch ngôn ngữ tự nhiên thành các truy vấn SQL.
Ví dụ, bài báo " Mô hình ngôn ngữ là người học ít lần " chứng minh cách LLM có thể thực hiện các nhiệm vụ với các ví dụ tối thiểu, làm nổi bật khả năng thích ứng với các nhiệm vụ mới với dữ liệu hạn chế. Cách tiếp cận này làm giảm đáng kể nhu cầu về dữ liệu cụ thể cho nhiệm vụ, giúp triển khai LLM trong nhiều ứng dụng khác nhau dễ dàng hơn.
" Spider: A Large-Scale Human-Labeled Dataset for Complex and Cross-Domain Semantic Parsing and Text-to-SQL Task " cung cấp một tập dữ liệu toàn diện để đào tạo và đánh giá các mô hình trên các truy vấn SQL phức tạp trên các miền khác nhau. Tập dữ liệu này đóng vai trò then chốt trong việc thúc đẩy trạng thái hiện đại trong text2SQL bằng cách cung cấp một chuẩn mực mạnh mẽ cho hiệu suất mô hình.
Ngoài ra, " PALM: Mô hình hóa ngôn ngữ mở rộng với các lộ trình " khám phá cách các kỹ thuật đào tạo tiên tiến, chẳng hạn như mở rộng quy mô mô hình và tối ưu hóa các lộ trình đào tạo, có thể nâng cao hiệu suất mô hình trong nhiều ứng dụng khác nhau, bao gồm text2SQL.
Mặc dù các LLM này có hiệu quả cao trong môi trường được kiểm soát, nhưng chúng thường gặp phải những thách thức trong cài đặt sản xuất. Những thách thức này bao gồm xử lý các lời nhắc mơ hồ, quản lý các lược đồ cơ sở dữ liệu phức tạp và đảm bảo hiệu suất theo thời gian thực. Ngoài ra, việc tích hợp các mô hình này vào các hệ thống hiện có đòi hỏi nỗ lực đáng kể và bảo trì liên tục để thích ứng với dữ liệu thay đổi và yêu cầu của người dùng. Sau đây là ba LLM hoạt động tốt cho nhiệm vụ này:
Mục đích chính của SQLcoder là chuyển đổi đầu vào ngôn ngữ tự nhiên thành các truy vấn SQL. Không giống như các mô hình mục đích chung khác, SQLCoder đã được tinh chỉnh trên dữ liệu cụ thể cho SQL, do đó, nó đặc biệt hiệu quả trong việc hiểu và tạo các truy vấn SQL. SQLCoder chứng minh hiệu suất đáng chú ý trên tập dữ liệu Spider, một chuẩn mực phức tạp và đa miền cho các hệ thống text2SQL.
SQLCoder tạo ra truy vấn SQL chính xác cho các lược đồ mới không thấy trong quá trình đào tạo với độ chính xác là 64,6% . Nó vượt trội hơn GPT-3.5-turbo và text-davinci-003, là những mô hình có kích thước lớn hơn 10 lần. Điều này làm nổi bật khả năng xử lý các truy vấn SQL đa dạng và phức tạp của SQLCoder, điều này rất quan trọng đối với môi trường sản xuất.
GPT-3.5 và GPT-4 (Generative Pre-trained Transformer) là một số mô hình ngôn ngữ đa năng tiên tiến và hiệu quả nhất. Cả hai mô hình đều xuất sắc trong việc học ít lần, nhanh chóng thích ứng với các tác vụ mới với các ví dụ tối thiểu, lý tưởng để tạo các truy vấn SQL từ đầu vào hạn chế.
Ví dụ, khi đánh giá trên tập dữ liệu Spider, GPT-3.5-turbo có tỷ lệ truy vấn SQL được tạo chính xác trên các lược đồ mới không thấy trong quá trình đào tạo là 60,6%, trong khi GPT-4 đạt 74,3%.
Các mô hình này thể hiện hiệu suất mạnh mẽ, đặc biệt là trong việc hiểu ngữ cảnh và tạo các truy vấn SQL chính xác từ các đầu vào ngôn ngữ tự nhiên phức tạp. Tuy nhiên, thiết kế mục đích chung của chúng đôi khi đòi hỏi phải tinh chỉnh thêm để có kết quả tối ưu trong các ứng dụng chuyên biệt như tạo SQL.
PaLM (Pathways Language Model) SQL là một mô hình mạnh mẽ khác do Google phát triển. Khả năng và kiến trúc tiên tiến của PaLM SQL giúp nó có hiệu quả cao trong việc dịch ngôn ngữ tự nhiên thành các truy vấn SQL và xử lý các lược đồ cơ sở dữ liệu phức tạp và đa dạng với độ chính xác cao hơn.
Mặc dù có những tiến bộ trong LLM, việc dựa vào một LLM duy nhất cho text2SQL trong sản xuất có thể là vấn đề. Một mô hình duy nhất sẽ không thể xử lý hiệu quả nhiều loại truy vấn, lược đồ cơ sở dữ liệu và yêu cầu về độ trễ thời gian thực của môi trường dữ liệu doanh nghiệp.
Môi trường sản xuất đòi hỏi sự mạnh mẽ, khả năng thích ứng và khả năng xử lý các lời nhắc mơ hồ từ người dùng doanh nghiệp thực tế. Do đó, một công cụ text2SQL phải thể hiện ba thuộc tính để được coi là cấp sản xuất:
Khả năng hiểu các công thức truy vấn đa dạng - Các lời nhắc của người dùng về mặt cú pháp khác nhau có thể được thu gọn thành cùng một truy vấn SQL; một công cụ text2SQL tốt phải có khả năng hiểu được động cơ đằng sau lời nhắc của người dùng, lưu ý đến bối cảnh của mô hình dữ liệu và phải xây dựng truy vấn SQL phù hợp.
Khả năng làm việc với các lược đồ cơ sở dữ liệu và mô hình dữ liệu mơ hồ - Các mô hình dữ liệu sản xuất dễ trở nên hỗn loạn do nhiều nhóm khác nhau trong một tổ chức đóng góp vào các mô hình đó và dữ liệu thay đổi quyền sở hữu nhiều lần trong suốt vòng đời của nó.
Một công cụ text2SQL tốt phải có khả năng phân biệt mô hình dữ liệu cho người dùng và đảm bảo rằng nhiễu và sự mơ hồ không gây ra ảo giác, một đặc điểm của các LLM hiện tại khiến nhiều người dùng nản lòng.
Nó phải đảm bảo rằng hoạt động của engine không làm tăng độ trễ đáng kể khi thực hiện truy vấn - Câu trả lời mà người dùng mong đợi theo thời gian thực phải được trả về theo thời gian thực. Điều này có nghĩa là engine phải xây dựng các truy vấn tối ưu trong tối đa ba lần thử đầu tiên.
SherloQ là công cụ text2SQL của Skypoint, công cụ này dịch các truy vấn từ ngôn ngữ tự nhiên sang SQL. Trong khi tận dụng một (LLM) tùy chỉnh nội bộ để tạo truy vấn là một phần quan trọng trong kiến trúc của công cụ này, hiệu quả của SherloQ đến từ sự kết hợp của các thành phần tiên tiến được thiết kế để nâng cao khả năng truy vấn dữ liệu. SherloQ tự hào có độ chính xác cao trong việc dịch truy vấn, xử lý lỗi mạnh mẽ và tích hợp liền mạch với các hệ thống cơ sở dữ liệu sản xuất, khiến công cụ này phù hợp với các môi trường dữ liệu quy mô lớn.
Trong một vài phần tiếp theo, chúng tôi sẽ đi sâu vào các chi tiết kiến trúc bên trong của SherloQ và chia sẻ một số kết quả mà chúng tôi đã đạt được khi sử dụng nó trong cài đặt sản xuất.
Kiến trúc của SherloQ chứa nhiều thành phần chuyển động, mỗi thành phần hoạt động để cải thiện độ chính xác, độ tin cậy và độ trễ của hệ thống. Sau đây là tổng quan về kiến trúc:
Đầu vào của người dùng - Đầu vào của người dùng là truy vấn ngôn ngữ tự nhiên.
State agent Eeecutor - Việc triển khai giao diện LangChain của chúng tôi theo dõi trạng thái trong suốt quá trình thực thi. Nó tận dụng Redis và DataStax Astra DB để theo dõi trạng thái lý luận và bộ nhớ trong quá trình thực thi. Executor quản lý luồng hoạt động bằng cách phối hợp giữa các mô-đun khác nhau.
Nó đảm bảo rằng dữ liệu đầu vào của người dùng được phân tích cú pháp, xử lý và chuyển tiếp chính xác đến các thành phần tiếp theo, duy trì luồng từ dữ liệu đầu vào đến quá trình tạo truy vấn SQL.
Công cụ trạng thái - Một lớp mở rộng của Công cụ cơ sở Langchain có một biến trạng thái và truyền trạng thái đó cho công cụ tương ứng. Bằng cách duy trì một biến trạng thái, công cụ trạng thái theo dõi dữ liệu cần thiết cần được chuyển tiếp đến các công cụ tương ứng. Điều này đảm bảo tính nhất quán trong luồng dữ liệu, ngăn ngừa bất kỳ mất mát thông tin nào trong quá trình chuyển đổi giữa các tác nhân.
Các công cụ trạng thái của SherloQ :
Để nâng cao hiệu suất của SherloQ, chúng tôi sử dụng một số kỹ thuật và cung cấp cho mô hình các dữ liệu đầu vào quan trọng. Chúng bao gồm phân tích có cấu trúc, ví dụ ít lần, truy xuất ngữ cảnh mô hình dữ liệu, phản ánh và cơ chế thử lại. Mỗi phần đều cần thiết để cải thiện khả năng của mô hình trong việc tạo ra các truy vấn SQL chính xác và có liên quan từ các đầu vào ngôn ngữ tự nhiên.
Trong phân tích có cấu trúc, lời nhắc của người dùng được chia thành các phần cơ bản. Tập trung vào và xác định các thành phần thiết yếu của truy vấn giúp mô hình tạo ra SQL chính xác. Ví dụ:
Đầu vào: Số lượng hiện tại có sẵn cho tất cả các mặt hàng do XYZ Corp cung cấp là bao nhiêu?
Đầu ra: ["số lượng hiện tại có sẵn", "tất cả các mặt hàng", "được cung cấp bởi XYZ Corp"]
Mô hình được cung cấp các câu hỏi tham khảo dưới dạng một vài ví dụ SQL, giúp tạo ra các truy vấn SQL dựa trên các mẫu tương tự. Các ví dụ này cải thiện khả năng tạo chính xác các truy vấn SQL mới của mô hình cho nhiều lời nhắc khác nhau bằng cách giúp mô hình nhận ra cấu trúc và định dạng của các truy vấn dự định. Sau đây là một số ví dụ:
Ví dụ 1
Đầu vào: Hiển thị các mặt hàng có số lượng ít hơn 20 đơn vị.
Đầu ra: SELECT * FROM stock WHERE Quantity_Available < 20;
Ví dụ 2
Đầu vào: Liệt kê các nhà cung cấp có mặt hàng có giá trên 100 đô la.
Đầu ra: CHỌN * TỪ nhà cung cấp NƠI Vendor_ID TRONG (CHỌN Vendor_ID TỪ các mặt hàng NƠI Unit_Price > 100);
Chúng tôi chọn động một vài ví dụ về cảnh quay tương tự nhất bằng cách sử dụng phép so khớp ngữ nghĩa từ Astra DB , là cơ sở dữ liệu vector của chúng tôi. Cơ sở dữ liệu vector cho phép chúng tôi tìm các ví dụ có cấu trúc và nội dung gần nhất với truy vấn đầu vào mới, đảm bảo rằng mô hình có thể tận dụng các mẫu phù hợp nhất để tạo các truy vấn SQL chính xác.
Trong môi trường sản xuất của chúng tôi, trung bình chúng tôi có khoảng hai ví dụ ít cảnh cho mỗi truy vấn. Theo kinh nghiệm của chúng tôi, việc chỉ cần thêm nhiều ví dụ ít cảnh để cải thiện độ chính xác không phải là một hoạt động có thể mở rộng quy mô.
Ngữ cảnh mô hình dữ liệu chứa các chi tiết cụ thể theo miền có thể hữu ích trong việc tạo truy vấn SQL. Ví dụ, trong ngữ cảnh dữ liệu tài chính cho mạng lưới bệnh viện, đây có thể là những thứ như mã số liệu tài chính và mô tả của chúng. Ngữ cảnh này được mô hình sử dụng để đảm bảo rằng các truy vấn SQL được tạo khớp với cấu trúc dữ liệu của miền. Việc đưa ngữ cảnh mô hình dữ liệu vào là tùy chọn và chỉ bắt buộc khi bảng phức tạp và yêu cầu kiến thức về miền để tạo truy vấn SQL.
Ví dụ:
Mã số: "MGMTFEE" -> Mô tả: "Phí thu được để quản lý tài sản – Phí quản lý"
Sơ đồ SQL DB là biểu diễn có cấu trúc của dữ liệu có sẵn. Sơ đồ được làm phong phú bằng cách chú thích cả bảng và các cột của nó. Nó bao gồm tên bảng và mô tả, cùng với các cột, mô tả của chúng và kiểu dữ liệu.
Việc cung cấp lược đồ giúp mô hình hiểu được cấu trúc cơ sở dữ liệu và ý nghĩa liên quan đến từng bảng và cột, đảm bảo rằng các truy vấn SQL được tạo ra có cú pháp chính xác và sử dụng đúng các thành phần cơ sở dữ liệu.
Phản ánh đề cập đến khả năng của mô hình trong việc đánh giá và thẩm định các phản hồi, hành vi hoặc nội dung đã tạo trong quá khứ của chính nó. Nó cho phép mô hình tinh chỉnh các phản hồi của mình bằng cách xác định và sửa lỗi hoặc điểm yếu. Quá trình này bao gồm việc xem xét các truy vấn trước đó mà công cụ Sherloq đã thấy cùng với phản hồi trong giai đoạn tạo truy vấn.
Các kịch bản này giúp mô hình sao chép thành công hoặc tránh thất bại của các câu hỏi tương tự mà nó đã thấy trong quá khứ. Bước này cũng tận dụng Astra DB để tìm các truy vấn ngữ nghĩa tương tự nhất với truy vấn hiện tại.
SherloQ kết hợp cơ chế thử lại bằng cách sử dụng các lỗi nhận được từ cơ sở dữ liệu. Khi truy vấn SQL được tạo ra dẫn đến lỗi, công cụ sử dụng một tác nhân có mẫu được xác định trước để sửa truy vấn:
“””
Nhiệm vụ của bạn là sửa một truy vấn SQL không chính xác được tạo ra từ một câu hỏi để làm cho nó tương thích với ANSI SQL. Thực hiện theo các hướng dẫn sau: Phân tích cẩn thận câu hỏi, lược đồ cơ sở dữ liệu và thông báo lỗi nhận được để đảm bảo câu trả lời chính xác. Sử dụng Biệt danh bảng để tránh nhầm lẫn.
Ví dụ: SELECT t1.col1, t2.col1 FROM table1 AS t1 JOIN table2 AS t2 ON t1.id = t2.id
.
Khi tính khẩu phần, hãy luôn chuyển đổi tử số thành số thực. Sử dụng định dạng bên dưới:
Tạo truy vấn SQL để giải quyết câu hỏi [QUESTION] {user_input}
[/QUESTION] Truy vấn cần chính xác là: {sql_query} Thông báo lỗi nhận được trong lần thực thi cuối cùng là: {error_message}
Dựa trên các dữ liệu đầu vào ở trên, đây là truy vấn SQL đã sửa: {response_sql} “””
Với việc sử dụng LLM tiên tiến và hệ thống được thiết kế tốt, SherloQ tạo ra các truy vấn SQL chính xác hơn và phù hợp hơn với ngữ cảnh. Ở đây, chúng tôi so sánh kết quả của lời nhắc người dùng trước và sau SherloQ bằng cách sử dụng các số liệu về độ trễ và độ chính xác.
Ở đây, chúng ta hãy xem xét một trong những khách hàng sản xuất của chúng tôi, một nhà điều hành nhà ở cao cấp nổi tiếng. Một trong những trường hợp sử dụng của họ là nhóm tài chính của họ sử dụng nền tảng của Skypoint để hiểu và lý giải các số liệu tài chính hợp nhất của các cơ sở nhà ở cao cấp khác nhau của họ.
Lời nhắc của người dùng: "Xác định xu hướng hàng quý của Chi phí dọn dẹp cho bộ phận quản lý cơ sở trong suốt năm 2022."
Trước SherloQ
Truy vấn được tạo
CHỌN TỔNG (Tổng_Số_Tử_Số) / TỔNG (Tổng_Số_Mẫu_Số) LÀ Chi_phí_quản_lý_nhà_cung TỪ skypoint_metric_fact_denormalized_vw NƠI Facility_Name = 'CM' VÀ Năm = 2022 VÀ Metric_Name = 'Chi phí_quản_lý' NHÓM THEO Quý_Số';
Các vấn đề đã xác định
Truy vấn nhóm theo Quarter_Number nhưng không chọn nó, điều này có thể khiến kết quả không đầy đủ.
Sử dụng Metric_Name thay vì một mã định danh cụ thể hơn như Metric_Code.
Phép chia tiềm năng cho số không không được xử lý trong SUM(Total_Amount_Denominator).
Độ trễ trung bình: 29 Giây
Thiết lập trước SherloQ sử dụng kết hợp GPT-3.5 cùng với kỹ thuật nhắc nhở và hơn 5 truy vấn vài lần cho mỗi nhắc nhở của người dùng.
Với SherloQ
CHỌN Năm, Quý_Số, TỔNG(Tổng_Số_Tử_Số) / COALESCE(TỔNG(NULLIF(Tổng_Số_Mẫu_Số, 0)), 1) LÀ Chi_phí_vệ_sinh_nhà TỪ skypoint_metric_fact_denormalized_vwWHERE Metric_Code = 'EXPOTHHOU' VÀ Facility_Name = 'CM' VÀ Năm = 2022 NHÓM THEO Quý_Số, Năm SẮP XẾP THEO Quý_Số TĂNG;
Dựa trên các tiêu chuẩn về khối lượng công việc sản xuất, dưới đây là kết quả mà chúng tôi báo cáo về độ chính xác và độ tin cậy trước và khi sử dụng SherloQ:
Độ chính xác: 65%
Độ tin cậy: 60%
Độ chính xác: 92%
Độ tin cậy: 90%
Các kết quả trên được rút ra từ một bộ chuẩn nội bộ thực hiện mọi lời nhắc 100 lần với các mã định danh riêng biệt để phủ nhận tác động của bộ nhớ đệm (trong các hệ thống nội bộ cũng như các mô hình của chúng tôi). Bộ chuẩn đo độ chính xác bằng cách so sánh phản hồi được trả về với phản hồi chuẩn và độ tin cậy bằng cách đo tần suất trả về các phản hồi tương tự.
So sánh minh họa rõ ràng những lợi thế của SherloQ trong việc chuyển đổi các truy vấn ngôn ngữ tự nhiên thành các truy vấn SQL chính xác. Hiệu suất tổng thể được cải thiện 30% sau khi sử dụng SherloQ. Các truy vấn được tạo trước đó gặp phải các vấn đề như kết quả không đầy đủ và thiếu xử lý lỗi, ảnh hưởng đến cả độ chính xác và độ tin cậy.
Với SherloQ, các truy vấn được tạo ra chính xác hơn, hiệu quả hơn và mạnh mẽ hơn, với những cải tiến đáng kể về độ trễ, độ chính xác và độ tin cậy. Sự cải tiến này cho thấy khả năng cung cấp dữ liệu đáng tin cậy của SherloQ, khiến nó trở thành một công cụ có giá trị cho các tổ chức muốn tối ưu hóa quy trình truy vấn dữ liệu của họ.
Để khám phá các phần khác của nền tảng Skypoint hoặc để đặt lịch dùng thử SkyPoint AI, hãy truy cập trang web Skypoint .
Bởi Alok Raj, Kỹ sư AI hàng đầu, Skypoint, và Sayandip Sarkar, Trưởng phòng Kỹ thuật, Skypoint