
Giới thiệu dự án
jev-chat-jarvis là công cụ hỗ trợ tin nhắn WeChat dành cho macOS. Khi WeChat xuất hiện tin nhắn văn bản được xác nhận rõ ràng là đến từ đối phương, công cụ đọc nội dung trên màn hình và dùng mô hình cục bộ để phân tích, sau đó hiển thị ý định thực sự của câu nói, mức độ rủi ro từ 0 đến 9, đề xuất hành động và các câu trả lời gợi ý.
Công cụ hoạt động ở chế độ chỉ đọc, không chèn mã vào WeChat, không hook, không giải mã cơ sở dữ liệu và không tự động gửi tin nhắn. Người dùng có thể sao chép nội dung gợi ý trong bảng nổi hoặc nhấp vào “Điền” để đưa văn bản vào ô nhập WeChat; việc gửi cuối cùng vẫn do người dùng tự thực hiện.
Tính năng chính
- Phân tích ý định và rủi ro: hỗ trợ nhận diện zero-shot 8 nhóm ý định, đồng thời đưa ra phân cấp rủi ro và đề xuất hành động. README của dự án lấy 22 mẫu hồi quy tiếng Trung làm chuẩn, với tỷ lệ nhận diện ý định là 86.4%.
- Tạo câu trả lời gợi ý: tích hợp 10 kiểu diễn đạt, mỗi kiểu tạo hai nhóm gợi ý gồm thận trọng và thoải mái, sau đó được mô hình cục bộ xếp hạng.
- Xử lý đồng thời: việc xác định tin nhắn và tạo câu trả lời gợi ý có thể khởi chạy cùng lúc. Thời gian tham khảo trên M1 Pro do README nêu là khoảng 1.5 giây cho ý định và khoảng 1.5 đến 2 giây cho gợi ý; tốc độ thực tế phụ thuộc vào thiết bị và dịch vụ.
- Khung phát hiện YOLO: có thể tùy chọn đánh dấu các tin nhắn được OCR nhận diện trong cửa sổ WeChat, phân biệt tin nhắn của đối phương với tin nhắn của chính người dùng và hiển thị độ tin cậy.
- Bảng nổi gốc: bảng hiển thị cuộc trò chuyện hiện tại, trạng thái phân tích, tin nhắn đang chờ xử lý, ngữ cảnh, ý định, tỷ lệ nhận diện, mức độ rủi ro, đề xuất hành động và các câu trả lời gợi ý.
Cài đặt và khởi động lần đầu
Cách một: Tải ứng dụng macOS
Nếu chỉ muốn sử dụng trực tiếp, bạn có thể tải gói macOS nén từ Releases, giải nén rồi kéo tệp .app vào “Ứng dụng”. Vì ứng dụng chưa được notarize, khi khởi động lần đầu hãy nhấp chuột phải vào ứng dụng trong Finder và chọn “Mở”, không nhấp đúp trực tiếp.
Nếu macOS hiển thị “Ứng dụng bị hỏng và không thể mở. Bạn nên chuyển ứng dụng vào Thùng rác”, nguyên nhân thường là gói nén tải từ trình duyệt có thuộc tính cách ly. Không xóa ứng dụng ngay; hãy mở Terminal và chạy:

