#!/usr/bin/env python3 import json import os import subprocess import time import sys # Khai báo đường dẫn NLM_BIN = "/opt/ai-os/products/ceo/integrations/notebooklm-mcp-cli/.venv/bin/nlm" OUTPUT_DIR = "/root/.hermes/profiles/reviewer/skills/research/policy-analysis-vn/domain_knowledge/tourism_culture_sport" # Danh sách các văn bản pháp luật cần tóm tắt # Cấu trúc: (Notebook ID, Source ID, Tên Source, Tên file đầu ra) TASKS = [ # Từ notebook Báo cáo Du Lịch (a0f8646b-90b1-4a65-bddc-07280aa06a99) ( "a0f8646b-90b1-4a65-bddc-07280aa06a99", "c7923829-7313-43db-9aa1-2db1b631c17e", "GOV_2017_Nghị quyết 08-NQ/TW phát triển du lịch thành ngành kinh tế mũi nhọn", "GOV_2017_NQ08_TW.md" ), ( "a0f8646b-90b1-4a65-bddc-07280aa06a99", "516f7148-436d-4b20-84ca-ae24d4b5959b", "GOV_2020_Quyết định 147/QĐ-TTg chiến lược phát triển du lịch Việt Nam đến năm 2030", "GOV_2020_QD147_TTg.md" ), ( "a0f8646b-90b1-4a65-bddc-07280aa06a99", "ac03012e-4b2f-4e2f-8f63-1fa2e394d2ed", "GOV_2024_Quyết định 509/QĐ-TTg phê duyệt Quy hoạch hệ thống du lịch 2021-2030", "GOV_2024_QD509_TTg.md" ), ( "a0f8646b-90b1-4a65-bddc-07280aa06a99", "df7eeecf-0424-418f-b41d-e80ce367529a", "GOV_2025_Nghị quyết 252/2025/QH15 sửa đổi Nghị quyết 81/2023/QH15 Quy hoạch tổng thể quốc gia 2021-2030", "GOV_2025_NQ252_QH15.md" ), ( "a0f8646b-90b1-4a65-bddc-07280aa06a99", "12edefe7-fbb0-4c8d-9dbf-e04f7a948593", "GOV_2026_18-KL/TW thúc đẩy du lịch quốc tế gắn với dịch vụ y tế mua sắm", "GOV_2026_KL18_TW.md" ), # Từ notebook Du Lịch Khánh Hòa (cdcc2614-c5cf-4a37-8aa7-34e3f26a3a36) ( "cdcc2614-c5cf-4a37-8aa7-34e3f26a3a36", "a1c4cce7-206b-402e-8ecb-047d293ab15d", "GOV_2022_Nghị quyết 09-NQ/TW xây dựng phát triển Khánh Hòa đến 2030", "GOV_2022_NQ09_TW.md" ), ( "cdcc2614-c5cf-4a37-8aa7-34e3f26a3a36", "260a6af1-5aef-4acf-a386-b6fd041f95d5", "GOV_2025_Nghị quyết số 01-NQ/TU của Tỉnh ủy Khánh Hòa về tăng trưởng kinh tế hai con số", "GOV_2025_NQ01_TU.md" ), ( "cdcc2614-c5cf-4a37-8aa7-34e3f26a3a36", "2ec1df00-f767-4b59-a681-cb687a54d3dc", "GOV_2026_4389KHUBND Chiến lược phát triển du lịch Khánh Hòa", "GOV_2026_KH4389_UBND.md" ), ( "cdcc2614-c5cf-4a37-8aa7-34e3f26a3a36", "c2c3145a-9a05-4943-a6c4-5787e7eed604", "GOV_2026_QD2279 Điều chỉnh quy hoạch Khánh Hòa", "GOV_2026_QD2279_TTg.md" ), ( "cdcc2614-c5cf-4a37-8aa7-34e3f26a3a36", "0bdf73f3-6fd4-4b28-83d3-4e83a5038f36", "GOV_2026_QĐ374 điều chỉnh quy hoạch hệ thống du lịch Khánh Hòa", "GOV_2026_QD374_TTg.md" ) ] os.makedirs(OUTPUT_DIR, exist_ok=True) # Câu hỏi trích xuất thông tin QUESTION = """ Bạn hãy tóm tắt văn bản pháp luật này và điền thông tin chính xác theo cấu trúc của biểu mẫu chuẩn dưới đây. YÊU CẦU ĐỊNH DẠNG ĐẦU RA (BẮT BUỘC KHỚP 100% CẤU TRÚC NÀY): # SUMMARY: [Tên văn bản đầy đủ] **Mã số/Ký hiệu:** [Số hiệu chính thức] **Cơ quan ban hành:** [Tên cơ quan ban hành] **Ngày ban hành:** [Ngày tháng năm ban hành] **Tình trạng hiệu lực:** [Tình trạng hiệu lực hiện tại] ## 1. Mối liên hệ pháp lý (Tháp Hiệu lực) | Chiều | Văn bản | |---|---| | Văn bản căn cứ cấp trên | [Liệt kê các văn bản căn cứ cấp trên] | | Văn bản thay thế/kế thừa từ | [Liệt kê các văn bản cũ được kế thừa hoặc thay thế] | | Văn bản được điều chỉnh | [Nếu văn bản này là văn bản sửa đổi bổ sung, ghi rõ văn bản gốc bị sửa] | ## 2. Mục tiêu điều chỉnh (Policy Intent) [Tóm tắt mục tiêu chính sách trong 1 đến 2 câu.] ## 3. Tóm tắt chi tiết cấu trúc (Theo từng chương/phần) | Chương | Tiêu đề | Điều khoản nổi bật | Ghi chú thay đổi so với văn bản cũ | |---|---|---|---| | [Tên chương, ví dụ: Chương I] | [Tiêu đề chương] | [Tóm tắt điều khoản nổi bật] | [Ghi rõ kế thừa hoặc mới hoàn toàn hoặc sửa đổi từ đâu] | ## 4. Điểm nghẽn tiềm ẩn (Module 3 Scan) | Loại điểm nghẽn | Điều khoản cụ thể | Mức độ nghiêm trọng | |---|---|---| | Mâu thuẫn/Chồng chéo | [Nội dung mâu thuẫn chồng chéo cụ thể] | [Cao/Trung bình/Thấp] | | Thủ tục/Chi phí tuân thủ | [Nội dung cụ thể về thủ tục chi phí hành chính] | [Cao/Trung bình/Thấp] | | Vùng xám/Ngôn ngữ mơ hồ | [Nội dung từ ngữ định tính mơ hồ cụ thể] | [Cao/Trung bình/Thấp] | | Cài cắm/Lợi ích nhóm | [Nội dung rào cản gia nhập hay lợi ích nhóm cụ thể] | [Cao/Trung bình/Thấp] | ## 5. Trích dẫn APA 7 [Tên cơ quan ban hành]. ([Năm]). *[Tên văn bản]*. [Số hiệu]. [Cơ sở pháp lý]. CHÚ Ý QUAN TRỌNG: 1. Điền đầy đủ tất cả các trường thông tin dựa vào nội dung nguồn được chỉ định. 2. TUYỆT ĐỐI KHÔNG SỬ DỤNG ký tự gạch nối (dấu gạch ngang '-') trong văn xuôi (kể cả trong các danh sách liệt kê hay mô tả). Thay vào đó, hãy sử dụng danh sách số thứ tự, bảng biểu, dấu hai chấm, hoặc dấu chấm tròn để phân tách ý. Chỉ được phép dùng dấu gạch ngang trong các thẻ markdown định dạng bảng hoặc số hiệu văn bản (ví dụ: 08/NQ-TW). """ print(f"🚀 Bắt đầu tiến trình tóm tắt {len(TASKS)} văn bản pháp luật...") print(f"📁 Thư mục lưu trữ: {OUTPUT_DIR}\n") for i, (nb_id, src_id, name, out_file) in enumerate(TASKS): print(f"[{i+1}/{len(TASKS)}] Đang xử lý: {name}") out_path = os.path.join(OUTPUT_DIR, out_file) # Tạo câu lệnh nlm query cmd = [ NLM_BIN, "query", "notebook", nb_id, QUESTION, "-s", src_id ] attempts = 0 success = False result_text = "" while attempts < 3 and not success: attempts += 1 try: res = subprocess.run(cmd, capture_output=True, text=True, check=True, timeout=180) result_text = res.stdout.strip() if result_text and "error" not in result_text.lower(): success = True else: print(f"⚠️ Thử lần {attempts} thất bại. Kết quả rỗng hoặc chứa lỗi.") time.sleep(10) except subprocess.CalledProcessError as e: print(f"❌ Lỗi thực thi ở lần thử {attempts}: {e.stderr}") time.sleep(15) if success: # Trích xuất trường answer từ JSON try: data = json.loads(result_text) content_to_write = data.get("answer", result_text) except Exception: content_to_write = result_text with open(out_path, "w", encoding="utf-8") as f: f.write(content_to_write) print(f"✅ Đã lưu tóm tắt tại: {out_file}") else: print(f"❌ Thất bại hoàn toàn khi tóm tắt văn bản: {name}") # Cơ chế delay 40 giây để tránh lỗi rate limit if i < len(TASKS) - 1: print("⏳ Chờ 40 giây trước khi tiếp tục tác vụ tiếp theo...") time.sleep(40) print("\n🎉 Toàn bộ tiến trình tóm tắt văn bản đã hoàn tất thành công!")