Logo Wecommit
Về chúng tôiCộng đồngLời chứng thựcTài nguyên
Logo Wecommit

AI Agent với database: vì sao nó trả sai và cách chữa

Bốn chặng một AI Agent đi từ câu hỏi tiếng Việt tới câu lệnh SQL, hai chỗ nó hay sai, và cách chữa bằng mô tả đặt ngay trong database.

AI Agent với database là chuyện chạy được thật, không phải trình diễn. Anh em gõ một câu tiếng Việt, nó trả về đúng con số trong database của công ty. Tôi có demo trong video bên dưới. Nhưng phần lớn người thử xong đều bảo nó không chính xác. Bài này đi vào bốn chặng bên trong, chỉ đúng hai chỗ nó hay hỏng, và cách chữa nằm ở chỗ ít ai để ý: mô tả đặt ngay trong database chứ không nhồi vào prompt.

Video gốc dài 25 phút. Bài viết này bổ sung thêm phần bài kiểm chuẩn quốc tế cho việc dịch câu hỏi ra SQL, cú pháp mô tả copy dùng được luôn cho SQL Server, PostgreSQL và Oracle, cùng bảng so sánh hai kiểu đặt AI.

Bài này có gì mà video chưa có?

Video là bản nói. Bài này là bản chép lại có kèm thứ mang về dùng được. Cụ thể:

  1. Bốn chặng bên trong, gọi đúng tên từng chặng theo sơ đồ trong video.
  2. Hai chỗ hỏng, và cách nhận ra mình đang hỏng ở chỗ nào.
  3. Con số từ một bài kiểm chuẩn quốc tế cho thấy vì sao mô tả lại quan trọng đến vậy.
  4. Ba khối lệnh copy được: thêm mô tả cho SQL Server, mẫu mô tả chia đầu mục, và cú pháp Annotations của Oracle.
  5. Một bảng so sánh AI đặt ngoài tool với AI đặt trong lõi database.

Vì sao chỉ chat với AI thì không tạo ra lợi thế?

Vì cái anh em gõ vào ô chat thì ai cũng gõ được, còn thứ tạo ra lợi thế lại nằm trong nhà anh em. Nó nằm ở tri thức của anh em, nằm ở quy trình của doanh nghiệp, và nằm ở dữ liệu nội bộ.

Tôi nói thẳng. Một ông trợ lý AI chỉ biết chat thì nó cũng chỉ giỏi ngang cái nó học được từ internet. Nó không biết bảng nhân viên của anh em có bao nhiêu cột. Nó không biết cột type bằng 0 nghĩa là nam hay nữ. Muốn nó làm ra tiền thì phải cho nó chọc vào đúng đống dữ liệu của mình.

Và đây là chỗ nhiều anh em rén. Nghe tới database là nghĩ ngay tới việc phải biết viết câu lệnh, biết viết function, biết viết thủ tục. Rào cản đó có thật, nhưng nó vừa hạ xuống rất nhiều lần. Tôi có chia sẻ cách một đội ngũ AI Agent chạy việc thật trong bài AI Agent vận hành doanh nghiệp. Bài này đi sâu đúng một mảnh trong đó, là mảnh dữ liệu.

Không biết SQL thì hỏi được dữ liệu không?

Được. Anh em gõ tiếng Việt, hệ thống tự dịch ra câu lệnh, tự chạy, tự trả bảng kết quả kèm nhận xét. Tôi demo trên một database SQL Server chứa dữ liệu của mạng hỏi đáp Stack Overflow, nơi người dùng đăng bài rồi up vote hoặc down vote cho nhau.

Trước đây phải làm việc này thế nào?

Phải mở đúng bảng, biết đúng tên cột, rồi gõ câu lệnh bằng tay.

Cửa sổ SQL Server Management Studio, cây Object Explorer mở bảng dbo.Users với các cột Id, AboutMe, Age, CreationDate, DisplayName, DownVotes, EmailHash, Reputation, UpVotes, bên phải là câu lệnh select * from Users order by upvotes desc và bảng kết quả bên dưới
Bảng dbo.Users có mười bốn cột. Muốn xếp hạng người up vote nhiều nhất thì phải biết cột đó tên là UpVotes, không phải Vote hay Likes.