sudo xattr -r -d com.apple.quarantine /Applications/jev-jarvis.appNếu tên ứng dụng đã bị đổi, chẳng hạn jev-jarvis 2.app, hãy thay đường dẫn trong lệnh bằng đường dẫn thực tế.
Cách hai: Chạy từ mã nguồn
Trước khi chạy từ mã nguồn, hãy bảo đảm WeChat đã được khởi động và Terminal hoặc ứng dụng khởi chạy có quyền ghi màn hình. Sau khi vào thư mục dự án, chạy:
./start.commandDự án sử dụng uv để quản lý môi trường Python. Nếu hệ thống không có uv khả dụng, cả hai điểm khởi động đều sẽ thử tải xuống và chạy tập lệnh cài đặt chính thức; nếu thất bại, chúng sẽ tiếp tục thử sử dụng Homebrew hiện có. Nhật ký cài đặt và khởi động nằm tại:
~/Library/Logs/jev-jarvis.logCấp quyền cho macOS
Khi khởi động lần đầu, hãy làm theo hướng dẫn để bật quyền “Ghi màn hình” cho jev-chat-jarvis trong “Cài đặt hệ thống > Quyền riêng tư và bảo mật”, sau đó thoát và mở lại ứng dụng để quyền có hiệu lực.
Tính năng “Điền” cũng cần quyền “Trợ năng”. Khi nhấp vào “Điền” lần đầu, hệ thống thường sẽ hiển thị yêu cầu cấp quyền. Phiên bản v0.3.1 và các phiên bản cũ hơn còn cần cấp quyền tương ứng cho python3.12.
Các quyền này được dùng để đọc nội dung cửa sổ WeChat, xác định điều khiển nhập liệu và thực hiện thao tác điền, không có nghĩa là công cụ sẽ tự động gửi tin nhắn.
Cấu hình mô hình và khóa
Dự án gồm tầng phán đoán và tầng tạo nội dung; cả hai tầng đều có thể không điền khóa:
- Tầng phán đoán: nếu không cấu hình khóa TypeSafe Jev, công cụ sử dụng mô hình cục bộ
decider-2b. Lần tải đầu tiên cần khoảng 7 GB. - Tầng tạo nội dung: ứng dụng đóng gói có sẵn khóa dùng chung, vì vậy có thể thử tạo câu trả lời gợi ý mà không cần cấu hình khóa cá nhân.
Sử dụng cài đặt đồ họa
Nhấp vào biểu tượng bánh răng ở góc trên bên phải của cửa sổ nổi hoặc mở “J > Cài đặt mô hình…” từ thanh menu để mở cửa sổ cấu hình. Giao diện cài đặt hỗ trợ chỉnh sửa địa chỉ, khóa và mô hình của ba nhóm dịch vụ Jev, OpenAI tương thích và Anthropic tương thích.
Bạn có thể nhấp vào “Lấy danh sách mô hình” để đọc mô hình từ API /models của dịch vụ, hoặc nhập thủ công khi API không được hỗ trợ hay yêu cầu thất bại. Sau khi chọn mô hình, bạn có thể nhấp vào “Kiểm tra kết nối”; bài kiểm tra sử dụng cấu hình chưa lưu để gửi một lời chào cố định, không đọc nội dung WeChat nhưng có thể phát sinh một khoản phí dịch vụ nhỏ.
Sau khi lưu cấu hình, bắt buộc phải thoát và mở lại ứng dụng; cấu hình sẽ không được chuyển đổi ngay trong lần chạy hiện tại. Tệp mặc định được chỉnh sửa trong cửa sổ cài đặt là:
$XDG_CONFIG_HOME/jev-jarvis/envNếu chưa đặt XDG_CONFIG_HOME, đường dẫn thực tế là:
~/.config/jev-jarvis/envTạo tệp môi trường thủ công
Bạn cũng có thể tạo tệp cấu hình trong Terminal:
mkdir -p ~/.config/jev-jarvis
cat > ~/.config/jev-jarvis/env <<'ENV'
# Tầng phán đoán (tùy chọn): để trống sẽ dùng decider-2b cục bộ
export TYPESAFE_API_KEY=""
# Tầng tạo nội dung: endpoint tương thích OpenAI bất kỳ
export OPENAI_API_KEY="sk-khóa-của-bạn"
export OPENAI_BASE_URL="https://api.deepseek.com"
export OPENAI_MODEL="deepseek-chat"
# Một số mô hình cần tắt chế độ suy nghĩ
# export OPENAI_EXTRA_BODY='{"enable_thinking":false}'
ENV
chmod 600 ~/.config/jev-jarvis/envThứ tự ưu tiên cấu hình là: biến môi trường cao hơn tệp env của người dùng, tệp env của người dùng cao hơn .env của dự án. Trong tầng tạo nội dung, cấu hình OpenAI được ưu tiên hơn cấu hình Anthropic; chỉ khi cả hai đều chưa được cấu hình thì khóa dùng chung tích hợp sẵn mới được sử dụng.
Lưu ý khi chọn dịch vụ
- DeepSeek có thể sử dụng
deepseek-chat; README liệt kê đây là lựa chọn có tốc độ thực tế nhanh hơn. - Zhipu có thể sử dụng
glm-4-flash, đồng thời điền các biến tương ứng theo nhóm cấu hình được dự án hỗ trợ. - Ollama cục bộ có thể điền
http://localhost:11434/v1, sử dụng khóaollamavà mô hình nhưqwen2.5:7b. - Hạn chế sử dụng mô hình thinking. README lưu ý rằng quá trình suy nghĩ có thể dùng hết
max_tokens, khiến câu trả lời gợi ý bị rỗng; khi sử dụng DeepSeek nên chọndeepseek-chat.
Sử dụng lần đầu

