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:
model/Cấu hình Chuẩn của Dự án
* Môi trường chạy native, không yêu cầu Ollama, Python hay máy chủ mô hình.
Kiến trúc & Luồng xử lý chính
Sơ đồ luồng Cầu nối bằng chứng
Khám phá & Thực thi
Ở Vòng 1, đọc câu hỏi khám phá và lược đồ SQLite / MySQL / PostgreSQL / SQL Server. Bộ tiền lập kế hoạch xác định Rust xử lý các mẫu SQL thông dụng ở chế độ khám phá; Vòng 2+ dùng yêu cầu thực thi do ChatGPT đã chia nhỏ.
Qwen & bộ bảo vệ Rust
Ở Vòng 2+, Qwen chỉ dịch yêu cầu thực thi đã chọn thành SQL. Câu SQL tiếp tục qua Rust SQL Guard để kiểm tra an toàn trước khi thực thi.
Đóng gói bằng chứng & ChatGPT
Tổng hợp kết quả SQLite / MySQL / PostgreSQL / SQL Server 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.
Chuyển yêu cầu điều tra đã được chọn thành câu SQL; không tự quyết định chiến lược từ Vòng 2.
SQLite, MySQL, PostgreSQL và SQL Server đều được truy cập ở chế độ chỉ đọc trong các vòng evidence.
Kiểm soát an toàn khi thực thi SQL, ngăn thao tác ghi, DDL hoặc chèn SQL.
Quyết định chiến lược, chia nhỏ vấn đề, rà soát bằng chứng và đưa ra kết luận cuối cùng.
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
Có tệp bằng chứng vòng trước thì lô chạy ở chế độ thực thi; liên kết nguồn gốc được truyền qua cờ --batch-parent-bundle.
--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!
./dist/qwen-native \ --model ./model/qwen2.5-coder-7b-instruct-q4_k_m.gguf \ --db '' \ --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:
Chỉ cho phép đọc dữ liệu SQLite / MySQL / PostgreSQL / SQL Server
Chỉ chấp nhận truy vấn đọc dữ liệu
-
SQLite được mở bằng
SQLITE_OPEN_READONLY; MySQL, PostgreSQL và SQL Server được sử dụng qua luồng kết nối evidence chỉ đọc. -
Riêng SQLite bật
PRAGMA query_only=ON; MySQL, PostgreSQL và SQL Server vẫn đi qua Rust SQL Guard và chính sách chỉ cho phép truy vấn đọc. -
Chỉ cho phép các lệnh đọc như
SELECT,WITH ... SELECT; các lệnh đặc thù nhưEXPLAIN QUERY PLAN/ PRAGMA áp dụng cho SQLite. - Không cho phép các lệnh làm thay đổi dữ liệu như INSERT, UPDATE, DELETE, CREATE, DROP; nhiều câu SQL cùng lúc cũng bị từ chối.
- Giới hạn mặc định: 50 dòng / truy vấn, 4096 bytes, thời gian chờ 2000 ms.
Các lệnh đọc thông tin cấu trúc được cho phép
Với SQLite, ngoài SELECT hệ thống chỉ cho phép một số PRAGMA đọc thông tin cấu trúc. Với MySQL, PostgreSQL và SQL Server, schema được introspect qua metadata tương ứng; PRAGMA không áp dụng:
Bảng trạng thái chẩn đoán kỹ thuật
| Trạng thái kỹ thuật | 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. | Không tự chứng minh đúng ngữ nghĩa. |
| 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 | Môi trường SQLite thiếu tính năng hoặc phần mở rộng 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. |
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/qwen2.5-coder-7b-instruct-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 / MySQL / PostgreSQL / SQL Server thường không phải nút thắt chính. |
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. |
Thử nghiệm thực tế với đồ thị mã nguồn
Hai câu hỏi trung tâm của cuộc điều tra là:
① Đồ thị mã nguồn của mcp-app được lưu vào SQLite như thế nào?
② Đồ thị mã nguồn có được lưu đúng và đầy đủ không?
Ví dụ thực tế dưới đây minh họa cách ChatGPT điều khiển cuộc điều tra qua 3 vòng: khám phá dữ liệu, lập chiến lược trả lời hai câu hỏi này, rồi chốt các vấn đề phát sinh.
Luồng 3 vòng điều tra: Khám phá → Lập chiến lược → Chốt vấn đề
Quá trình điều tra · 19 phút 25 giây| Vai trò trong điều tra | Vòng 1 — Khám phá | Vòng 2 — Lập chiến lược | Vòng 3 — Chốt vấn đề |
|---|---|---|---|
| Mục tiêu | Khám phá SQLite và hiểu cách đồ thị mã nguồn được lưu. | Lập chiến lược để trả lời 2 câu hỏi chính từ bằng chứng Vòng 1. | Kiểm tra các điểm còn chưa rõ và chốt kết luận. |
| ChatGPT thực hiện | Skill tạo 9 câu hỏi khám phá độc lập để dựng ngữ cảnh cơ sở dữ liệu. | Đọc bằng chứng, xác định khoảng trống và chia chiến lược thành 9 phép kiểm tra. | Tập trung 6 phép kiểm tra vào các vấn đề phát sinh cần xác minh cuối. |
| Qwen + SQLite | Qwen dịch câu hỏi → SQL; SQLite trả lược đồ và bằng chứng nền. | Qwen dịch yêu cầu thực thi → SQL; SQLite trả bằng chứng về tính nhất quán và độ phủ. | Qwen thực thi các kiểm tra chốt về tệp thiếu ký hiệu, phạm vi dòng và phân giải đích. |
| Bằng chứng chính | Xác định graph_symbols, graph_edges, các cột, chỉ mục và cấu trúc lưu trữ. | 0 ký hiệu nguồn mồ côi, 0 ký hiệu cha mồ côi, 0 lệch đường dẫn; phát hiện điểm cần kiểm tra sâu. | 70 cạnh ngoài phạm vi đều thuộc Implements; các đường dẫn thiếu graph_symbols vẫn có semantic_chunks. |
| Kết quả / bước tiếp theo | Đủ ngữ cảnh để ChatGPT lập chiến lược cho Vòng 2. | Xác định các vấn đề cần kiểm tra sâu ở Vòng 3. | Đủ bằng chứng để trả lời 2 câu hỏi chính; không cần Vòng 4 cho kết luận cấp cao. |
Vòng 1: Skill ChatGPT tạo câu hỏi để khám phá cơ sở dữ liệu.
Vòng 2: ChatGPT đọc bằng chứng và lập chiến lược để trả lời hai câu hỏi chính.
Vòng 3: ChatGPT kiểm tra các vấn đề phát sinh rồi chốt kết luận. Qwen không tự quyết định chiến lược; Qwen chỉ chuyển từng yêu cầu thành SQL, Rust kiểm tra an toàn và SQLite trả dữ kiện.
Sau Vòng 3, đồ thị mã nguồn được xác nhận có cấu trúc rõ ràng và nhất quán ở mức đã kiểm tra, nhưng độ phủ ký hiệu chưa đầy đủ hoàn toàn.
Thử nghiệm thực tế WordPress
Bài thử nghiệm sử dụng một website WordPress development thực tế để kiểm chứng quy trình
ChatGPT → qwen-native → MySQL → evidence_bundle.md.
Mục tiêu không chỉ là đọc dữ liệu hiện có, mà còn đối chiếu source theme
straight-press-renew với trạng thái MySQL,
xác định data contract cần thiết và tạo seed SQL có thể tái dựng môi trường development.
Luồng 8 vòng: từ schema đến seed development
MySQL 8.0.46 · read-only investigation| Vòng | Mục tiêu | Thời gian | Kết quả |
|---|---|---|---|
| 1 | Schema bootstrap deterministic | Không dùng Qwen | 29 bảng · schema đầy đủ · không truncate |
| 2 | Inventory post type, taxonomy, postmeta | 50.525 s | 3/3 executed |
| 3 | Inventory page/post và thử JOIN taxonomy | 130.800 s | 2/3 executed · phát sinh SQL repair |
| 4 | Retry taxonomy + theme/front-page options | 129.243 s | 2/3 executed · repair vẫn sai owner cột |
| 5 | Decompose taxonomy thành 3 SELECT độc lập | 57.372 s | 3/3 executed · không repair |
| 6 | Core options, plugins, Contact Form 7 | 42.628 s | Nhanh nhất · 3/3 executed |
| 7 | Theme state, contact meta, author | 47.406 s | 3/3 executed |
| 8 | Runtime options, full plugin list, CF7 values | 64.047 s | 3/3 executed · đóng điều tra DB |
Nút thắt là inference, không phải MySQL
Những gì source WordPress + MySQL đã chứng minh
Database ban đầu dùng twentyeleven. Source được đối chiếu để chuyển target sang
straight-press-renew, không tái sử dụng state widget/menu cũ nếu theme mới không cần.
Source hard-code 11 category: local, lifestyle, mono, entame, beauty, fashion, mama, otoku, cawaii, mens và m-fashion. Riêng LOCAL sử dụng thêm 8 tag vùng địa lý.
Theme tự định nghĩa bảng company_news với ID PR TIMES, công ty, tiêu đề, nội dung,
ngày xuất bản và cờ xóa; Round 8 xác nhận chưa có stale option cản bước tạo bảng.
Plugin wp-no-category-base đang active, giải thích vì sao source dùng URL như
/local thay cho /category/local.
Source cũ có dấu vết CF7 ID 9681 trong khi MySQL development chỉ có form ID 5. Footer thực tế chuyển Contact sang Tayori, nên seed không cần giả lập ID cũ để website hoạt động.
Nhóm page cần seed gồm company, press,
site, company_news và child
company_news/detail với page template tương ứng.
Kết quả của thử nghiệm
- • Điều tra schema và trạng thái WordPress development mà không ghi dữ liệu trong các vòng evidence.
- • Từ source theme xác định được data contract mà database trống không thể tự mô tả.
- • Tạo seed idempotent cho theme, page, category, tag, post relationship và BUSINESS NEWS.
- • Phát hiện lỗi cú pháp MySQL ở seed đầu và hiệu chỉnh chiến lược conditional insert cho bản tiếp theo.
- • Xác định rõ điểm dừng: sau Vòng 8 không cần thêm vòng Qwen để trả lời các fact đã đủ bằng chứng.
Bài học tối ưu qwen-native
- Ưu tiên deterministic preplanner cho SELECT đơn giản để bỏ model call không cần thiết.
- Khi lỗi owner cột/JOIN lặp lại, chuyển ngay sang truy vấn đơn bảng thay vì gọi repair thêm.
- Nếu Qwen cần schema, chỉ truyền schema slice của các bảng được nhắc tới thay vì toàn bộ catalog.
- Giảm output token và số model call; generation chiếm phần lớn thời gian inference thực tế.
- Giữ ChatGPT làm semantic controller; Qwen chỉ làm lớp dịch thao tác đã chọn sang SQL.