Đây là kinh điển. SQL là ngôn ngữ chuẩn duy nhất để nói chuyện với database, loại database nào cũng vậy. Ai từng làm nghề đều phải học nó.

Bây giờ gõ tiếng Việt vào thì sao?

Nó tự tìm bảng, tự nối bảng, tự lọc, tự sắp xếp. Anh em không cần biết select cái gì, join bảng nào, lọc where ra sao.

Tôi gõ đúng một câu tiếng Việt vào khung chat nằm ngay trong công cụ quản trị database. Nó chạy một bước tên là đọc dữ liệu, rồi trả về bảng xếp hạng.

Khung GitHub Copilot Chat trong SSMS, tiêu đề hội thoại là câu tiếng Việt Tìm top 5 user được upvotes nhiều nhất, có nhãn Ran ReadFromDatabase và bảng mười dòng gồm các cột Rank, DisplayName, UpVotes Given, Reputation, Location, bên dưới là phần Key insights
Tôi chỉ hỏi danh sách. Nó tự lấy thêm cột Reputation và Location vì nó đoán tôi sẽ cần, rồi tự viết bốn dòng nhận xét bên dưới.

Anh em để ý chỗ này nhá. Tôi không hề bảo nó lấy điểm danh vọng, cũng không bảo nó lấy vị trí. Nó tự thêm vào, vì nó hiểu ngôn ngữ tự nhiên nên nó phán đoán được thứ tôi sẽ hỏi tiếp. Hỏi câu sau kiểu người này đã đăng bao nhiêu bài, nó cũng tự đi tìm bảng bài đăng rồi trả về con số.

Bản chất là gì? Bản chất là cái rào cản kỹ thuật đã tụt xuống. Trước đây phải có người biết nghề mới hỏi được dữ liệu. Bây giờ người hiểu nghiệp vụ là hỏi được.

Chính hãng database có làm chuyện này không?

Có. Và họ còn đưa thẳng vào cú pháp SQL luôn. Trên Oracle Autonomous Database, anh em thêm hai chữ select ai rồi viết câu hỏi bằng tiếng người, database tự lo phần còn lại.

Trang tài liệu Oracle mang tiêu đề Examples of Using Select AI, hiện bốn câu lệnh select ai, select ai showsql, select ai narrate và select ai chat cùng kết quả CUSTOMER_COUNT bằng 55500 và câu SELECT COUNT dấu sao AS total_customers FROM SH.CUSTOMERS
Bốn biến thể trong tài liệu chính thức của Oracle. Hỏi thẳng ra số, hỏi kèm showsql để nó đưa câu lệnh, narrate để nó kể thành câu, chat để nó trò chuyện.

Bốn biến thể đó nằm trong tài liệu chính thức, chép về chạy được ngay:

SQL> select ai how many customers exist;

CUSTOMER_COUNT
--------------
         55500

SQL> select ai showsql how many customers exist;

RESPONSE
------------------------------------------------
SELECT COUNT(*) AS total_customers
FROM SH.CUSTOMERS

SQL> select ai narrate how many customers exist;

RESPONSE
------------------------------------------------
There are a total of 55,500 customers in the database.

SQL> select ai chat how many customers exist;

Cái đáng chú ý không phải cú pháp. Cái đáng chú ý là ai đang làm việc này. Database là tầng gần như cuối cùng để lưu dữ liệu của anh em, những thông tin quan trọng nhất nằm hết ở đấy. Chính các hãng database đang kéo AI lại gần tầng đó. Nghĩa là cách doanh nghiệp mình vận hành sẽ đổi, đổi nhiều.

AI Agent đi qua mấy chặng để đẻ ra một câu SQL?

Bốn chặng, tính từ lúc anh em bấm gửi cho tới lúc câu lệnh chạy thật. Hiểu bốn chặng này thì sau đó nó sai ở đâu anh em chỉ mặt được ngay.

