Native CLI Rust + llama.cpp macOS

Thu thập bằng chứng database cục bộ với Qwen

qwen-native chạy mô hình Qwen3-8B GGUF cục bộ và truy cập cơ sở dữ liệu SQLite ở chế độ chỉ đọc thông qua các lớp cầu nối native tối giản. Tối ưu cho macOS, không yêu cầu Ollama hay Python.

Cấu hình Đích
x86_64-apple
Mô hình Chuẩn
Qwen3-8B GGUF
Chế độ An toàn
Read-Only Guard
Đầu ra Bằng chứng
evidence_bundle.md
Terminal — Evidence Collector
./dist/qwen-native \
  --model ./model/qwen3-8b-q4_k_m.gguf \
  --db /path/to/database.sqlite \
  --batch-question-file ./questions.tsv \
  --batch-output-dir ./evidence \
  --batch-round-id round-1
1

Bắt đầu nhanh — Đường chạy cơ bản

Đây là toàn bộ quy trình cốt lõi để tạo ra tệp evidence_bundle.md cho ChatGPT rà soát ngữ nghĩa:

1. Chuẩn bị Model
Đặt GGUF vào model/
2. ./build_x86_64.sh
Biên dịch Rust & llama.cpp
3. Tạo questions.tsv
Chuẩn bị danh sách câu hỏi
4. Chạy Batch
Truy vấn SQLite & thu thập
5. ChatGPT Review
Phán quyết ngữ nghĩa

Cấu hình Chuẩn của Dự án

Đích hệ thống: x86_64-apple-darwin
Mô hình: Qwen3-8B Q4_K_M GGUF
llama.cpp commit: 25ae3a9b331fffea50ff8d...
Luồng CPU: 0 (tự động - default)
Chế độ suy nghĩ: /no_think (mặc định)
SQLite backend: libsqlite3 của macOS

* Môi trường chạy thuần native, không yêu cầu Ollama, Python hay máy chủ mô hình ngoại vi.

2

Kiến trúc & Luồng xử lý chính

Sơ đồ Luồng Cầu nối Bằng chứng (Evidence Bridge Flow)

Bước 1

Đầu vào & Xác định

Nhận câu hỏi từ TSV. Đọc lược đồ SQLite DDL. Bộ tiền lập kế hoạch xác định Rust kiểm tra các mẫu SQL thông dụng.

Nếu xử lý xác định 100%, không nạp mô hình Qwen!
Bước 2

Qwen & Rust Safety Guard

Nạp Qwen3-8B 1 lần cho các ca chưa xử lý. Dịch NL → SQL. Chuyển câu SQL sang Rust SQL Guard kiểm tra an toàn nghiêm ngặt.

Bật PRAGMA query_only & Read-Only SQLite shim.
Bước 3

Gói Bằng chứng & ChatGPT

Tổng hợp kết quả SQLite thô, SQL, chẩn đoán vào evidence_bundle.md. ChatGPT thực hiện rà soát ngữ nghĩa cuối cùng.

SQL thành công ≠ Ngữ nghĩa câu hỏi đúng.
Qwen
LLM Planner

Lập kế hoạch chuyển đổi ngôn ngữ tự nhiên sang câu lệnh SQL.

SQLite
Local Data Source

Nguồn dữ kiện cục bộ chạy ở chế độ chỉ đọc tuyệt đối (Read-Only).

Rust Guard
Safety Controller

Kiểm soát an toàn thực thi SQL, ngăn chặn ghi, DDL, hoặc SQL injection.

ChatGPT
Semantic Auditor

Rà soát và đưa ra kết luận ý nghĩa cuối cùng bên ngoài qwen-native.

3

Vận hành Cầu nối Bằng chứng

Trình Tạo Lệnh Điều Tra Nhiều Vòng (Multi-round Generator)

Liên kết bằng chứng giữa các vòng điều tra thông qua cờ --batch-parent-bundle.

Interactive Tool
CẢNH BÁO QUAN TRỌNG: Cờ --batch-parent-bundle PHẢI trỏ tới tệp evidence_bundle.md của vòng trước. KHÔNG truyền tệp TSV vào cờ này!
Lệnh Shell Tương Ứng:
./dist/qwen-native \
  --model ./model/qwen3-8b-q4_k_m.gguf \
  --db /path/to/database.sqlite \
  --batch-question-file ./followup_questions.tsv \
  --batch-output-dir ./evidence \
  --batch-round-id round-2 \
  --batch-parent-bundle ./evidence/evidence_bundle.md

Mẫu Cấu trúc Nội dung `evidence_bundle.md`

