Tôi đã xây dựng một trình chỉnh sửa CAD trên trình duyệt, sau đó dạy một LLM cách sử dụng nó
Tôi đã hỏi ứng dụng của mình: "Có bao nhiêu cửa và cửa sổ?"
AI đã trả lời kèm theo số lượng. Sau đó, nó tự động thêm một ý kiến không được yêu cầu:
"Lưu ý: D3 chỉ rộng 300 mm. Đây có thể là một cánh cửa bị nhận diện sai. Bạn có muốn tôi kiểm tra không?"
Nó đã đúng. Hệ thống của tôi đã biến một phần hình học thành một cánh cửa chỉ rộng 30 cm. Không một con người nào nhận ra điều đó. Mô hình đã đọc dữ liệu, thấy một cánh cửa hẹp hơn cả một chiếc hộp đựng giày, và đã đánh dấu nó.
Khoảnh khắc đó là thành quả cho một thách thức kỹ thuật khổng lồ. Tôi đã phải phân tích các tệp AutoCAD DWG, tái cấu trúc mô hình tòa nhà từ hàng ngàn đường kẻ ngẫu nhiên, xây dựng một trình chỉnh sửa 2D từ con số không và kết nối nó với Claude.
Dưới đây là cách tôi đã thực hiện.
Vấn đề về Dữ liệu
Một tệp DWG không chứa các bức tường. Nó chỉ chứa các đường kẻ. Mọi điều thú vị trong dự án này đều nằm ở khoảng trống giữa hai câu nói đó.
Tôi đã tuân theo hai quy tắc để xử lý các tệp này:
- Chạy trình phân tích (parser) dưới dạng một tiến trình con (subprocess). Nếu trình phân tích 30 năm tuổi bị lỗi, nó sẽ không làm sập máy chủ của tôi.
- Đừng bao giờ tin tưởng tệp tin. Các tiêu đề (header) của DWG thường cung cấp sai thông tin về đơn vị. Tôi bỏ qua tiêu đề và nhìn vào các con số thực tế để tìm ra tỷ lệ chính xác.
Quy trình Trích xuất
Tôi đã biến một "mớ hỗn độn" các đường kẻ thành một mô hình có cấu trúc:
- Tường là các đường tâm (centerlines).
- Cửa và cửa sổ được gắn (snap) vào các bức tường chủ.
- Các phòng là các đa giác có tên và diện tích.
Tôi đã sử dụng một mẹo đơn giản để phân loại. Tôi dùng phương pháp khớp chuỗi con (substring matching) cho tên các lớp (layer). Nếu một lớp có tên là "WAND" hoặc "MAUER", hệ thống sẽ biết đó là tường. Nếu một lớp không có tên, hệ thống sẽ dựa vào hình học để dự đoán.
Trình chỉnh sửa
Tôi đã xây dựng trình chỉnh sửa bằng cách sử dụng Canvas 2D context thuần túy. Để giữ tốc độ nhanh, tôi đã sử dụng ba lớp:
- Lớp 1: Lưới tĩnh và các đường kẻ gốc.
- Lớp 2: Mô hình (tường, phòng, cửa).
- Lớp 3: Con trỏ đang hoạt động và các bản xem trước.
Điều này giúp duy trì tốc độ khung hình ở mức 60 FPS ngay cả khi có gần 1.000 bức tường.
Trợ lý AI (AI Copilot)
Tôi không muốn một chatbot chỉ biết nói. Tôi muốn một tác nhân (agent) có thể làm việc. Tôi đã cung cấp cho Claude mười ba công cụ để đọc và chỉnh sửa mô hình.
Để đảm bảo an toàn, tôi đã tuân theo ba quy tắc:
- Một lộ trình ghi duy nhất: AI sử dụng chính xác cùng một mã nguồn đã được xác thực như giao diện người dùng (UI) thủ công. Nếu UI không thể lưu, AI cũng không thể lưu.
- Lỗi có thể phục hồi: Nếu AI cố gắng đặt một cánh cửa vào nơi không vừa, công cụ sẽ trả về một lỗi. AI sẽ đọc lỗi đó và thử một vị trí khác.
- Cơ chế hoàn tác (undo): Mọi hành động của AI đều được gộp vào một giao dịch (transaction) duy nhất. Nếu AI mắc lỗi, chỉ cần nhấn Ctrl+Z là mọi thứ sẽ được khắc phục.
Những bài học rút ra
- Các lỗi hình học thường ẩn nấp trong những hình dạng mà bạn không kiểm thử. Các tòa nhà hình chữ nhật thì dễ. Các tòa nhà hình chữ L sẽ làm hỏng mọi thứ.
- Hãy "fuzz" các công cụ của bạn. LLM bản chất là một công cụ fuzzing. Hãy đối phó với nó bằng các ranh giới mã nguồn nghiêm ngặt.
- Phần khó nhất không phải là AI. Mà là nền tảng dữ liệu. Nhờ hình học vững chắc, việc tích hợp AI chỉ mất vài ngày thay vì vài tuần.
Nguồn: https://dev.to/arif/i-built-a-cad-editor-in-the-browser-then-taught-an-llm-to-use-it-1l92
