Chuyển đến nội dung chính
Hướng dẫn AI

Xóa dấu vết nguồn gốc AI khỏi văn bản và tệp của chính bạn

Hướng dẫn này giải thích cách cài đặt và chạy watermarks-remover, một dịch vụ Python và kỹ năng tác vụ cho tác nhân, dùng để kiểm tra và xóa các ký tự Unicode mang dữ liệu, siêu dữ liệu tài liệu và các dấu vết nguồn gốc được hỗ trợ khỏi nội dung mà bạn sở hữu hoặc được phép xử lý.

Xóa dấu vết nguồn gốc AI khỏi văn bản và tệp của chính bạn

watermarks-remover làm gì

watermarks-remover là một kỹ năng tác nhân và dịch vụ Python dùng để kiểm tra, loại bỏ các dấu vết nguồn gốc AI khỏi văn bản và những định dạng tệp được hỗ trợ. Công cụ này phục vụ mục đích bảo mật, nghiên cứu và làm sạch nội dung đối với tài liệu thuộc quyền sở hữu hoặc bạn được phép xử lý.

Kỹ năng tác nhân là một HTTP client gọn nhẹ. Nó không chứa phần triển khai làm sạch và không yêu cầu Python trên máy chủ của tác nhân. Thay vào đó, nó gửi công việc đến một dịch vụ chạy riêng được xây dựng bằng thư viện chuẩn Python.

Dự án chia công việc thành ba lĩnh vực:

  • Lớp văn bản A: loại bỏ một cách xác định các ký tự Unicode vô hình, khoảng trắng đặc biệt, ký tự điều khiển hai chiều và ký tự thẻ.
  • Lớp văn bản B: viết lại đáng kể văn bản để giảm các watermark lấy mẫu token theo thống kê. Đây là quá trình best-effort và có thể làm thay đổi phong cách hoặc giọng văn.
  • Làm sạch tệp: loại bỏ siêu dữ liệu C2PA, EXIF, XMP, thuộc tính tài liệu và container được hỗ trợ khỏi nhiều loại tệp.

Không công cụ nào có thể đảm bảo trình phát hiện của nhà cung cấp sẽ ngừng nhận diện nội dung. Hãy giữ lại các tệp gốc, kiểm tra mọi kết quả đã làm sạch và chỉ sử dụng dự án này trên nội dung thuộc quyền sở hữu hoặc bạn được phép xử lý.

Tính năng chính và định dạng được hỗ trợ

Các tập lệnh lõi yêu cầu Python 3.10 trở lên và chỉ sử dụng thư viện chuẩn. Các công cụ tùy chọn như c2patool, exiftool và qpdf sẽ được sử dụng khi có sẵn.

Đối tượng làm sạch được hỗ trợ

  • Hình ảnh: PNG, JPEG, WebP, AVIF, HEIC, BMP, GIF, TIFF và SVG.
  • Tài liệu: PDF, DOCX, XLSX, PPTX, EPUB và ODT.
  • Tệp văn bản và web: HTML và Markdown, bao gồm siêu dữ liệu được hỗ trợ, JSON-LD, các khóa AI frontmatter và dấu văn bản Lớp A.
  • Container phương tiện: MP4, MOV, M4A, M4V, WAV, MP3 và FLAC.

Các định dạng không được nhận diện sẽ không được tự động làm sạch. Những lệnh dành riêng cho văn bản cũng từ chối tệp nhị phân và hướng bạn đến các công cụ tệp tổng quát.

Hạn chế quan trọng

Chức năng làm sạch lõi không xử lý C2PA soft-bound hoặc watermark thuần pixel, âm thanh và video. Việc làm sạch PDF cần qpdf để loại bỏ cấu trúc, vì chỉnh sửa siêu dữ liệu gia tăng có thể để lại các byte có thể khôi phục. Một bước Ghostscript tùy chọn có thể xử lý siêu dữ liệu bên trong hình ảnh PDF được nhúng.

Phát hiện và làm sạch là hai chức năng riêng biệt. Các trình phát hiện tùy chọn cho MarkLLM, keyed-Gumbel, đường nối Claude và tính điểm SynthID hình ảnh chỉ được bật theo lựa chọn, đồng thời được thiết kế để nhẹ nhàng bỏ qua khi không khả dụng.