Sơ đồ năm khối nối bằng mũi tên gồm User Question, Copilot Model, Selected Schema, LLM và SQL Query, bên dưới có chữ viết tay màu cam Khoanh vùng kèm hai gạch đầu dòng User và Post, cùng hai chữ Sai màu đỏ và cam chỉ vào khối LLM và khối SQL Query
Sơ đồ tôi vẽ trong video. Hai chữ Sai màu đỏ là hai chỗ hỏng, cả hai đều nằm trước khối SQL Query chứ không nằm ở câu lệnh.
Khối trên sơ đồNó làm gìHỏng ở đây thì biểu hiện ra sao
User QuestionCâu hỏi thuần tiếng Việt của anh emHỏi mơ hồ, nó tự đoán ý rồi đi sai hướng
Copilot ModelBộ điều phối, quyết định có đi đọc dữ liệu hay khôngNó trả lời chay, không hề chạm vào database
Selected SchemaKhoanh vùng từ vài trăm bảng còn vài bảng liên quanVớ nhầm bảng, con số ra vô lý mà vẫn trông có vẻ đúng
LLMBộ não, hiểu ngữ nghĩa rồi chuyển thành câu lệnhCâu lệnh chạy được nhưng không đúng thứ anh em hỏi
SQL QueryCâu lệnh thật chạy trong databaseChạy chậm, khoá bảng, tốn tài nguyên

Chặng khoanh vùng là chặng quan trọng nhất mà ít người để ý. Hình dung thế này. Hệ thống của anh em có vài trăm bảng. Câu hỏi của tôi là tìm bài đăng của một người dùng. Vậy nó chỉ cần bảng user và bảng post thôi. Bảng up vote không quan trọng, bảng thanh toán không quan trọng. Nó khoanh lại còn hai bảng, rồi mới gửi phần mô tả của hai bảng đó cho bộ não.

Vì sao phải khoanh? Vì bộ não nào cũng có sức chứa. Nhồi cả trăm bảng vào thì nó quên, mà lại tốn tiền.

Nó sai ở chỗ nào?

Sai ở hai chỗ, cả hai đều nằm trước khi câu lệnh được sinh ra. Ngoài kia rất nhiều người bảo nó không chính xác. Không chính xác tức là câu query sai. Mà câu query sai thì phải đi ngược lại, tìm ở đằng trước nó.

Chỗ sai thứ nhất, nó khoanh vùng sai

Nó chọn nhầm bảng. Anh em có bảng tên là NV, nó không biết NV là nhân viên hay là nhà vợ. Có cột tên L_name, nó không biết đó là last name. Chọn nhầm bảng thì bộ não phía sau có xịn tới đâu cũng chịu, vì nó chỉ được nhìn thấy đúng thứ đã bị khoanh sai.

Đây không phải chuyện lý thuyết. Bài kiểm chuẩn quốc tế cho việc dịch câu hỏi ra SQL tên là BIRD, gồm 12.751 cặp câu hỏi và câu lệnh trên 95 database thật, tổng 33,4 GB, trải 37 lĩnh vực nghề. Nhóm làm bài kiểm này chỉ ra rằng nhóm lỗi lớn nhất chính là chọn nhầm bảng nhầm cột và hiểu sai nội dung dữ liệu. Đúng chặng khoanh vùng.

Chỗ sai thứ hai, chọn nhầm bộ não

Bộ não nằm bên dưới là thứ anh em tự chọn được. Trong demo tôi chọn Claude Sonnet 4.5. Chọn bộ não khác thì nó khác nhau ở hai thứ: khác về tiền, và khác về lượng ngữ cảnh cùng khả năng suy luận nó gánh được.

Có mô hình trả lời rất nhanh mà không chính xác. Có mô hình chậm hơn nhưng suy luận sâu. Việc của anh em là chọn đúng mô hình cho đúng độ khó của câu hỏi. Câu hỏi đếm một con số thì đừng phí tiền gọi mô hình suy luận sâu. Câu hỏi nối năm bảng kèm điều kiện chồng nhau thì đừng tiếc.

