Inspiration

Mỗi năm, hơn 6.200 thủ tục hành chính (TTHC) tại Việt Nam xử lý hàng chục triệu hồ sơ công dân. Cán bộ một cửa phải đọc thủ công từng hồ sơ, đối chiếu với hàng nghìn điều luật trong Luật, Nghị định, Thông tư, rồi soạn văn bản theo Nghị định 30/2020/NĐ-CP — một quy trình tốn 3–7 ngày cho những thủ tục đơn giản nhất.

Chúng tôi tin rằng Agentic GraphRAG — kết hợp Knowledge Graph pháp lý với các agent Qwen3 có khả năng suy luận đa bước — có thể biến quy trình này thành vài phút, vẫn đảm bảo truy vết được đến từng điều, khoản, điểm trong văn bản pháp luật gốc.

Đây không phải một chatbot. Đây là cơ sở hạ tầng AI cho khu vực công.

What it does

GovFlow là nền tảng end-to-end cho công dân → cán bộ một cửa → lãnh đạo, với 3 khối giá trị:

1. Citizen Portal (không cần đăng nhập)

  • Nộp hồ sơ TTHC online, tra cứu trạng thái real-time
  • AI tự động phân loại TTHC, phát hiện thiếu giấy tờ trước khi nộp
  • OCR tiếng Việt có giữ dấu cho ảnh/PDF scan

2. Staff Workspace (cán bộ xử lý)

  • Xem hồ sơ với Context Graph hiển thị quan hệ giữa công dân, giấy tờ, điều luật liên quan
  • Gap Detector: AI đối chiếu hồ sơ với checklist pháp lý, chỉ ra điều khoản bị thiếu/sai kèm trích dẫn chính xác (ví dụ: "Thiếu xác nhận tại Khoản 2 Điều 7 Thông tư 04/2020/TT-BTP")
  • Legal Lookup Agent: chat trực tiếp với Knowledge Graph pháp lý, mọi câu trả lời đều kèm citation đến văn bản gốc trên OSS
  • Drafter: sinh văn bản hành chính đúng format ND 30/2020 (quyết định, thông báo, công văn) với preview đầy đủ

3. Leadership Dashboard

  • Inbox xử lý theo phân quyền RBAC 3 tầng
  • KPI real-time: throughput, SLA breach, agent accuracy
  • Audit log bất biến trên Graph DB — mọi thao tác đều có thể replay

Điểm khác biệt: mọi query Knowledge Graph đi qua PermittedGremlinClient với 3 tầng kiểm soát (SDK Guard → RBAC Role → Property Mask), đảm bảo cán bộ xã không bao giờ đọc được thông tin của tỉnh khác — permission engine được thực thi ngay trong lớp truy vấn đồ thị, không phải kiểm tra post-hoc.

How we built it

Kiến trúc hệ thống — Alibaba Cloud stack

┌─────────────────────────────────────────────────────────────┐
│   Next.js 15 (App Router) + shadcn/ui + React Flow          │
│   ├─ Citizen Portal (public)                                │
│   ├─ Staff Workspace (JWT auth)                             │
│   └─ Leadership Dashboard                                   │
└────────────────────┬────────────────────────────────────────┘
                     │ REST + WebSocket (real-time agent trace)
┌────────────────────▼────────────────────────────────────────┐
│   FastAPI (Python 3.11, async)                              │
│   ├─ Auth (JWT + argon2)                                    │
│   ├─ 3-tier Permission Engine                               │
│   ├─ Agent Orchestrator (DAG executor)                      │
│   └─ MCP Server (tool registry for agents)                  │
└─────┬────────────────┬──────────────┬──────────────┬────────┘
      │                │              │              │
┌─────▼─────┐  ┌───────▼────────┐  ┌──▼─────────┐  ┌▼────────┐
│ Alibaba   │  │ Alibaba        │  │ Alibaba    │  │ Alibaba │
│ GDB       │  │ Hologres       │  │ OSS        │  │ Model   │
│ (Gremlin) │  │ (PG + Proxima) │  │ (S3-like)  │  │ Studio  │
│           │  │                │  │            │  │ DashScope│
│ KG +      │  │ Users,         │  │ Docs,      │  │         │
│ Audit     │  │ embeddings,    │  │ templates, │  │ Qwen3-  │
│ log       │  │ analytics      │  │ archives   │  │ Max/VL  │
└───────────┘  └────────────────┘  └────────────┘  └─────────┘

Cách Qwen3 xử lý — 10 Agents phối hợp

Chúng tôi không gọi một LLM khổng lồ làm tất cả. Mỗi agent có model phù hợp, system prompt riêng, YAML permission profile riêng, và MCP toolset bị giới hạn:

# Agent Model Nhiệm vụ
1 Planner qwen-max-latest Sinh DAG tác vụ từ yêu cầu hồ sơ
2 DocAnalyzer qwen-vl-max-latest OCR tiếng Việt + trích xuất entity từ ảnh/PDF
3 Classifier qwen-max-latest Matching hồ sơ với 1 trong 6.200 TTHC
4 Compliance qwen-max-latest Gap detection + citation đến điều khoản
5 LegalLookup qwen-max + text-embedding-v3 Agentic GraphRAG: lặp Gremlin query + vector search cho tới khi đủ chứng cứ
6 Router qwen-max-latest Phân phòng ban xử lý
7 Consult qwen-max-latest Xin ý kiến liên phòng
8 Summarizer qwen-max-latest Tóm tắt role-aware (lãnh đạo ≠ chuyên viên)
9 Drafter qwen-max-latest Sinh văn bản ND 30/2020
10 SecurityOfficer qwen-max-latest Phân loại mật + access control