Cài đặt kỹ năng tác nhân

Sao chép hoặc tải repository về, chuyển đến thư mục của repository rồi chạy trình cài đặt. Lệnh sau cài đặt kỹ năng đầy đủ có dịch vụ hỗ trợ cho cấu hình Claude Code cá nhân:

python3 install_skill.py --skill remove-ai-marks --target claude-code

Các đích cài đặt khả dụng gồm:

  • --target claude-code cài đặt vào ~/.claude/skills/<skill>.
  • --target claude-project --project-dir PATH cài đặt vào PATH/.claude/skills/<skill>.
  • --target cowork tạo dist/<skill>.zip để tải lên qua giao diện Skills trên đám mây.
  • --target cursor cài đặt vào ~/.cursor/skills/<skill>.

Dùng python3 install_skill.py --list để liệt kê các kỹ năng được cung cấp. Repository cung cấp kỹ năng đầy đủ remove-ai-marks và kỹ năng độc lập, chỉ dành cho văn bản clean-user-facing-text. Các bản cài đặt hiện có sẽ được sao lưu trừ khi bạn dùng --force. Để chỉnh sửa trực tiếp từ checkout, thêm --link.

Cài đặt plugin Claude Code

Người dùng Claude Code có thể cài đặt trực tiếp plugin từ marketplace:

/plugin marketplace add guillaumemeyer/watermarks-remover
/plugin install watermarks-remover@watermarks-remover

Sau đó, các kỹ năng sẽ được tải dưới dạng /watermarks-remover:remove-ai-marks và /watermarks-remover:clean-user-facing-text. Cập nhật plugin bằng:

/plugin marketplace update watermarks-remover

Liên kết kỹ năng cho Grok

mkdir -p ~/.grok/skills
ln -sfn "$(pwd)/skills/remove-ai-marks" ~/.grok/skills/remove-ai-marks

Khởi động dịch vụ

Chạy dịch vụ HTTP cục bộ từ repository:

make serve

Ngoài ra, khởi chạy rõ ràng tập lệnh máy chủ:

python3 service/scripts/server.py --host 127.0.0.1 --port 8765

Địa chỉ mặc định là http://127.0.0.1:8765. Nếu dịch vụ chạy ở nơi khác, hãy đặt WATERMARKS_SERVICE_URL cho kỹ năng. Theo mặc định, máy chủ liên kết với loopback, giúp tránh cho các máy khác truy cập trực tiếp.

Kiểm tra dịch vụ đang phản hồi:

curl -s http://127.0.0.1:8765/health

Endpoint health trả về một đối tượng chứa ok và phiên bản dịch vụ.

Kiểm tra và làm sạch tệp từ dòng lệnh

Quy trình an toàn nhất là kiểm tra tệp trước, ghi kết quả đã làm sạch vào một đường dẫn mới rồi so sánh kết quả với bản gốc.

SCRIPTS=service/scripts

python3 "$SCRIPTS/inspect_file.py" draft.md
python3 "$SCRIPTS/clean_file.py" draft.md -o draft.cleaned.md
python3 "$SCRIPTS/clean_file.py" photo.png -o photo.cleaned.png
python3 "$SCRIPTS/clean_file.py" notes.docx -o notes.cleaned.docx

Dùng inspect_file.py và clean_file.py cho cả container văn bản lẫn nhị phân. Các lệnh này sẽ chọn trình làm sạch được hỗ trợ phù hợp dựa trên tệp.

Làm sạch dấu văn bản Lớp A

Đối với dữ liệu đầu vào dạng văn bản thuần túy, hãy kiểm tra các ký tự Unicode vô hình và các ký tự mang thông tin dựa trên chỉnh sửa bằng:

python3 "$SCRIPTS/inspect_text.py" draft.md

Sau đó tạo một bản sao đã làm sạch và in thống kê:

python3 "$SCRIPTS/clean_text.py" draft.md -o draft.cleaned.md --stats

Lớp A mang tính xác định và được thiết kế để không làm mất nội dung đối với phần văn bản hiển thị. Không truyền DOCX, PDF, hình ảnh hoặc dữ liệu nhị phân khác vào các lệnh xử lý văn bản này; hãy sử dụng các lệnh xử lý tệp tương ứng.

Chuẩn bị bản viết lại Lớp B