Tôi có phân tích kỹ chuyện chọn và điều phối mô hình trong bài Dynamic Workflow trên Opus 4.8, và chuyện năng lực từng đời mô hình đổi ra sao trong bài Claude Fable 5 và ba thay đổi cho doanh nghiệp.

Con số của bài kiểm BIRD nói thêm một điều đáng suy nghĩ. Người thật, gồm kỹ sư dữ liệu và sinh viên ngành database, đạt 92,96%. Hệ thống tốt nhất trên bảng xếp hạng tính tới giữa năm 2026 đạt 81,95%. Bản GPT-4 gốc hồi 2023 chỉ 54,89%. Nghĩa là kể cả bộ não xịn nhất thì vẫn còn khoảng cách hơn mười điểm phần trăm so với người biết nghề. Đừng giao cho nó một câu hỏi rồi tin luôn kết quả.

Vì sao nó không hiểu bảng NV là bảng nhân viên?

Vì nó chưa bao giờ được học database của anh em. Đây là chỗ nhiều người hiểu nhầm nhất, nên tôi nói cho kỹ.

Các bộ não này được huấn luyện từ blog, từ YouTube, từ đủ thứ nội dung trên internet. Không ông nào có dữ liệu bên trong database của anh em cả. Không ông nào biết NV nghĩa là gì, không ông nào biết cột type bằng 1 là nữ.

Vậy nếu chúng ta cứ vứt một cái database trần trụi vào rồi bảo mày cứ lấy thông tin đi, đương nhiên nó không làm được. Nó phải mường tượng. Mà mường tượng thì nhập nhằng, mà nhập nhằng thì chọn sai.

Ngược lại, cho nó hiểu tường tận từng bảng từng cột thì nó ra quyết định chính xác hơn hẳn. Lúc đó nó có khác gì một nhân viên có năng lực, hiểu được thiết kế database đâu.

Nhồi hết mô tả vào prompt có được không?

Được, nhưng tệ. Anh em hoàn toàn có thể mô tả bằng mồm toàn bộ database ngay trong câu prompt hoặc trong system instruction. Database của tôi có bảng tên là nhân viên, bảng đó có các cột này cột kia, cột này giá trị gì. Viết ra được hết.

Nhưng nó tệ vì ba lý do, cái nào cũng đau.

  1. Prompt dài thòng lòng. Nhiều bảng, nhiều cột, nhiều mô tả thì đoạn đầu vào phình ra không kiểm soát được.
  2. Dài thì nó quên. Bộ não chỉ chứa được một lượng token nhất định. Vượt cái đó thì nó quên đoạn trước. Viết càng dài lại càng dở, chưa chắc đã tốt hơn.
  3. Dài thì tốn tiền. Các mô hình tính tiền theo tổng số token gửi lên. Gửi càng dài càng tốn. Chuyện tiền token này tôi có chia sẻ nguyên cách tính và cách siết trong bài Tối ưu chi phí token khi cho AI vận hành kênh YouTube.

Đấy. Ba cái giá đó trả mãi không hết. Vậy có cách nào khác không?

Đặt mô tả ở đâu cho đúng?

Đặt ngay trong chính database. Anh em đã cắm nó vào database rồi, vậy tại sao lại đi mô tả ở chỗ khác?

Mọi database đều có sẵn chỗ để ghi mô tả cho bảng và cho cột. Mặc định chỗ đó rỗng. Tôi chạy một câu lệnh kiểm tra và nó hiện ra đúng như vậy.

Câu lệnh SQL nối sys.schemas, sys.tables, sys.columns và LEFT JOIN sys.extended_properties lọc theo MS_Description cho bảng Users, bên dưới là bảng kết quả mười bốn dòng với cột Description toàn giá trị NULL trừ dòng UpVotes có một câu mô tả tiếng Việt
Mười bốn cột, mười ba cột Description để NULL. Chỉ có cột UpVotes là tôi đã tự thêm ghi chú vào, và đó là dòng duy nhất bộ não đọc được.