Luồng Agentic GraphRAG của LegalLookup:

# backend/src/agents/implementations/legal_lookup.py
async def run(self, question: str) -> LegalAnswer:
    # Vòng 1: embedding-based retrieval
    vec = await qwen.embedding(question, model="text-embedding-v3")
    seeds = await hologres.proxima_search(vec, top_k=8)

    # Vòng 2: graph expansion (Qwen quyết định hop tiếp theo)
    for _ in range(MAX_HOPS):
        plan = await qwen.chat(
            model="qwen-max-latest",
            messages=[system_prompt, evidence_so_far, question],
            tools=MCP_TOOLS,  # gremlin_template_exec, doc_fetch, ...
        )
        if plan.done: break
        evidence += await execute_tool(plan.next_tool)

    # Vòng 3: synthesis với citation
    return await qwen.chat(..., response_format=LegalAnswerSchema)

DashScope SDK (OpenAI-compatible)

from openai import AsyncOpenAI

client = AsyncOpenAI(
    api_key=os.environ["DASHSCOPE_API_KEY"],
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
# Streaming, tool-calling, structured output — all work out of the box

Permission Engine — 3 tầng bảo vệ Graph

  1. SDK Guard (Tier 1): blacklist Gremlin steps nguy hiểm (drop, addV ngoài template)
  2. RBAC Role (Tier 2): mỗi vai trò (citizen / clerk / director / auditor) có template whitelist
  3. Property Mask (Tier 3): xóa thuộc tính nhạy cảm (CCCD, số điện thoại) theo role

Mọi lệnh ghi sinh AuditEvent vertex ngay trong cùng transaction — audit log Knowledge Graph.

Tech choices đáng chú ý

  • Gremlin Template Library (30 truy vấn prebuilt) thay vì cho phép agent sinh Gremlin tự do → tránh injection, dễ audit
  • MCP (Model Context Protocol) làm giao thức chuẩn giữa agent và tool → có thể plug thêm external MCP server trong tương lai
  • WebSocket agent trace stream từng bước suy luận về FE → người dùng thấy Qwen "đang nghĩ gì"
  • Circuit breaker + exponential backoff trên GDB/Hologres thread pool → giữ demo không sập khi stress test 25 case song song

Challenges we ran into

  1. Tiếng Việt trong LLM pipeline: giữ dấu tiếng Việt qua toàn bộ OCR → entity extraction → graph storage → template rendering. Bất kỳ lớp nào dùng str.encode("ascii") là hỏng. Chúng tôi enforce UTF-8 từ OSS metadata đến response FastAPI.

  2. Gremlin permission enforcement: thách thức lớn nhất. Gremlin là ngôn ngữ Turing-complete — chặn "câu truy vấn ác ý" không đơn giản. Giải pháp: chỉ cho phép template đã whitelist, agent không viết Gremlin, chỉ chọn template + params.

  3. Agent coordination: khi 10 agent chạy song song, context window bùng nổ. Giải pháp: Summarizer nén context giữa các hop, mỗi agent chỉ thấy "slice" cần thiết.

  4. Citation accuracy: LLM có xu hướng bịa điều luật. Chúng tôi bắt Compliance/LegalLookup trả về structured output với article_id phải tồn tại trong graph → validate ở server, reject nếu fake citation.

  5. Demo reliability: với 25-case stress matrix, chúng tôi từng flake ở case OCR ảnh mờ. Circuit breaker + retry 2 vòng + quick-fill fallback đã ổn định.

Accomplishments that we're proud of

  • 10 agents hoạt động end-to-end với orchestrator DAG + MCP server trong < 5 ngày
  • Knowledge Graph pháp lý phủ 5 TTHC demo với đầy đủ Luật/Nghị định/Thông tư liên quan, mỗi citation truy vết được tới điều khoản gốc
  • 3-tier permission engine pass 100% negative test case (cán bộ xã không đọc được dữ liệu tỉnh khác)
  • Real-time agent trace qua WebSocket — người xem demo thấy Qwen reasoning từng bước
  • Vietnamese-first UX — mọi text, template văn bản đều đúng Nghị định 30/2020
  • Stress test 25 case (5 TTHC × 5 variant) pass với flake rate < 4%

What we learned

  • Agentic RAG ≠ RAG có thêm agent. Agentic nghĩa là LLM quyết định hop tiếp theo dựa trên evidence đã có, không phải pipeline tĩnh.
  • Qwen3-Max đặc biệt mạnh với tool-calling + structured output tiếng Việt — vượt kỳ vọng so với các model open khác chúng tôi benchmark.
  • Qwen3-VL-Plus OCR tiếng Việt có dấu gần như hoàn hảo trên form hành chính scan, kể cả bản mờ.
  • MCP là game-changer cho multi-agent: thay vì mỗi agent hardcode tool, chúng tôi expose 1 MCP server và mọi agent đều "nói cùng một ngôn ngữ".
  • Permission ở lớp graph query tốt hơn permission ở lớp API — không thể "lách" bằng cách gọi thẳng internal service.
  • Alibaba Cloud stack (GDB + Hologres + OSS + Model Studio) tích hợp mượt bất ngờ — OpenAI-compatible endpoint của DashScope tiết kiệm hàng giờ so với SDK riêng.

What's next for GovFlow

Updating later — we are in progress.

Built With

Share this project:

Updates