Sau khi khởi động ứng dụng và mở WeChat, hãy giữ cửa sổ trò chuyện WeChat ở trạng thái có thể sử dụng. Công cụ đọc khu vực trò chuyện thông qua nội dung cửa sổ và Vision OCR, không yêu cầu chụp trực tiếp màn hình hệ thống, vì vậy bảng nổi sẽ không làm nhiễu OCR.
Khi nhận diện được tin nhắn văn bản rõ ràng đến từ đối phương, bảng sẽ lần lượt hiển thị cuộc trò chuyện hiện tại và trạng thái phân tích, tin nhắn cùng ngữ cảnh đang được xử lý, ý định, tỷ lệ nhận diện, mức độ rủi ro, đề xuất hành động và các câu trả lời gợi ý được sắp xếp theo từng kiểu diễn đạt.
Bên trái mỗi gợi ý hiển thị xác suất xếp hạng cục bộ; bên phải có nút “Sao chép” và “Điền”. “Sao chép” giúp dán thủ công; “Điền” đưa văn bản vào ô nhập WeChat nhưng không tự động nhấp nút gửi.
Ví dụ sử dụng
Ví dụ, khi đối phương gửi “Việc này hôm nay bạn theo dõi giúp nhé”, công cụ sẽ chuyển tin nhắn cho tầng phán đoán để nhận diện và đưa ra đề xuất hành động dựa trên kết quả rủi ro; sau đó tầng tạo nội dung sẽ đồng thời tạo các câu trả lời gợi ý với nhiều sắc thái, rồi sắp xếp lại theo thứ tự cục bộ. Bạn có thể chọn một câu dựa trên ngữ cảnh, nhấp “Sao chép” hoặc “Điền”, sau đó tự kiểm tra và gửi.
Nếu không thể xác định hướng tin nhắn, chẳng hạn văn bản kéo dài qua trái phải hoặc nằm ở vị trí chính giữa, bảng sẽ đánh dấu là “Chưa xác nhận hướng” và không coi đó là mục tiêu trả lời. Chỉ tin nhắn được xác định rõ ràng là của đối phương mới kích hoạt việc phán đoán và tạo nội dung.
Mẹo sử dụng nâng cao
Bật khung phát hiện YOLO
Có thể bật khung phát hiện khi khởi động bằng biến môi trường:
JEV_BOXES=1Sau khi khởi động, bạn cũng có thể chuyển đổi “Khung phát hiện YOLO” từ thanh menu. Khung phát hiện được làm mới khoảng mỗi giây: đường liền màu xanh lam biểu thị điều khiển nhập liệu được giao diện trợ năng xác định; đường nét đứt màu cam biểu thị khu vực nhập liệu được suy đoán dựa trên ranh giới ảnh chụp màn hình. Đường nét đứt không có nghĩa là chắc chắn đã lấy được điều khiển có thể ghi.
Tùy chỉnh kiểu diễn đạt
Thêm hoặc ghi đè kiểu diễn đạt bằng JEV_TONES. Mỗi kiểu được phân tách bằng |, theo định dạng “tên=mô tả”, ví dụ:
export JEV_TONES='Bậc thầy né việc=Như một người lão luyện trong việc né việc, đẩy việc đi thật khéo mà vẫn lịch sự'Phần mô tả nên nêu rõ sắc thái mong muốn và phong cách không được biến thành. Sau khi thay đổi cần khởi động lại ứng dụng. Hiện tại cửa sổ cài đặt không chỉnh sửa JEV_TONES, JEV_BOXES và OPENAI_EXTRA_BODY.
Tự kiểm tra và khắc phục theo từng tầng
Khi chạy từ mã nguồn, có thể kiểm tra riêng các quy trình nhận biết, phán đoán, tạo nội dung và hồi quy:
uv run python src/perception.py
uv run python src/judge.py "Việc này hôm nay bạn theo dõi giúp nhé"
uv run python src/judge_zh_test.py
uv run python src/generate.py --check
uv run python -B -m unittest discover -s tests
uv run python probe/bootstrap_regression.pyTrong đó, --check của tầng tạo nội dung chỉ kiểm tra việc phân tích thông tin xác thực, không tương đương với kiểm tra kết nối thực tế. Để xác nhận dịch vụ có thể tạo văn bản, hãy sử dụng “Kiểm tra kết nối” trong cửa sổ cài đặt.
Xem nhật ký và giải phóng dung lượng đĩa
Nếu việc xử lý tin nhắn đầu tiên sau khi khởi động chậm, nguyên nhân thường là mô hình cục bộ đang khởi động làm nóng. Có thể xem nhật ký gần đây:
tail -40 ~/Library/Logs/jev-jarvis.logNhật ký bao gồm thời gian xử lý theo từng giai đoạn nhưng không chứa nội dung tin nhắn, phù hợp để cung cấp cho nhà phát triển khi phản hồi sự cố.
Bộ nhớ đệm của mô hình phán đoán cục bộ chiếm khoảng 7 GB, nằm tại:
~/.cache/huggingface/hub/models--Mapika--decider-2bSau khi xóa, mô hình sẽ được tải xuống lại vào lần tiếp theo sử dụng phán đoán cục bộ. Môi trường ảo Python nằm tại:
~/Library/Application Support/jev-jarvis/venvViệc xóa ứng dụng không tự động xóa môi trường này; khi cần, bạn có thể dọn dẹp thủ công.
Giới hạn của tính năng “Điền”
Công cụ ưu tiên sử dụng giao diện trợ năng của macOS để ghi và đọc lại nhằm xác nhận. Khi một số phiên bản WeChat không cung cấp điều khiển nhập liệu, công cụ sẽ thử đường dẫn tương thích trực quan: kiểm tra lại cửa sổ, khu vực nhập và tiêu đề, kích hoạt WeChat, nhấp vào khu vực nhập, nhập văn bản rồi đối chiếu bằng OCR.
Khi sử dụng đường dẫn tương thích trực quan, công cụ có thể di chuyển chuột, vì vậy trong thời gian điền không nên thao tác bàn phím, chuột hoặc chuyển cuộc trò chuyện. Công cụ không sử dụng clipboard hay Cmd+V, không tự động nhấn phím gửi; ký tự xuống dòng và tab sẽ được chuyển thành dấu cách.
Nếu phát hiện bản nháp đã có sẵn, đường dẫn tương thích sẽ dừng và nhắc người dùng sử dụng “Sao chép” thủ công; đường dẫn này cũng dừng khi cửa sổ, tiêu điểm hoặc phiên trò chuyện thay đổi. Do ranh giới trực quan và OCR có thể nhận diện sai, hãy kiểm tra cuộc trò chuyện hiện tại và nội dung ô nhập trước khi sử dụng.
Giới hạn đã biết
- Không thể đọc nội dung hình ảnh và sticker; tin nhắn trích dẫn được xử lý như văn bản thông thường; thẻ của tài khoản chính thức có thể bị coi là tin nhắn để phân tích.
- Bố cục WeChat toàn màn hình hoặc việc thay đổi phiên bản WeChat có thể khiến nhận diện không hoạt động; các hằng số bố cục liên quan nằm ở đầu
src/perception.py. - Trong trường hợp có nhiều cửa sổ, công cụ ưu tiên nhận diện cửa sổ chính “微信” hoặc “WeChat”.
- Chỉ tin nhắn của đối phương có hướng được xác nhận rõ ràng mới kích hoạt quy trình trả lời; tin nhắn không thể xác nhận hướng sẽ bị bỏ qua.
- Đường dẫn điền tương thích trực quan trong chủ đề tối, nhiều màn hình và các phiên bản WeChat khác nhau vẫn cần được kiểm chứng thêm.
Lưu ý về quyền riêng tư và sử dụng
Dự án được thiết kế để đọc nội dung màn hình trên thiết bị và tài khoản của chính bạn, không chèn mã, không hook, không giải mã cơ sở dữ liệu WeChat và không tự động gửi tin nhắn. Vui lòng chỉ sử dụng trên thiết bị của bạn và tuân thủ thỏa thuận cấp phép phần mềm WeChat. Việc WeChat cập nhật có thể khiến tính năng nhận diện bố cục bị lỗi; khi gặp vấn đề, bạn có thể xem nhật ký trước, sau đó phản hồi qua issue của dự án.
Tóm tắt
jev-chat-jarvis kết hợp OCR màn hình, phán đoán ý định cục bộ, phân cấp rủi ro, tạo câu trả lời đề xuất và bảng điều khiển nổi gốc, phù hợp với người dùng macOS muốn nhanh chóng hiểu tin nhắn WeChat và giảm áp lực trả lời. Khi cài đặt, cần đặc biệt xử lý Gatekeeper cùng quyền ghi màn hình và trợ năng; khi sử dụng, hãy chọn mô hình cục bộ, dịch vụ tương thích với OpenAI hoặc dịch vụ tương thích với Anthropic tùy theo yêu cầu về quyền riêng tư, tốc độ và chi phí, đồng thời luôn kiểm tra nội dung thủ công trước khi gửi.