Nhìn bảng kết quả là hiểu ngay. Cột nào để NULL thì bộ não phải tự mường tượng. Cột nào đã có mô tả thì nó đọc thẳng.

Cách thêm mô tả, ba loại database hay gặp nhất:

[1] SQL Server, dùng extended property tên MS_Description

EXEC sp_addextendedproperty
     @name = N'MS_Description',
     @value = N'Bang luu thong tin nguoi dung. Moi dong la mot tai khoan.',
     @level0type = N'SCHEMA', @level0name = N'dbo',
     @level1type = N'TABLE',  @level1name = N'Users';

EXEC sp_addextendedproperty
     @name = N'MS_Description',
     @value = N'So lan nguoi dung nay da thuc hien UpVote cho bai cua nguoi khac.',
     @level0type = N'SCHEMA', @level0name = N'dbo',
     @level1type = N'TABLE',  @level1name = N'Users',
     @level2type = N'COLUMN', @level2name = N'UpVotes';

[2] PostgreSQL

COMMENT ON TABLE  public.users IS 'Bang luu thong tin nguoi dung.';
COMMENT ON COLUMN public.users.upvotes IS 'So lan nguoi dung da up vote.';

[3] Oracle

COMMENT ON TABLE  hr.employees IS 'Bang nhan su. Moi dong la mot nhan vien.';
COMMENT ON COLUMN hr.employees.hire_date IS 'Ngay vao lam chinh thuc.';

Càng mô tả chi tiết thì nó càng hiểu dữ liệu của anh em. Mà quan trọng hơn: mô tả nằm trong database thì mọi công cụ cắm vào đều đọc được, không phải chép lại vào từng prompt.

Tôi ví dụ một cột tên là type. Nó không hiểu type là gì đâu. Anh em ghi rõ vào: 0 nghĩa là nam, 1 nghĩa là nữ. Sau này ai hỏi tìm những người là nam giới thì nó mới biết đường mà lọc. Không ghi thì nó lấy gì mà hiểu.

Làm sao tốt hơn một dòng mô tả?

Chia mô tả thành các đầu mục có cấu trúc, thay vì một dòng chữ chạy dài. Tôi nói thật với anh em là hoàn toàn có cách làm tốt hơn, và suy ra được từ nguyên lý chứ không phải mẹo.

Nếu mô tả chỉ là một dòng text dài dài dài, thì máy phải đọc hết cả dòng rồi mới hiểu cột này nghĩa gì. Nhưng nếu chia thành đầu mục thì khác hẳn.

Chữ viết tay màu trắng và xanh lá trên nền đen, chữ Users có mũi tên trỏ sang chữ Mô tả, bên dưới là ba đầu mục gồm bảng chứa thông tin người dùng, mức độ quan trọng rất cao, và bảo mật tuyệt đối được gạch chân màu đỏ
Cùng một chỗ ghi mô tả, nhưng chia thành đầu mục. Có đầu mục thì lọc được, không có đầu mục thì chỉ đọc được.

Có đầu mục thì làm được thêm một việc mà một dòng text không làm được: lọc. Tôi bảo nó hãy lọc ra những bảng có độ bảo mật tuyệt đối trong database của tôi, nó vào phần ghi chú và tìm ra hết. Tức là anh em đánh ghi chú theo quy tắc để sau này máy tìm theo quy tắc đó.

Mẫu tôi hay dùng, chép về sửa lại theo nhà mình:

Mo ta: Bang luu thong tin nguoi dung, moi dong la mot tai khoan.
Muc do quan trong: Rat cao
Bao mat: Tuyet doi, khong duoc dua ra ngoai
Nghiep vu so huu: Van hanh
Khoa noi: Users.Id noi sang Posts.OwnerUserId
Luu y: Tai khoan he thong ten Community khong phai nguoi that, loai ra khi thong ke

Sáu dòng đó dán vào ô mô tả của bảng. Bộ não đọc được, mà con người mở ra cũng đọc được. Dòng cuối là dòng đắt nhất: nó chặn đúng loại lỗi mà nhìn số không phát hiện ra.

