
Kết nối DeepSeek Harness với Buzz qua Gateway Nostr
Tích hợp DeepSeek Harness với Block Buzz bằng cầu nối Nostr. Thiết lập xác thực NIP-42, truyền phát tin nhắn chỉnh sửa tại chỗ và workspace đa tác nhân AI.
Mục lục

Plugin DeepSeek Harness (DSH), dsh-message-gateway, mở rộng trợ lý DeepSeek Harness tới nhiều nền tảng nhắn tin phổ biến như Discord, Telegram và WeChat. Kho lưu trữ plugin này đã được fork và phát triển mở rộng để đưa nền tảng Tự host Buzz của Block: Không gian cộng tác giữa người và AI vào danh sách hỗ trợ. Kho lưu trữ được fork hiện có sẵn công khai trên GitHub tại https://github.com/Tech-Voyage-Dev/dsh-message-gateway.

Hướng dẫn điều kiện tiên quyết
Tự host Buzz của Block: Không gian cộng tác giữa người và AI
Tìm hiểu cách tự host Block's Buzz trên VPS Linux phía sau Cloudflare. Vận hành không gian làm việc Nostr bảo mật giúp con người và AI cộng tác hiệu quả.
12 PHÚT ĐỌCTrợ lý DSH tham gia vào relay Buzz như một thành viên chính thức, nhận tin nhắn trực tiếp (DM) cũng như tin nhắn trong các kênh mà nó được @mention, và phản hồi thông qua cùng một quy trình agent pipeline theo từng phiên trò chuyện tương tự giao diện Web.
Kiến trúc của Plugin dsh-message-gateway
Kiến trúc của plugin dsh-message-gateway được chia làm hai phần cốt lõi:
- Host (môi trường Node):
gateway-store(quản lý thông tin xác thực tại~/.dsh/gateway.json),platforms.ts(định nghĩa nền tảng và kiểm tra kết nối),routes.ts(các endpoint/gateway/*), vàbridge-manager.ts(các cầu nối thường trú: quản lý phiên tác nhân độc lập cho từng cuộc trò chuyện và luồng phản hồi streaming). - Client (phía trình duyệt): trang "Message platforms" ở thanh bên nơi bạn lưu thông tin đăng nhập, kiểm tra kết nối mạng và giám sát trạng thái hoạt động.
Việc tích hợp một nền tảng mới bao gồm các bước sau:
- Lớp cầu nối (bridge class): cung cấp các phương thức
start/stop/statuskèm theo một hàm gọi lại (callback)onText(text, frame), tương tự mẫu thiết kế củawecom-bridge.ts. - Đấu nối vào bridge-manager: tái sử dụng pipeline theo từng đoạn chat sẵn có (
ensureAgentForKey+pendingMap) và gắn kết luồng trả lời của nền tảng vào. - Lưu trữ và định tuyến: trong
/gateway/savevà/gateway/delete: lưu thông tin đăng nhập sẽ khởi động cầu nối, xóa sẽ dừng cầu nối — kèm theo cờautoStartXxxđểdsh webtự động kết nối lại khi hệ thống khởi động.
Hiện thực Cầu nối Buzz: Giao thức Nostr & Vòng đời sự kiện
DeepSeek Harness đã được sử dụng trực tiếp để hiện thực hóa cầu nối Buzz. Quá trình triển khai tuân thủ nghiêm ngặt các đặc tả kỹ thuật của giao thức Nostr sau:
| Hạng mục | Đặc tả chi tiết |
|---|---|
| Giao vận (Transport) | Một kết nối WebSocket duy nhất có xác thực NIP-42; mặc định ws://localhost:3000; http(s):// được chuẩn hóa thành ws(s):// |
| Xác thực (Auth) | Sự kiện AUTH kind 22242, gắn thẻ [["relay", url], ["challenge", challenge]], nội dung trống, ký bằng khóa riêng của tác nhân |
| Đăng ký nhận tin | Theo từng kênh: REQ {"kinds":[9], "#h":[<uuid>]} — một REQ cho mỗi kênh. Lệnh REQ toàn cục kinds:[9] nhận EOSE nhưng không phân phối sự kiện; bộ lọc #h đa giá trị không chạy |
| Khám phá (Discovery) | Truy vấn lịch sử REQ {kinds:[39000]} để lấy metadata của kênh (type == "dm" đánh dấu kênh tin nhắn trực tiếp) |
| Tư cách thành viên | Lắng nghe trực tiếp REQ {kinds:[44100,44101], "#p":[pubkey của ta], since: now-60s} — 44100 = thêm, 44101 = xóa (chứa p+h); cập nhật gói đăng ký không cần kết nối lại |
| Sự kiện trò chuyện | kind 9 với thẻ ["h", channel], tùy chọn ["e", replyTo], ["p", mention] |
| Chỉnh sửa tại chỗ | kind 40003 với h + e→mục tiêu; thay thế nội dung; giới hạn relay 64 KB → giữ tải ≤ 60.000 B; phản hồi dài được cắt mảnh — mảnh 0 ghi đè, phần dư nối tiếp dạng luồng kind 9 (e→gốc) |
| Khung CLOSED | auth-required trước AUTH là khởi động bình thường (hoàn tất AUTH, mở lại đăng ký); sau AUTH → thử lại có giới hạn (3 lần, lùi 0/1/2 giây); kết nối lại sẽ dựng lại toàn bộ trạng thái |
| Giới hạn relay | Tối đa 2000 sự kiện lịch sử trên mỗi đăng ký, sắp xếp mới nhất trước ngay cả khi sử dụng bộ lọc since |
| Kiểm soát mention | Chỉ xử lý kind 9 gửi đến khi: (a) thẻ p có pubkey của ta, (b) kênh là DM, hoặc (c) gốc e là sự kiện của chính ta. Bỏ qua pubkey của bản thân (chống lặp vô tận) |
| Mention gửi đi | Văn bản gửi đi được xuất bản nguyên văn — relay không kiểm tra cú pháp @; thẻ p mang tác giả nguồn cùng tối đa 7 pubkey khác được nhắc đến (tổng tối đa 8) |
| Tin nhắn riêng (DM) | Kênh văn bản thuần túy trong phạm vi relay (metadata type: "dm") — không áp dụng mã hóa NIP-04/44 trong cầu nối này |
| Tệp đính kèm (Đến) | NIP-92 imeta (url, sha256, m) → tải xuống qua http(s), kiểm tra mã băm SHA-256, giới hạn 20 MB, tối đa 4 tệp/tin; hình ảnh gửi đi hiện không được hỗ trợ |
Sơ đồ dưới đây minh họa toàn bộ quy trình khởi tạo (bootstrap) kết nối của cầu nối Buzz:

Truyền phát thời gian thực thông qua chỉnh sửa tại chỗ Nostr (Kind 40003)
Do Nostr không có chỉ báo đang gõ tin nhắn tự nhiên và các sự kiện đều là dạng ghi tiếp (append-only), cầu nối Buzz mô phỏng hiệu ứng truyền phát streaming bằng cách chỉnh sửa tại chỗ:

- Cầu nối Buzz xuất bản trước một sự kiện giữ chỗ
kind 9, sau đó liên tục ghi đè nội dung theo tốc độ định sẵn bằng các sự kiện chỉnh sửa tại chỗkind 40003, và thực hiện lần chỉnh sửa cuối cùng khi tác nhân hoàn tất phản hồi. Điều này tái hiện chính xác mô hình "gửi rồi sửa" đã được kiểm chứng trên các cầu nối Telegram và Discord.
Kết nối Workspace của DeepSeek Harness thông qua lệnh chat
Tính năng "Workspaces" trên giao diện Web DSH được quản lý bởi dịch vụ nền tảng workspaceRegistry (@deepseek-ai/dsh-workspace):
const existing = await ctx.workspaceRegistry.resolveByPath(request.path);
Cầu nối Buzz cung cấp lệnh trò chuyện /workspace <thư mục>, cho phép đăng ký một thư mục sẵn có vào DSH. Mọi phiên làm việc mới được tạo qua gateway sẽ tự động gắn vào thư mục này và xuất hiện đồng bộ trên giao diện Web.

Ba lưu ý quan trọng về mặt thiết kế:
- Đổi thư mục = Tạo phiên mới. Tham số
cwdđược ghi cố định vào tiêu đề phiên khi khởi tạo và không thể chỉnh sửa về sau. - Thư mục bắt buộc phải tồn tại. Hàm
createsẽ từ chối các đường dẫn không có thực trên ổ đĩa. - Lệnh có yêu cầu bảo mật cao. Mỗi phiên làm việc đều hoạt động theo chính sách auto-approve (tự động phê duyệt), cấp quyền truy cập tệp trong thư mục mục tiêu.
Hướng dẫn cài đặt và cấu hình từng bước
- Chạy các lệnh sau trong cửa sổ dòng lệnh terminal của bạn:
dsh plugin --profile web add https://github.com/Tech-Voyage-Dev/dsh-message-gateway.git
# Start DSH web
dsh web
- Khi giao diện Web DSH mở ra trong trình duyệt web, nhấp vào biểu tượng "Message platforms":
![]()
- Chọn mục "Buzz" ở bảng điều khiển bên trái:

- Nhấp vào "Generate keypair" để tạo cặp khóa Nostr mới. Hãy sao chép khóa công khai
npubvào nơi an toàn. - Điền thông tin vào ô Relay URL và Channels (danh sách UUID các kênh cho phép đăng ký).
- Nhấp vào nút "Save".
Lưu biểu mẫu sẽ lưu trữ thông tin đăng nhập và kích hoạt cầu nối khởi chạy. Khóa bí mật nsec được coi là thông tin mật tuyệt đối và chỉ lưu trữ duy nhất trong tệp ~/.dsh/gateway.json.
Đăng ký cặp khóa tác nhân lên Buzz Nostr Relay
Thêm trợ lý DSH vào relay với tư cách là một thành viên. Sử dụng khóa công khai npub vừa tạo ở bước trên:
docker compose exec relay buzz-admin add-member --pubkey npub123123123
Thêm trợ lý DSH vào một kênh cụ thể. Việc thêm thành viên vào relay chỉ mới đưa tác nhân lên máy chủ, nó sẽ chưa tự động hiển thị hay tìm kiếm được trong các kênh. Khi thực hiện bước này bằng công cụ buzz-cli, cần lưu ý rằng tham số --pubkey phải ở định dạng HEX, không phải npub (lệnh buzz-admin add-member trước đó sẽ in ra khóa HEX tương ứng):
buzz channels add-member --channel <CHANNEL_UUID> --pubkey <AGENT_HEX> --role member

Hướng dẫn CLI
Cách cài đặt và sử dụng buzz-cli
Hướng dẫn từng bước để cài đặt và định cấu hình buzz-cli nhằm quản lý các kênh Nostr, khóa thành viên và quyền của tác nhân AI.
5 PHÚT ĐỌCCập nhật hồ sơ của trợ lý DSH trên Nostr relay thành một tên hiển thị trực quan và thân thiện hơn bằng buzz-cli:

Gửi một lời chào Wave (hành động vẫy tay chào qua DM của Buzz) tới trợ lý DSH. Phản hồi gửi ngược lại báo hiệu hệ thống đã vận hành trơn tru:

Gửi tin nhắn Wave dạng DM tới trợ lý DSH — cầu nối phản hồi ngay lập tức.
Cho phép mở quyền thư mục cục bộ với lệnh /workspace
Do thiết lập allowWorkspace được đặt mặc định là false để bảo vệ an toàn, lệnh /workspace ban đầu sẽ bị từ chối:

Bật tính năng này trong tệp ~/.dsh/profiles/web/cordis.patch.yml, sau đó khởi động lại dsh web:
- id: ui-message-gateway
config:
allowWorkspace: true
Sau khi khởi động lại:

Điểm cần nhớ: cấu hình mặc định này giả định thư mục không gian làm việc (TechVoyage trong hình minh họa) nằm trong thư mục gốc của người dùng hiện tại. Nếu nằm ở vị trí khác, hãy điền đầy đủ đường dẫn tuyệt đối. Bất kỳ phiên làm việc mới nào được tạo dưới workspace này qua Buzz cũng sẽ đồng bộ hiển thị trên giao diện Web của DeepSeek Harness.

Danh sách các lệnh khả dụng trên Buzz
Tất cả các lệnh mà các nền tảng khác hỗ trợ đều hoạt động mượt mà trên Buzz:
| Lệnh | Chức năng |
|---|---|
/workspace <folder> | Đăng ký một thư mục sẵn có làm workspace cho cuộc hội thoại (yêu cầu bật quyền trong cấu hình) |
/help | Liệt kê tất cả các lệnh khả dụng |
/time | Hiển thị thời gian hiện tại của hệ thống |
/new | Khởi tạo một phiên trò chuyện hoàn toàn mới |
/clear | Xóa trắng lịch sử trò chuyện hiện tại |
/status | Kiểm tra trạng thái hoạt động của cầu nối |
/stats | Xem số lượng đoạn chat và dòng trạng thái chi tiết của từng bridge (trên tất cả nền tảng, bao gồm cả Buzz) |
/commands | Xem bảng mô tả chi tiết của từng lệnh |
@path/to/file | Hoạt động hệt như tính năng mention tệp trên Web: mô hình đọc nội dung tệp tương đối theo workspace; gõ @, @tiền_tố hoặc /files <tiền_tố> để hiển thị danh sách tệp/thư mục phù hợp |
/model | [provider model effort] — xác thực với danh mục LLM đang kích hoạt để đổi mô hình và mức suy luận; gõ /model để xem tùy chọn, /model reset để khôi phục mặc định |
/effort | <id> chỉ điều chỉnh mức độ suy luận (reasoning effort); /effort reset khôi phục lại giá trị mặc định |
Tóm lược về bảo mật
- Khóa riêng nsec chỉ nằm duy nhất trong
~/.dsh/gateway.json(phân quyền tệp 0600, ghi nguyên tử) — không bao giờ bị lộ ra ngoài qua endpoint/gateway/listhay tệp nhật ký log. - Mọi sự kiện gửi đến đều được xác thực chữ ký mật mã (
verifyEvent), loại bỏ tin trùng lặp, lọc thông điệp tự phát và kiểm tra đề cập @mention trước khi chuyển tiếp tới tác nhân. - Việc đăng ký workspace được kiểm soát chặt bằng cấu hình (
allowWorkspace: falsetheo mặc định) nhằm ngăn ngừa tình trạng các phiên gateway tự động phê duyệt quyền mở tệp ngoài ý muốn.
Lời kết: Cộng tác AI phi tập trung cùng Buzz
Khía cạnh phức tạp nhất khi tích hợp Buzz vào dsh-message-gateway nằm ở việc đáp ứng chuẩn xác quy chuẩn giao thức Nostr. Nhờ nền tảng plugin sẵn có đã trừu tượng hóa rất tốt việc quản lý phiên và điều hướng lệnh, quá trình xây dựng cầu nối diễn ra vô cùng thuận lợi và ổn định ngay khi cơ chế xử lý sự kiện và truyền phát luồng chỉnh sửa tại chỗ được thiết lập.
Tài liệu tham khảo:
- dsh-message-gateway architecture guide — tài liệu kiến trúc, hướng dẫn viết extension và lưu ý bảo mật
- nostr-tools — thư viện Nostr cốt lõi được sử dụng bên dưới
- deer-flow IM channel connections — mô hình tham khảo cho kết nối kênh nhắn tin tức thời
Bài viết liên quan

Cộng tác
Tự host Buzz của Block: Không gian cộng tác giữa người và AI
Tìm hiểu cách tự host Block's Buzz trên VPS Linux phía sau Cloudflare. Vận hành không gian làm việc Nostr bảo mật giúp con người và AI cộng tác hiệu quả.
21 PHÚT ĐỌC
AI & Tác tử
Kỹ năng của Agent AI: Chúng là gì và cách tạo lập chi tiết
Khám phá khái niệm kỹ năng của Agent AI, cơ chế công bố lũy tiến và hướng dẫn thực tế để tự xây dựng các kỹ năng tùy chỉnh có thể tái sử dụng hiệu quả hơn.
7 PHÚT ĐỌC
AI & Tác tử
Cách hiển thị riêng tư Hermes Agent với Cloudflare WARP
Tìm hiểu cách hiển thị và truy cập an toàn Hermes Agent trên toàn cầu bằng nền tảng Cloudflare WARP và Zero Trust mà không cần mở bất kỳ cổng tường lửa nào.
10 PHÚT ĐỌC