Đây là bài dự thi cho Thử thách cuối tuần Hacktoberfest: Xây dựng cho một người bạn.
Những gì tôi đã xây dựng
Mọi công cụ AI mà bạn tôi Akshay từng cài đặt đều cố gắng giúp anh ấy thực hiện một việc.
Vấn đề là việc đó thường là mua sắm vào lúc hai giờ sáng.
Akshay không có vấn đề mua sắm theo nghĩa nghiêm trọng. Anh ấy có vấn đề với khung giờ 2 giờ sáng. Một món đồ nào đó được thêm vào giỏ hàng trong ngày, anh ấy suy nghĩ về nó, và sau đó vào một thời điểm nào đó sau nửa đêm, anh ấy thức dậy và lướt web, việc suy nghĩ về món đồ đó lặng lẽ không còn ý nghĩa. Anh ấy không bối rối vào khoảnh khắc đó và anh ấy không cần thông tin. Anh ấy biết.
Đây là bài gửi tham gia Thử thách cuối tuần Hacktoberfest: Xây dựng cho một người bạn.
**Những gì tôi đã xây dựng**
Mọi công cụ AI mà bạn tôi, Akshay, từng cài đặt đều cố gắng giúp anh ấy thực hiện một việc.
Vấn đề là việc đó thường là mua sắm thứ gì đó vào lúc hai giờ sáng.
Akshay không có vấn đề mua sắm theo nghĩa nghiêm trọng. Anh ấy có vấn đề vào lúc 2 giờ sáng. Một món đồ nào đó được thêm vào giỏ hàng trong ngày, anh ấy suy nghĩ về nó, và sau đó vào một thời điểm nào đó sau nửa đêm, anh ấy thức dậy và lướt web, và việc suy nghĩ đó lặng lẽ không còn hiệu lực. Anh ấy không bối rối vào khoảnh khắc đó và anh ấy không cần thông tin. Anh ấy biết chính xác mình đang làm gì, và anh ấy vẫn làm, và phần khiến anh ấy phải trả giá là số tiền đó luôn là số tiền anh ấy đã có kế hoạch sử dụng.
Mọi phần mềm vào khoảnh khắc đó đều đứng về phía sai. Trang thanh toán được thiết kế để giúp bước tiếp theo dễ dàng. Công cụ đề xuất được thiết kế để tìm cho anh ấy thêm một món đồ nữa. Không có phần mềm nào trong luồng đó có nhiệm vụ làm cho việc mua sắm trở nên khó khăn hơn.
Vì vậy, tôi đã xây dựng cho anh ấy The Veto: một mô hình mã nguồn mở cục bộ với nhiệm vụ duy nhất là ngăn chặn anh ấy. Nó không thể giúp đỡ. Nó không thể viết lại bất cứ điều gì, làm dịu bất cứ điều gì, hoặc đề xuất một phiên bản tốt hơn. Mọi khả năng mà bạn thường mong muốn từ một trợ lý đều bị loại bỏ khỏi lời nhắc hệ thống một cách có chủ ý. Nó chỉ được phép nói đúng ba điều.
Anh ấy viết các quy tắc về bản thân khi anh ấy bình tĩnh. Không phải chính sách, chỉ là những câu nói bằng lời của chính anh ấy:
*Tôi hối hận về bất cứ thứ gì tôi mua sau nửa đêm.*
*Tôi hối hận khi mua đồ vào một đêm mà tôi đã có một ngày tồi tệ.*
*Tôi hối hận về những tin nhắn tôi gửi sau 1 giờ sáng.*
Quy tắc cuối cùng có ở đó vì một khi một rào cản tồn tại, cùng một cơ chế sẽ bao gồm cả những việc khác bạn làm vào lúc 2 giờ sáng mà bạn hối hận vào lúc 9 giờ sáng. Các quy tắc mua hàng là những quy tắc được xây dựng cho Akshay.
Sau đó, vài giây sau, giữa lúc muốn món đồ và nhấp vào nút, một mô hình chạy trên máy tính xách tay của anh ấy sẽ đọc những gì anh ấy sắp thực hiện, kiểm tra nó dựa trên các quy tắc của anh ấy và không có gì khác, và trả về một trong ba phán quyết:
| Phán quyết | Điều gì xảy ra |
|---|---|
| PASS | Không vi phạm quy tắc nào của anh ấy. Nó sẽ không can thiệp. Anh ấy không bao giờ nhìn thấy nó. |
| HOLD | Vi phạm một quy tắc. Việc gửi bị chặn, một bộ đếm ngược bắt đầu, và câu nói của chính anh ấy được trích dẫn lại cho anh ấy. |
| ASK | Vi phạm một quy tắc mà chỉ anh ấy mới có thể giải quyết. Một câu hỏi, theo cách diễn đạt của anh ấy, được trả lời trước khi quyền ghi đè được mở khóa. |
Đây không phải là một bộ lọc an toàn. Nó không có ý kiến về việc món đồ anh ấy đang mua có đắt tiền hay không, hoặc liệu tin nhắn anh ấy đang gửi có không khôn ngoan hay không. Một giao dịch mua 4.000 ₹ vào lúc 2 giờ chiều sẽ được thông qua. Giao dịch mua tương tự vào lúc 2 giờ sáng thì không. Điều duy nhất quan trọng là những gì anh ấy đã viết về bản thân mình.
**Bản thử nghiệm**
Một giao dịch thanh toán thực tế, bị chặn. Quy tắc là của anh ấy. Đồng hồ là thật. Mô hình đang chạy trên cùng một máy tính xách tay.
Anh ấy ghi đè nó, và đó là điểm mấu chốt. Một cánh cổng bạn không thể mở sẽ bị xé toạc khỏi tường. Vì vậy, anh ấy mở nó, giao dịch mua được thực hiện, và sau đó sổ quy tắc hỏi anh ấy câu hỏi duy nhất quan trọng. Lần giữ tiếp theo đối với quy tắc đó là 180 giây.
Và phần dễ quên. Cùng một cánh cổng, cùng một người soạn thảo, cách nhau vài giây: một tin nhắn bị giữ lại, tin nhắn tiếp theo được gửi thẳng, không bị chạm đến. Một Veto ngăn chặn mọi thứ là một Veto không ai giữ lại.
**Mã nguồn**
imarpanpatra / veto
The Veto
Bạn tôi không thể ngừng mua sắm vào lúc 2 giờ sáng. Vì vậy, tôi đã xây dựng một AI có thể.
Một mô hình mã nguồn mở cục bộ với nhiệm vụ duy nhất là ngăn chặn bạn.
Mọi công cụ AI trong cuộc sống của bạn đều cố gắng giúp bạn thực hiện một việc gì đó. Công cụ này là công cụ duy nhất cố gắng ngăn cản bạn, và nó chạy hoàn toàn trên máy tính xách tay của chính bạn, bởi vì một công cụ đọc những gì bạn sắp nói, trước khi bạn nói, không nên là một lệnh gọi API.
Được xây dựng cho Thử thách cuối tuần Hacktoberfest: Xây dựng cho một người bạn.
Một giao dịch thanh toán thực tế, bị chặn bởi một quy tắc do chính anh ấy viết. Được đánh giá bởi gemma3:4b trên cùng một máy tính xách tay. Không có dữ liệu nào rời khỏi máy.
Sau đó là phần khiến nó không chỉ là một lời nhắc nhở: bạn luôn có thể bỏ qua nó, và sau đó nó sẽ hỏi bạn có hối tiếc về điều đó không. Câu trả lời đó là tín hiệu huấn luyện duy nhất trong hệ thống.
Nó hoạt động…
Xem trên GitHub
Khoảng 1.400 dòng mã. Các phần đáng đọc là `src/judge.js`, chứa lời nhắc đối kháng và các kiểm tra nền tảng, và `extension/content.js`, là bộ chặn không biết mình đang ở trang web nào.
Năm bộ kiểm thử, bởi vì phần lớn dự án là một mô hình nhỏ mắc lỗi theo những cách thú vị: bộ bảo vệ nền tảng (11 kiểm tra, không cần mô hình), bộ đếm lưu trữ thúc đẩy leo thang (12), kiểm thử đầu cuối với Gemma thực (9), hành vi mô hình (4) và độ ổn định phán quyết (12).
Cách tôi xây dựng nó
Gemma 3 4B thông qua Ollama, chạy cục bộ. Không có khóa API. Không có tài khoản. Daemon liên kết với 127.0.0.1 và không bao giờ thực hiện yêu cầu gửi đi.
Kiến trúc gồm ba phần:
Tiện ích mở rộng Chrome Daemon cục bộ (127.0.0.1:4777)
┌────────────────┐ ┌──────────────────────────┐
│ bộ chặn gửi │ bản nháp │ judge.js ── lời nhắc │
│ chung │ ───────────► │ hệ thống đối kháng│
│ │ │ │ │
│ lớp phủ: │ ◄─────────── │ ▼ │
│ GIỮ / HỎI │ phán quyết │ Ollama · gemma3:4b │
└────────────────┘ │ │ │
│ ▼ │
│ store.js ── quy tắc, │
│ dừng, ghi đè, │
│ lịch sử hối tiếc │
└──────────────────────────┘
không có mạng gửi đi
Nó chạy trên một chiếc ultrabook đời 2017: i5-8350U, không có GPU, suy luận 100% CPU. Chiếc máy đó đã định hình gần như mọi quyết định dưới đây, và trong mọi trường hợp đều tốt hơn.
Mô hình 1B đã dạy tôi không tin tưởng nó
Tôi bắt đầu với gemma3:1b vì nó có tốc độ tải xuống nhanh. Nó đã thất bại 3 trong số 4 kiểm tra hành vi, và nó thất bại theo cách mang tính hướng dẫn nhất: nó giữ lại mọi thứ, trích dẫn sai quy tắc và tự biện minh bằng ngôn ngữ của bộ lọc nội dung: "có khả năng gây vấn đề", "thiếu tôn trọng", "gây hại cho danh tiếng của bạn". Đó là một mô hình tự tạo ra khái niệm về sự gây hại của riêng nó, điều mà công cụ này tuyệt đối không được phép làm.
Tôi không thể khiến nó dừng lại bằng cách yêu cầu. Vì vậy, tôi đã ngừng yêu cầu và thay vào đó bắt nó tự chứng minh. Để chặn một bản nháp, mô hình phải trích dẫn các từ trong bản nháp vi phạm quy tắc, và mã kiểm tra xem những từ đó có thực sự ở đó hay không.
Hạn chế duy nhất đó đã biến một mô hình không đáng tin cậy thành một mô hình an toàn. Trong lần chạy 1B, bộ bảo vệ đã
Nguồn tin: Dev.to AI — Tác giả: Arpan Patra. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.