Và tiên phong ở việc này thì có hãng đã làm sẵn cho chúng ta rồi. Họ viết luôn cú pháp cho mình dùng. Oracle từ bản 23ai có tính năng tên là Annotations, cho phép gắn cặp tên và giá trị thẳng vào bảng và vào cột ngay lúc tạo:

CREATE TABLE employees (
  id     NUMBER(5) PRIMARY KEY
         ANNOTATIONS (Identity, Display 'Ma nhan vien'),
  ename  VARCHAR2(50)
         ANNOTATIONS (Display 'Ten nhan vien'),
  salary NUMBER
         ANNOTATIONS (Display 'Luong', Confidential)
) ANNOTATIONS (Display 'Bang nhan su');

ALTER TABLE employees ANNOTATIONS (ADD Department 'HR');

Đọc lại danh sách đó bằng các view USER_ANNOTATIONSUSER_ANNOTATIONS_USAGE. Anh em thấy chưa, đúng cái tư tưởng đầu mục ở trên, nhưng hãng đã chuẩn hoá thành cú pháp.

Oracle đưa AI vào lõi database nghĩa là gì?

Nghĩa là chính database tự suy luận, chứ không phải một công cụ bên ngoài suy luận hộ rồi bắn câu lệnh vào. Đây là khác biệt lớn nhất, và tôi phải nói rõ vì nhìn bên ngoài hai thứ này giống hệt nhau.

Trang oracle.com công bố Oracle AI Database 26ai, đoạn mở đầu ghi LAS VEGAS giới thiệu bản AI native của database chủ lực, cụm chữ AI-native database được bôi xanh, phía dưới là mục Unified Hybrid AI Vector Search
Trang công bố chính thức của Oracle. Một dòng thôi nhưng nó đổi cục diện: AI và dữ liệu hợp nhất thành thế hệ database mới.

Bản thân tôi làm trong lĩnh vực này lâu năm, hỗ trợ database cho nhiều doanh nghiệp và công ty chứng khoán lớn, nên tôi hiểu dòng đó nặng cỡ nào. Trước đây database khá bảo thủ. Nó chỉ chứa dữ liệu thôi, đơn thuần chứa dữ liệu.

Chỗ đặt AIAi dịch câu hỏi ra câu lệnhDịch sai thì chuyện gì xảy raVí dụ trong video
Ngoài, ở tầng công cụCông cụ gọi mô hình, nhận câu lệnh rồi bắn vào databaseNó dừng. Không tìm được thì thôi, người phải hỏi lạiKhung chat trong công cụ quản trị SQL Server
Trong lõi databaseChính database nhận câu hỏi và tự chuyển thành câu lệnhCó đường suy luận lại ngay bên trong để tìm câu trả lời đúngSelect AI của Oracle

Cái khung chat trong công cụ quản trị mà tôi demo, nói cho đúng thì nó vẫn hơi giả cầy. AI của nó là AI đi qua một cái tool. Chúng ta gửi yêu cầu qua giao diện, giao diện phân tích rồi gửi câu lệnh vào database. Lõi database không khác gì trước kia.

Còn Oracle thì họ đưa AI vào trong lõi. Theo công bố chính thức, Oracle AI Database 26ai là bản kế tiếp thay cho 23ai, ra cùng đợt cập nhật tháng 10 năm 2025, và khách hàng cài được cả trên máy chủ tại chỗ chứ không bắt buộc lên cloud của họ. Bản này gắn thêm tìm kiếm vector, Model Context Protocol, và các framework agentic AI ngay trong database.

Và đây là điều đáng để anh em suy ra. Một hãng ra thứ gì đó thì các hãng khác sẽ chạy theo, sớm hay muộn. Giống hồi ChatGPT ra đời rồi cả loạt hãng khác ra theo. Nên đừng bám vào tool, đừng bám vào cái vỏ bên ngoài. Bám vào nguyên lý.

Gói cả quy trình vào một bảng thì trông thế nào?