Watermark văn bản thống kê yêu cầu viết lại thay vì chỉ xóa ký tự. Theo mặc định, lệnh viết lại sẽ in ra một lời nhắc:

python3 "$SCRIPTS/rewrite_text.py" draft.md --backend print-prompt --strength paraphrase

Lớp B hoạt động lặp và chỉ mang tính nỗ lực tối đa. Nó có thể làm giảm độ trung thực với phong cách và giọng văn ban đầu. Khi chất lượng quan trọng hơn việc xử lý watermark, dự án khuyến nghị sử dụng Lớp A và làm sạch tệp, đồng thời giữ nguyên văn bản gốc.

Sử dụng API HTTP

Dịch vụ cung cấp các chức năng kiểm tra, phát hiện, làm sạch, xử lý hàng loạt, khám phá khả năng và đặc tả OpenAPI.

  • GET /health báo cáo tình trạng và phiên bản dịch vụ.
  • GET /capabilities báo cáo các công cụ tùy chọn và backend hiện có.
  • GET /openapi.json trả về đặc tả OpenAPI 3.0.3.
  • POST /inspect trả về loại đầu vào, trạng thái đáng ngờ và báo cáo.
  • POST /detect trả về kết quả của các bộ phát hiện đã cấu hình.
  • POST /clean trả về dữ liệu base64 đã làm sạch và báo cáo.
  • POST /inspect/batch và POST /clean/batch xử lý tối đa 50 tệp trong mỗi yêu cầu.

Ví dụ sau mã hóa tệp Markdown thành base64 và gửi tệp đó đến endpoint làm sạch:

WM="http://127.0.0.1:8765"
curl -s "$WM/health"
curl -s -X POST "$WM/clean" -H 'Content-Type: application/json' \
  -d "{\"file\": \"$(base64 < notes.md | tr -d '\n')\", \"name\": \"notes.md\"}"

Đặt WATERMARKS_SERVER_API_KEY để yêu cầu xác thực bearer. Nếu triển khai bên ngoài máy phát triển cục bộ, hãy duy trì xác thực và các biện pháp kiểm soát mạng phù hợp.

Chạy dịch vụ bằng Docker

Xây dựng và chạy image lõi với hệ thống tệp chỉ đọc và một thư mục tạm thời:

make docker-core-build
docker run --rm -p 127.0.0.1:8765:8765 --read-only --tmpfs /tmp watermarks-remover

Docker Compose hỗ trợ một số profile:

docker compose up -d
docker compose --profile harness up -d
docker compose --profile heavy up -d
  • Mặc định, dịch vụ lõi sẽ được khởi động.
  • Profile harness bổ sung các thành phần MarkLLM và MarkDiffusion.
  • Profile heavy bổ sung các thành phần CtrlRegen và SynthID được xây dựng cục bộ.

Các image Core, MarkLLM và MarkDiffusion được phát hành trên GHCR. CtrlRegen và bộ chấm điểm SynthID chỉ được giữ ở chế độ cục bộ vì lý do giấy phép từ upstream. Sao chép .env.example thành .env để cấu hình tùy chọn; việc làm sạch văn bản cơ bản không yêu cầu thiết lập bổ sung.

Bật kiểm tra tự động bằng hook

Skill của agent là một chỉ dẫn, vì vậy mô hình sẽ quyết định có gọi nó hay không. Hook mang tính xác định hơn: nó chạy mỗi khi có lệnh gọi công cụ phù hợp.

Plugin Claude Code đăng ký một hook PostToolUse cho Write, Edit, MultiEdit và NotebookEdit. Hook này gọi service/scripts/hook_written_file.py ở một trong hai chế độ:

  • check: chế độ mặc định báo cáo các dấu đánh dấu nhưng không sửa đổi tệp.
  • clean: xóa các dấu đánh dấu được hỗ trợ trực tiếp trong tệp và thông báo cho mô hình.

Chọn chế độ thông qua cài đặt Hook mode của plugin hoặc đặt:

WATERMARKS_HOOK_MODE=clean

Nếu không dùng plugin, bạn có thể đăng ký hook thủ công trong ~/.claude/settings.json. Hook bao phủ các tệp do agent ghi và cổng kiểm tra trước khi commit, nhưng việc làm sạch văn bản trực tiếp trong bản ghi trò chuyện vẫn chỉ mang tính nỗ lực tối đa và phụ thuộc vào skill.

