Microsoft công bố Flint, ngôn ngữ trực quan hóa dành cho AI agent
(microsoft.github.io)- Flint là một ngôn ngữ trung gian cho trực quan hóa giúp AI agent tạo các biểu đồ giàu khả năng biểu đạt từ những đặc tả ngắn gọn mà con người có thể chỉnh sửa
- Trình biên dịch diễn giải dữ liệu, kiểu ngữ nghĩa, loại biểu đồ và mã hóa, rồi tự động điền các thiết lập cấp thấp như thang đo, trục, khoảng cách và bố cục
- Cung cấp 46 loại biểu đồ và 83 ví dụ trong thư viện, đồng thời hỗ trợ kết xuất bằng Vega-Lite, ECharts và Chart.js
- Trong môi trường TypeScript / JavaScript có thể cài đặt bằng npm, còn trong workflow của agent có thể dùng máy chủ MCP
- Ẩn khác biệt API giữa các backend phía sau một giao diện thống nhất, giúp dễ xử lý hơn việc chuyển renderer hoặc thay đổi thiết kế biểu đồ từ cùng một đặc tả
Vấn đề Flint muốn giải quyết
- Flint là một dự án của Microsoft Research, được thiết kế như một ngôn ngữ trung gian cho trực quan hóa để AI agent tạo biểu đồ từ các đặc tả biểu đồ đơn giản, con người có thể chỉnh sửa
- Đặc tả gồm dữ liệu, kiểu ngữ nghĩa và đặc tả biểu đồ
- Đặc tả ví dụ chỉ định
periodlàYearMonth,totalUserslàQuantity, còngameTypevàregionlàCategory - Trong
Line Chart, liên kếtregionvới column,periodvới x,totalUsersvới y vàgameTypevới color để tạo biểu đồ đường người dùng hoạt động hằng tháng theo từng khu vực
- Đặc tả ví dụ chỉ định
- Có thể cài đặt trong môi trường TypeScript / JavaScript bằng npm
- Trong workflow của agent có thể dùng máy chủ MCP
- Có thể xem 46 loại biểu đồ và 83 ví dụ trong gallery
Cách biến đặc tả thành biểu đồ
- Flint bắt đầu từ đặc tả được nén, tạo đặc tả native cho backend như Vega-Lite, rồi điền các chi tiết cấp thấp cần thiết để kết xuất biểu đồ
- Kiểu ngữ nghĩa biểu thị ý nghĩa của các trường dữ liệu
- Ví dụ bao gồm các kiểu như
Rank,YearMonth,Delta,Temperature - Dựa trên đó, Flint suy luận các thiết lập biểu đồ như parsing, thang đo, trục, định dạng và bảng màu
- Trong heatmap hiển thị số người dùng mới ròng theo game và tháng, trình phân tích giá trị thời gian, định dạng trục, bảng màu phân kỳ và điểm giữa được quyết định dựa trên kiểu ngữ nghĩa
- Ví dụ bao gồm các kiểu như
- Tối ưu hóa bố cục tự động dựa trên mô hình bố cục co giãn và nguyên tắc banking
- Trình biên dịch quản lý động kích thước, khoảng cách và sắp xếp để điều chỉnh biểu đồ vừa với canvas
- Khi số lượng grouped bar chart tăng lên, Flint mở rộng canvas và giảm band width để cả phiên bản dày đặc cũng vừa với canvas
- Thay đổi thiết kế biểu đồ có thể được xử lý bằng cách chuyển loại biểu đồ và liên kết lại mã hóa thị giác
- Khi đổi faceted bar chart về phân bố dân số theo giới tính và độ tuổi trong Điều tra dân số Mỹ năm 2000 thành pyramid chart, người dùng chỉ cần đổi loại biểu đồ, phần còn lại do trình biên dịch xử lý
Backend kết xuất và trạng thái sẵn dùng
- Flint hỗ trợ 46 loại biểu đồ trên Vega-Lite, ECharts, Chart.js
- Ẩn các API và mô hình lập trình khác nhau phía sau một giao diện thống nhất
- Khi Vega-Lite không có sunburst native, có thể chuyển sang ECharts
- Với trực quan hóa cấu trúc phân cấp khu vực × gameType × game, sunburst chart được đề xuất là phương án thay thế tốt hơn grouped bar chart
- Flint là mã nguồn mở và có thể dùng ngay
- GitHub và các ví dụ trong gallery được cung cấp làm điểm bắt đầu
- Microsoft Research xây dựng Flint với sự hợp tác của IDEAS Lab và Renmin University of China
1 bình luận
Ý kiến trên Hacker News
Tôi hiểu vì sao cần kiểu marketing “dành cho AI agent”, nhưng rốt cuộc chỉ riêng việc đây là một ngôn ngữ giúp biểu diễn biểu đồ dễ dàng cũng đã đủ ấn tượng và hữu ích rồi
Trên trang cũng giải thích rằng “thay vì yêu cầu các tham số cấp thấp dài dòng như scale, trục, khoảng cách, layout, trình biên dịch Flint suy ra cấu hình biểu đồ được tối ưu từ dữ liệu, kiểu ngữ nghĩa, kiểu biểu đồ và encoding”
Một mẫu hình mới đang xuất hiện trong các hệ thống agent, và dự án này là một ví dụ hay
Đó là cách đặt một biểu diễn trung gian (IR) nào đó do LLM tạo ra và chuyển tiếp, rồi đặt lên trên nó một lớp quyết định luận như compiler hoặc code generator. Tôi nghĩ trong tương lai gần ta sẽ thấy cấu trúc như vậy thường xuyên hơn
Trang này không nói tới, nhưng khi tạo trực quan hóa dữ liệu, việc đưa khả năng tiếp cận vào ngay từ giai đoạn thiết kế là cực kỳ quan trọng
Podcast này có một cuộc phỏng vấn ngắn liên quan được tóm tắt tốt: https://open.spotify.com/episode/18dHTAxCCeIaLOTch6tRld
Người được phỏng vấn là Frank Elavsky, có vẻ khá nổi tiếng trong lĩnh vực này, và anh ấy cũng tạo ra dự án Chartability, bao gồm các heuristic, nguyên tắc và hướng dẫn để audit khả năng tiếp cận: https://chartability.github.io/POUR-CAF/
Tôi đã thêm issue để theo dõi: https://github.com/microsoft/flint-chart/issues/48
Tôi tò mò liệu có giải thích cụ thể nào về việc nó tốt hơn hoặc khác Vega bản thân nó như thế nào không: https://vega.github.io/vega/docs/specification/
Vega vốn đã là một DSL giàu khả năng biểu đạt cho trực quan hóa, và có lẽ cũng được đưa khá rộng rãi vào dữ liệu huấn luyện của LLM
Flint là một mức trừu tượng cao hơn, nên đặc tả ngắn và đơn giản hơn nhiều, còn compiler suy ra các quyết định cấp thấp để tạo biểu đồ đẹp. Nói cách khác, nó cho phép agent tạo ra biểu đồ tốt, vốn trước đây cần chương trình dài, bằng một chương trình ngắn
Tôi không thực sự đồng cảm lắm với lập luận rằng “đặc tả biểu đồ đơn giản có thể ổn định nhưng phụ thuộc vào mặc định của hệ thống nên chất lượng biểu đồ tạo ra thấp, còn đặc tả phức tạp có thể tạo biểu đồ đẹp nhưng dài dòng nên agent khó xử lý ổn định”
Từ một số ít kinh nghiệm làm agent phân tích, điều khiến tôi ấn tượng là LLM tạo trực quan hóa bằng Python và R khá tốt. Các mô hình trọng số mở nhỏ cũng vậy, và nhiều khi chỉ cần lặp lại để tinh chỉnh một chút các phần mơ hồ là nhược điểm biến mất. Tôi tò mò liệu có dòng nghiên cứu nào ủng hộ lập luận này hoặc chỉ ra những điểm dễ phát sinh vấn đề không
Cá nhân tôi thấy Claude và ChatGPT tạo mô hình ggplot tốt, nhưng khi có nhiều tùy biến thì hơi phức tạp hơn
Mô tả “các tham số cấp thấp dài dòng như tỉ lệ, trục, khoảng cách, bố cục” có vẻ như Microsoft đang trộn lẫn hai thứ khác nhau
LLM không thật sự quá bận tâm việc bản thân mã là cấp thấp hay dài dòng; chúng cũng có thể đọc tốt assembly hay SPIR-V. Vấn đề thật sự là cấu trúc thị giác. Vì LLM “nhìn” khác con người, việc hiểu cấu trúc không gian thông qua so sánh thị giác không tự nhiên; để đi đường vòng thì cần cung cấp một biểu diễn dễ để LLM suy luận và hiểu, như trực quan hóa dưới dạng mã. Nói cách khác, miễn là đó không phải một cấu trúc lồng sâu hoặc phải suy luận trạng thái ẩn là được
Ngoài ra, khó đồng ý với quyết định của Flint khi xử lý kiểu trong JSON xoay quanh khóa chuỗi. Nhìn vào đặc tả thực tế, họ hoàn toàn có thể làm nó thành một thư viện TypeScript dễ dùng cho con người, và có lẽ như vậy sẽ tốt hơn nhiều. Sau này khi thật sự xem mã nguồn, nó hoàn thiện và tinh vi hơn nhiều so với bản mockup tôi từng giả định chỉ dựa trên tài liệu, nhưng bất mãn cốt lõi về “JSON khóa chuỗi so với bề mặt viết generic thật sự” vẫn còn
chartTypethì tôi thấy không thanh lịch lắm vì template cần mở rộng được hơn. Phần này cần sửaỞ các phần khác, việc dùng JSON trong thư viện trực quan hóa hoặc biểu đồ là khá phổ biến, vì có thể dễ dàng chuyển sang các ngữ cảnh render khác nhau
Bài liên quan: https://www.openui.com/blog/stop-making-ai-write-json
Tôi quan tâm đến các DSL tùy chỉnh giúp tăng tính dự đoán được của LLM, và vui vì có vẻ một gã khổng lồ như Microsoft cũng hiểu điều này. Ví dụ Contacts ở https://slangify.org/examples là cách dễ dàng tự tạo DSL trong khi chuyển đổi qua lại giữa VCARD và JCARD
Nhìn mô tả “bắt phải nêu tường minh các quyết định thị giác mà một compiler tốt nên xử lý”, tôi tự hỏi chẳng phải Graphviz tồn tại vì cùng lý do đó sao
Thấy họ dùng JSON làm ngôn ngữ khai báo; dù công nhận LLM xử lý JSON tốt, đây không phải cú pháp dễ tiêu thụ cho con người
Flint được thiết kế có chủ đích để agent bỏ qua các tham số cấp thấp như tỉ lệ, trục, mốc 0, kích thước bước. Những yếu tố này rất quan trọng để có biểu đồ đẹp, và compiler sẽ tối ưu động. Vì vậy AI agent có thể xử lý dễ hơn
Việc dùng kiểu ngữ nghĩa như một yếu tố định dạng bổ sung rất hữu ích, vì nó mã hóa gọn rất nhiều boilerplate định dạng
Tôi tò mò liệu có kế hoạch chia sẻ registry kiểu của Flint hoặc làm nó có thể mở rộng không. Tôi cũng tò mò vì sao không đặt hẳn nó làm thuộc tính dữ liệu. Khi tạo các biểu đồ liên kết cấp cao hơn trên Vega-Lite, tôi gần như đã đi đến cùng một đặc tả
Tôi không rõ trọng tâm của dự án này là gì. Từ thời GPT-3.5, có vẻ LLM đã có thể tạo ra matplotlib trong một lần
Tôi đã dùng LLM khá nhiều cho trực quan hóa dữ liệu nhưng không gặp vấn đề gì đáng kể. Tôi muốn xem ví dụ cụ thể agent gặp khó ở đâu trong việc tạo trực quan hóa, và Flint giải quyết chuyện đó như thế nào
Nhưng khi đưa vào công cụ dành cho người dùng cuối, tỉ lệ thành công 80% trong việc tạo biểu đồ đẹp bắt đầu trở thành vấn đề lớn. Tôi đã gặp chuyện này khi xây dựng hệ thống phân tích dữ liệu. Nếu để nó trực tiếp tạo matplotlib hoặc Vega-Lite thì khó đạt đồng thời độ ổn định, sức biểu đạt, chi phí thời gian và token; vì vậy ngôn ngữ này được thiết kế như một thỏa hiệp: chuyển một số quyết định sang compiler để giảm chi phí tạo, đồng thời vẫn giữ sức biểu đạt
Trang dự án: https://microsoft.github.io/flint-chart/
Cấu hình MCP: https://microsoft.github.io/flint-chart/#/mcp