ChặngViệc phải làmLàm ở đâuDấu hiệu đã xong
1. Chọn phạm viChọn ra 5 tới 10 bảng hay bị hỏi nhất, đừng ôm cả databaseTrên giấy, cùng người hiểu nghiệp vụCó danh sách bảng kèm tên người chịu trách nhiệm
2. Viết mô tả bảngMỗi bảng một câu, nói rõ một dòng trong bảng là cái gìTrong database, bằng lệnh ở mục trênChạy câu kiểm tra, không còn bảng nào để NULL
3. Viết mô tả cộtƯu tiên cột viết tắt, cột mã số, cột ngàyTrong databaseCột nào có mã số đều ghi rõ từng giá trị nghĩa là gì
4. Thêm đầu mụcMức độ quan trọng, bảo mật, khoá nối, lưu ýTrong database, theo mẫu sáu dòngLọc thử theo đầu mục bảo mật, ra đúng danh sách
5. Chọn bộ nãoCâu dễ dùng mô hình rẻ, câu khó dùng mô hình suy luậnTrong phần cấu hình của công cụCùng một câu hỏi, hai mô hình cho cùng một kết quả
6. Nghiệm thuRa 20 câu hỏi có đáp án biết trước, chạy rồi đối chiếuBộ câu hỏi để riêng, chạy lại mỗi lần đổi mô tảTỉ lệ đúng đo được bằng số, không đoán

Bước 6 là bước hay bị bỏ nhất. Không có bộ câu hỏi có đáp án biết trước thì anh em không bao giờ biết mô tả mình vừa thêm là làm nó tốt lên hay tệ đi.

Giới hạn thật, chỗ nào nó vẫn chưa làm được?

Nói cho sòng phẳng. Tôi liệt kê đúng những chỗ tôi đã vấp.

Nó viết được câu lệnh chạy được, không có nghĩa là câu lệnh ngon. Câu lệnh nó sinh ra hay quét nhiều hơn cần thiết. Bài kiểm BIRD có hẳn một thang điểm riêng phạt câu lệnh đúng mà chậm. Muốn biết câu lệnh của nó có ngon không thì phải mở kế hoạch thực thi ra xem, tôi có chia sẻ cách đọc trong bài Tối ưu MySQL với EXPLAIN và EXPLAIN ANALYZE.

Cùng một câu hỏi, hôm nay nhanh mai chậm. Chuyện này không phải lỗi của AI, nó là bản tính của database. Tôi có phân tích nguyên nhân trong bài Câu lệnh SQL lúc nhanh lúc chậm.

Có index rồi mà vẫn chậm. Nhiều anh em nghĩ cứ tạo index là xong. Không phải. Xem Vì sao có index mà SQL vẫn chậm. Còn nếu chưa biết bắt đầu từ đâu thì đọc Tối ưu SQL nên bắt đầu từ đâu trước.

Mô tả sai còn nguy hơn không có mô tả. Không có mô tả thì nó mường tượng và hay trả lời lệch, người nhìn ra ngay. Mô tả sai thì nó tự tin trả lời sai, mà số trông vẫn hợp lý. Nên mô tả phải do người hiểu nghiệp vụ duyệt, đừng để một mình kỹ thuật viết.

Nó không hiểu quy tắc ngầm trong nhà anh em. Kiểu đơn hàng trạng thái 9 là đơn test, không tính doanh thu. Cái đó không nằm trong dữ liệu, nó nằm trong đầu người làm lâu năm. Không ghi vào mô tả thì không ông AI nào đoán ra.

Bảy ngày tới anh em làm được gì?

Đây là việc làm được ngay, không cần xin ngân sách, không cần đổi hệ thống.

  1. Ngày 1. Chọn đúng một bảng hay bị hỏi nhất. Một thôi.
  2. Ngày 2. Chạy câu kiểm tra mô tả ở mục trên, đếm xem bao nhiêu cột đang để NULL.
  3. Ngày 3. Ngồi với người hiểu nghiệp vụ của bảng đó, viết mô tả cho bảng và cho từng cột.
  4. Ngày 4. Thêm mô tả vào database bằng lệnh đã có sẵn ở trên.
  5. Ngày 5. Viết 20 câu hỏi tiếng Việt mà anh em biết trước đáp án đúng.
  6. Ngày 6. Cắm công cụ vào, chạy 20 câu, đếm số câu đúng.
  7. Ngày 7. Câu nào sai thì lần ngược lại: nó khoanh nhầm bảng, hay nó hiểu nhầm cột. Sửa mô tả rồi chạy lại đúng 20 câu đó.