Thêm kiểm tra trước khi commit

Để ngăn các tệp có dấu đánh dấu trước khi chúng được đưa vào commit Git, hãy thêm hook kiểm tra của repository vào .pre-commit-config.yaml:

repos:
  - repo: https://github.com/guillaumemeyer/watermarks-remover
    rev: v0.5.0
    hooks:
      - id: watermarks-remover-check

Hook watermarks-remover-check sẽ thất bại khi phát hiện dấu đánh dấu. Hook thay thế watermarks-remover-clean làm sạch tệp trực tiếp và phải được chủ động bật.

Mẹo nâng cao

Giữ bản gốc và so sánh kết quả

Nếu có thể, hãy ghi dữ liệu đã làm sạch vào một đường dẫn đầu ra riêng. Điều này đặc biệt quan trọng đối với các bản viết lại Lớp B và những vùng chứa tài liệu phức tạp, nơi quá trình xử lý có thể ảnh hưởng đến văn bản, tài sản nhúng hoặc thuộc tính riêng của ứng dụng.

Cài đặt đúng công cụ PDF

Sử dụng qpdf khi cần loại bỏ cấu trúc PDF thực sự. README cảnh báo rằng chỉ dùng exiftool sẽ thực hiện cập nhật gia tăng, có thể khiến các byte cũ vẫn khôi phục được. Sử dụng bước xử lý sâu Ghostscript tùy chọn khi siêu dữ liệu có thể nằm bên trong hình ảnh nhúng.

Coi phát hiện và làm sạch là hai thao tác khác nhau

Thao tác làm sạch xóa các lớp mang và siêu dữ liệu được hỗ trợ, còn bộ phát hiện ước tính liệu một sơ đồ watermark đã cấu hình có hiện diện hay không. Ví dụ, việc xác minh MarkLLM chỉ có ý nghĩa khi dùng cùng một cấu hình, còn việc phát lại keyed-Gumbel yêu cầu khóa tạo. Các công cụ này không phải là bộ xác minh phổ quát của mọi nhà cung cấp.

Lựa chọn Lớp B cẩn thận

Nếu sử dụng Lớp B, dự án khuyến nghị dùng một mô hình không phải mô hình nguồn để giảm khả năng áp dụng lại cùng loại dấu đánh dấu. Vì việc diễn giải quá mạnh có thể làm hỏng giọng văn và độ chính xác, hãy bỏ qua bước này khi ưu tiên hàng đầu là bảo toàn chất lượng bài viết.

Khám phá các backend tùy chọn

Các tập lệnh khởi tạo trong service/scripts/ có thể cấu hình reverse-SynthID để chấm điểm hình ảnh, CtrlRegen để xóa trong miền pixel, MarkLLM để xác minh watermark văn bản đã cấu hình và MarkDiffusion để thử nghiệm watermark hình ảnh. Các backend này có những yêu cầu và giới hạn khác nhau; hãy tham khảo các tập lệnh thiết lập của chúng trước khi bật.

Sử dụng có trách nhiệm

Chỉ sử dụng watermarks-remover cho mục đích bảo mật, nghiên cứu và làm sạch nội dung mà bạn sở hữu hoặc được phép xử lý. Công cụ này không nhằm phục vụ gian lận học thuật hoặc các tuyên bố sai rằng nội dung do AI tạo ra được viết bởi con người. Hãy tuân thủ luật pháp hiện hành và các chính sách của tổ chức.

Dự án được cung cấp theo Giấy phép MIT. Để xem các bản phát hành và mã nguồn, hãy truy cập kho lưu trữ watermarks-remover trên GitHub.

Kết luận

watermarks-remover kết hợp việc làm sạch văn bản mang tính xác định, xóa siêu dữ liệu trên nhiều loại vùng chứa tệp, các backend phát hiện tùy chọn, tích hợp tác tử, hook và API HTTP. Hãy bắt đầu bằng việc kiểm tra, giữ lại bản gốc, áp dụng lớp làm sạch phù hợp và có phạm vi hẹp nhất, sau đó xem xét kết quả thay vì coi bất kỳ kết quả phát hiện nào là chắc chắn.