Mỗi ca điều tra trong tệp bằng chứng Markdown giữ các trường chuẩn:

# Case ID: metadata
- Parent Case Provenance: none
- Question: Liệt kê tất cả các dòng key và value của audit_metadata theo thứ tự key.
- Schema: audit_metadata (key TEXT PRIMARY KEY, value TEXT)
- Plan Source: deterministic
- Executed SQL: SELECT key, value FROM audit_metadata ORDER BY key LIMIT 50;
- Raw Result: [ {"key": "schema_version", "value": "1.2.0"}, {"key": "created_at", "value": "2026-01-01"} ]
- Technical Diagnostics: none
- Local Semantic Judgment: not_performed
4

Cơ chế Kỹ thuật & An toàn SQLite

Lớp An toàn SQLite (Rust Guard)

  • Mở database native bằng SQLITE_OPEN_READONLY.
  • Thực thi Pragma an toàn: PRAGMA query_only=ON.
  • Chỉ cho phép: SELECT, WITH ... SELECT, EXPLAIN QUERY PLAN và Safe PRAGMAs.
  • Từ chối nhiều lệnh SQL (multi-statement), NUL byte, hoặc từ khóa DDL/Write nguy hiểm.
  • Giới hạn mặc định: 50 dòng / truy vấn, 4096 bytes, timeout 2000 ms.

Whitelist SAFE_PRAGMAS (`src/sql_guard.rs`)

Chỉ các PRAGMA đọc thông tin lược đồ dưới đây mới được cho phép. Dạng gán giá trị bị từ chối tuyệt đối:

TABLE_INFO
TABLE_XINFO
INDEX_LIST
INDEX_INFO
INDEX_XINFO
FOREIGN_KEY_LIST

Bảng Trạng thái Chẩn đoán Kỹ thuật (Technical Diagnostic States)

Trạng thái (Literal) Mô tả Kỹ thuật Ghi chú Vận hành
executed Truy vấn thành công, không có chẩn đoán lỗi. Bằng chứng hoàn chỉnh.
executed_with_diagnostics Truy vấn thành công đồng thời có chẩn đoán đi kèm. Có thể có truy vấn phụ bị lỗi.
runtime_capability_error Runtime SQLite thiếu tính năng/extension cần thiết. Cần kiểm tra bản SQLite hệ thống.
result_truncated Kết quả vượt quá giới hạn dòng (50) hoặc byte (4096). Báo cáo chưa được xem là hoàn tất.
planner_missed Qwen không tạo được kế hoạch SQL cho ca. Trở thành bằng chứng kỹ thuật rỗng.
5

Xử lý sự cố nhanh

Hiện tượng Kiểm tra trước
Không tìm thấy mô hình Kiểm tra model/qwen3-8b-q4_k_m.gguf hoặc truyền --model PATH đúng.
Nạp mô hình lỗi Kiểm tra tệp GGUF có tồn tại, đúng đường dẫn và dùng được; chuẩn bị lại tệp tương thích nếu cần.
command not found ở cờ CLI Kiểm tra dòng lệnh shell trước đó có thiếu ký tự nối \ hay không.
Một vòng mất nhiều phút Đối chiếu thời gian lập kế hoạch Qwen; SQLite có thể không phải nút thắt.
runtime_capability_error Xem chẩn đoán SQLite chính xác; không tự diễn giải thành lỗi ngữ nghĩa.
result_truncated Tăng giới hạn phù hợp hoặc thu hẹp câu hỏi; không coi báo cáo là hoàn tất.
A

Thử nghiệm Thực tế với Code Graph

Thử nghiệm đầu-cuối thực hiện trên SQLite của dự án mcp-app qua 3 vòng điều tra liên kết bằng chứng.

Bảng Chỉ số Hiệu năng Quan sát được qua 3 Vòng

Tổng thời gian: ~46m 39s
Chỉ số Hiệu năng Vòng 1 Vòng 2 Vòng 3
Số ca (Cases) 9 9 6
Ca lập kế hoạch bằng Qwen 8 8 6
Thời gian lập kế hoạch Qwen ~8m 48s ~16m 29s ~21m 6s
Thời gian SQLite thực thi 0.001s 0.551s 0.300s
Tổng thời gian vòng ~8m 53s ~16m 35s ~21m 12s
Kết luận Kỹ thuật từ thử nghiệm

Nút thắt hiệu năng nằm ở phần lập kế hoạch Qwen (Natural Language → SQL), trong khi tốc độ truy vấn của SQLite chỉ chiếm một phần nhỏ của giây (< 0.6s).