Cứ làm đi. Sai lại sửa. Một bảng chạy ngon rồi thì nhân sang bảng thứ hai nhanh hơn nhiều.

Câu hỏi hay gặp

Không biết SQL thì có làm được không?

Được. Anh em gõ câu hỏi bằng tiếng Việt, hệ thống lo phần câu lệnh. Nhưng phần mô tả bảng và cột thì phải có người hiểu nghiệp vụ ngồi cùng, vì đó mới là thứ quyết định nó đúng hay sai. Đây là việc của người hiểu nghề, không phải việc của người biết gõ lệnh.

Mô tả nên viết tiếng Việt hay tiếng Anh?

Viết bằng thứ tiếng mà người dùng sẽ hỏi. Người trong công ty hỏi bằng tiếng Việt thì mô tả tiếng Việt, để nghĩa khớp thẳng. Riêng tên nghiệp vụ nội bộ thì ghi cả hai cách gọi trong cùng một dòng mô tả, vì mỗi phòng ban gọi một kiểu.

Database của tôi có 300 bảng, có phải mô tả hết không?

Không. Đừng ôm hết, ôm hết là bỏ giữa chừng. Bắt đầu từ nhóm bảng bị hỏi nhiều nhất, thường chỉ khoảng 5 tới 10 bảng đã gánh phần lớn câu hỏi. Mô tả xong nhóm đó, đo tỉ lệ đúng, rồi mở rộng dần.

Có sợ nó xoá dữ liệu không?

Cách chặn nằm ở quyền, không nằm ở lời dặn. Tạo một tài khoản riêng cho AI Agent, chỉ cấp quyền đọc, chỉ cho nhìn đúng các bảng đã chọn. Đừng cấp tài khoản quản trị rồi dặn nó đừng xoá. Dặn không phải là cơ chế.

Database không phải SQL thì có làm được không?

Có, nhưng cơ chế khác. Chỗ ghi mô tả và cách khoanh vùng ở mỗi loại một khác, nên đừng bê nguyên cách làm của SQL Server sang. Với MongoDB thì còn thêm chuyện kiến trúc lưu trữ, tôi có phân tích trong bài MongoDB lúc nhanh lúc chậm.

Câu lệnh nó sinh ra chạy chậm thì sửa ở đâu?

Sửa ở phía database, không sửa ở phía AI. Phần lớn ca chậm là do thiếu index hoặc index đặt sai thứ tự cột. Thứ tự cột trong index quan trọng hơn nhiều người nghĩ, tôi có chia sẻ trong bài Tầm quan trọng của thứ tự các cột trong index PostgreSQL.

Đúc kết

Rào cản công nghệ đã hạ xuống thật. Trước đây phải biết viết câu lệnh mới hỏi được dữ liệu, bây giờ hỏi bằng tiếng Việt là ra.

Nhưng thứ quyết định nó đúng hay sai không nằm ở mô hình. Nó nằm ở chỗ anh em có chịu ngồi mô tả dữ liệu của mình hay không. Mô tả đặt trong database, chia thành đầu mục, do người hiểu nghiệp vụ duyệt. Đấy là toàn bộ phần khó, mà cũng là toàn bộ phần tạo ra lợi thế.

Và một câu cuối. Đừng bám vào tool. Hãng nào ra tool xịn thì hãng khác cũng ra theo trong vài tháng. Hiểu nguyên lý thì đổi tool nào anh em cũng dựng lại được hệ thống của mình.

Cứ làm đi, sai lại sửa. Nếu anh em cùng góc nhìn này và muốn đi sâu hơn thì liên hệ với tôi. Tùy anh em.

Nguồn tham khảo