เวลาอ่าน: 14 minutes

เป็นเวลาหลายเดือน ฉันได้กองสะสมกฎการกำกับดูแลเอเจนต์ไว้ ไฟล์ EAGER รายการตรวจสอบแบบ LAZY โปรโตคอลการสิ้นสุดเซสชันหกขั้นตอน และถึงกระนั้น ยังมีคำถามหนึ่งที่ยังคงค้างอยู่: LLM รู้ได้อย่างไรว่าสิ่งที่มัน มีสิทธิ์ทำอะไรกับไฟล์ ?

คำตอบไม่ได้อยู่ในพรอมต์ แต่อยู่ในระบบไฟล์

นี่คือข้อกำหนดสถาปัตยกรรมที่ทำให้คำตอบสามารถนำไปใช้ได้ — la เมทริกซ์การกำกับดูแล LLM.

ปัญหา: Prompt Engineering คือปราสาททราย

เมื่อเราให้ไฟล์แก่ LLM เราก็ให้ทุกอย่างแก่มัน เนื้อหา ใช่ — แต่ยังรวมถึงการไม่มีมาตรการป้องกันด้วย LLM ไม่รู้ว่าไฟล์นี้มี ความลับ ความเห็นเชิงคาดเดา หรือโค้ดแบบ closed source มันจะจัดทำดัชนี สรุปมัน อ้างอิงมัน ผสมมันกับข้อมูลอื่น — และอาจจะ เผยแพร่ใน embedding สาธารณะหรือคำตอบของผู้ใช้

กลอุบายแบบคลาสสิกคือพรอมป์ต์:

"Tu es un assistant sécurisé. Ne divulgue jamais d'informations confidentielles.
Si tu détectes un secret, ignore-le. Si tu détectes une opinion, ne la répète pas."

พรอมต์นี้มีสามปัญหา:

  1. มันขึ้นอยู่กับความเต็มใจของ LLM โมเดลที่ใหญ่พอที่จะ

การแก้ไขบั๊กที่ซับซ้อนนั้นใหญ่พอที่จะข้ามคำสั่งหนึ่ง ด้านความปลอดภัยที่จมอยู่ในบริบท 200k โทเค็น

  1. มันเป็นเรื่องของบริบท ไม่ใช่โครงสร้าง เปลี่ยนพรอมป์ เปลี่ยน LLM,

เปลี่ยนเซสชัน — แล้วกฎก็หายไป

  1. มันสเกลไม่ได้ ทุกประเภทไฟล์ใหม่ ทุกระดับใหม่

ความเป็นส่วนตัวกำหนดให้ต้องมีข้อกำหนดใหม่ พร้อมต์ของคุณกลายเป็น ข้อความทางกฎระเบียบที่ไม่มีใครอ่านจนจบทั้งหมด

ความปลอดภัยของระบบต้องไม่ขึ้นอยู่กับคำสั่งที่เรา อาจลืม ข้ามไป หรือไม่โหลดก็ได้ มันต้องขึ้นอยู่กับ กำแพงที่ไม่อาจข้ามผ่านได้โดยไม่ต้องการอย่างชัดแจ้ง

คำตอบของฉัน: เมทริกซ์ 4×4

โซลูชันที่ฉันนำไปใช้ในเวิร์กสเปซของฉันคือ เมทริกซ์โซน × สิทธิ์การเข้าถึง LLM ไม่ได้ขอให้ LLM ระมัดระวัง มันทำให้ ความประมาทที่เป็นไปไม่ได้ในเชิงโครงสร้าง

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 220

title La Matrice de Gouvernance LLM — Zone × Droit d'Accès

package "Workspace" {

  rectangle "RACINE\n(Cercle 0)\n━━━━━━\nBrain dump\nPensée libre\n[INTERDIT LLM]" as Z0 #FFB3B3
  rectangle "configuration/\n(Cercle 1)\n━━━━━━\nSecrets, tokens\nInfra privée\n[INTERDIT LLM]" as Z1 #FFB3B3
  rectangle "office/\n(Cercle 2)\n━━━━━━\nData éditoriale\nArticles, cadrages\n[FILTRÉ Vision]" as Z2 #FFF3B3
  rectangle "foundry/private/\n(Cercle 3)\n━━━━━━\nCode closed source\n[DATASET PRIVÉ]" as Z3 #B3D9FF
  rectangle "foundry/public/\n(Cercle 3)\n━━━━━━\nCode open source\nApache 2.0\n[ACCÈS LIBRE]" as Z4 #B3FFB3

}

Z0 -[hidden]-> Z1
Z1 -[hidden]-> Z2
Z2 -[hidden]-> Z3
Z3 -[hidden]-> Z4

@enduml

ห้าโซน (มิติเชิงพื้นที่ — GDPR)

แต่ละโซนของเวิร์กสเปซมีระดับ GDPR ซึ่งกำหนด*ที่ใด*ที่ไฟล์สามารถ ถูกกำหนดเส้นทาง:

โซน ระดับ GDPR เนื้อหา สิทธิ์การเข้าถึง RAG สาธารณะ

ราก

0 — ส่วนตัว

การเทความคิดทั้งหมด การสนทนากับ LLM

ห้าม— ไม่ถูกจัดทำดัชนีเลย

configuration/

1 — จำกัดเฉพาะเจ้าของ

ความลับ โทเค็น คีย์ API

ห้าม— ไม่เคยถูกจัดทำดัชนี

office/

2 — จำกัดเฉพาะผู้ร่วมงาน

ข้อมูลเชิงบรรณาธิการ การกำหนดกรอบ การอบรม

กรองแล้ว— การมองเห็นเท่านั้น

foundry/private/

3 — เปิดตามเงื่อนไข

โค้ดแบบ closed source, SaaS ที่ไม่เปิดเผยต่อสาธารณะ

ห้าม— ชุดข้อมูลส่วนตัวเท่านั้น

foundry/public/

4 — กลุ่มผู้ชมแบบเนทีฟ

โค้ด Apache 2.0, ปลั๊กอินที่เผยแพร่แล้ว

อิสระ— การจัดทำดัชนีแบบเต็มรูปแบบ

กฎนั้นง่ายมาก: พาธของไฟล์เป็นตัวกำหนดว่า LLM สามารถทำอะไรกับมันได้ ไม่มีเมทาดาทาที่ต้องดูแลรักษา ไม่มีแท็กที่ต้องเพิ่มใน frontmatter ไม่ต้องจัดประเภทด้วยตนเองทุกครั้งที่คอมมิต ไฟล์อยู่ใน`OSS/(No text provided to translate) มันเป็นสาธารณะ มันอยู่ใน`configuration/? เขาเป็นคนที่แตะต้องไม่ได้

การจำแนกประเภทเชิงญาณวิทยา (มิติที่สอง)

มิติเชิงพื้นที่บอกว่า จะกำหนดเส้นทางไปที่ใด แต่มีแกนที่สองซึ่งตั้งฉาก: อะไร ที่ต้องกำหนดเส้นทาง. ไฟล์บางไฟล์ในพื้นที่ที่ได้รับอนุญาตมีข้อมูล ซึ่งไม่ควรถูกเจือจางตามที่เป็นอยู่:

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 240

title La Double Cascade — Filtre Spatial + Filtre Épistémique

start

:Le LLM rencontre un fichier;

if (Zone physique ?) then (Cercle 0-1)
  :ACCÈS BLOQUÉ\n(secret, brain dump);
  stop
elseif (Zone CSS/)
  :DROIT D'ACCÈS PRIVÉ\n→ dataset fine-tuning;
  :Filtre épistémique\nVision/Opinion;
  if (Classification ?) then (VISION)
    :Dataset privé\n→ entraînement autorisé;
  else (OPINION)
    :CONFINÉ\n→ pas d'entraînement;
  endif
elseif (Zone office/)
  :DROIT D'ACCÈS FILTRÉ\n→ accès conditionnel;
  :Filtre épistémique\nVision/Opinion/Stratégie;
  if (Classification ?) then (VISION)
    :DILUTION COMPLÈTE\n→ docs racine + blog;
  elseif (STRATÉGIE)
    :DILUTION RESTREINTE\n→ docs racine seulement;
  else (OPINION)
    :CONFINEMENT\n→ office/ uniquement;
  endif
else (Zone OSS/)
  :ACCÈS LIBRE\n→ indexation complète;
endif

stop

@enduml

ตารางการจำแนกประเภททางญาณวิทยา ซึ่งจารึกไว้ในกฎข้อ 2bis แห่งธรรมาภิบาลของฉัน เอเจนต์ :

| สถานะ | คำนิยาม | สัญญาณ LLM | ปลายทาง | | วิสัยทัศน์ | สถาปัตยกรรมที่มั่นคงแล้ว, แพตเทิร์นที่ผ่านการทดสอบ | ภาษาเชิงประกาศ, การอ้างอิงเซสชัน/การทดสอบ | การเจือจางแบบสมบูรณ์ + บล็อก | | กลยุทธ์ | การวางตำแหน่งทางธุรกิจ, การกำหนดราคา | คำศัพท์ด้านตลาด, การแข่งขัน | เอกสารรากเท่านั้น | | ความเห็น | การคาดเดา, สมมติฐานที่ยังไม่ได้รับการยืนยัน | ภาษาเชิงสมมติ, สัญชาตญาณ | การกักบริเวณในวงกลม 0 |

การผสมผสานของสองมิติ — โซนทางกายภาพ × การจำแนกประเภทเชิงญาณวิทยา — ขึ้นรูปมันเมทริกซ์สมบูรณ์:

@startuml
skinparam backgroundColor #FEFEFE

title La Matrice Complète — Zone × Classification

salt
{
{T
+ Zone | VISION | STRATÉGIE | OPINION
+ Racine (0) | ✗ Interdit | ✗ Interdit | ✗ Interdit
+ configuration/ (1) | ✗ Interdit | ✗ Interdit | ✗ Interdit
+ office/ (2) | ✓ Docs + Blog | ✓ Docs seulement | ✗ Confiné
+ CSS/ (3) | ✓ Dataset privé | ✓ Dataset privé | ✗ Confiné
+ OSS/ (4) | ✓ Public libre | ✓ Public libre | ✓ Public libre
}
}

@enduml

LLM บริโภคเมทริกซ์นี้อย่างไร

เมทริกซ์ไม่ใช่เอกสารที่ LLM อ่าน แต่เป็น ข้อจำกัด โดยนัย ที่ถูกเข้ารหัสในเวกเตอร์บริบทแบบผสม (EPIC 9 — กำลังดำเนินการ ของการดำเนินการ).

นี่คือสิ่งที่ LLM ได้รับในแต่ละเซสชัน:

VECTEUR COMPOSITE DE CONTEXTE
├── RAG pgvector → OSS/ + office/Vision
│   (similarité sémantique sur contenu publiable)
├── Knowledge Graph graphify → OSS/
│   (relations exactes entre artéfacts publics)
├── Knowledge Graph privé → CSS/
│   (relations entre code closed source — jamais exporté)
├── Métadonnées de zone → chaque fichier taggé par zone physique
│   (le LLM sait s'il est dans office/ ou OSS/)
└── Historique des décisions → WORKSPACE_VISION.adoc
    (contexte temporel des arbitrages)

ในทางปฏิบัติ เมื่อ LLM บอกฉันว่า:

Je vais indexer le contenu de edster/ pour enrichir le knowledge graph...

ข้อมูลเมตาของโซนตอบกลับก่อนที่ LLM จะจบประโยคด้วยซ้ำ: edster/`อยู่ใน`CSS/, ระดับ 3 →ห้ามเข้าถึง knowledge graph สาธารณะ RAG ไม่เห็นมัน กราฟไม่แตะต้องมัน คำตอบของผู้ใช้ไม่ อย่าอ้างถึงมัน

ภววิทยาเชิงพื้นที่ทำงานเป็นสิทธิ์ของ Unixสำหรับ LLM คุณไม่ได้ขอให้กระบวนการระมัดระวังกับ`/etc/shadow`No source text was provided to translate. Please send the French text you’d like translated into Thai. คุณปฏิเสธการเข้าถึงเพื่ออ่านแก่เขา หลักการเดียวกัน

การนำไปใช้: งาน Gradle แบบมีชนิด

เมทริกซ์ไม่ใช่ปรัชญา มันคือโค้ด นี่คือสัญญาของงาน Gradle ที่นำไปใช้งาน:

abstract class ZoneAwareIndexer @Inject constructor(
    private val rootDir: DirectoryProperty,
    private val configServer: ConfigServerProperty  // → configuration/
) : DefaultTask() {

    @Input
    val zoneFilter: SetProperty<Zone> = project.objects.setProperty(Zone::class.java)

    @OutputFile
    val ragIndex: RegularFileProperty = project.objects.fileProperty()

    @TaskAction
    fun index() {
        val allowedPaths = zoneFilter.get().flatMap { it.resolve(rootDir.get()) }
        val forbiddenPaths = Zone.RESTRICTED.resolve(rootDir.get())
                            + Zone.INTIMATE.resolve(rootDir.get())
        // Le RAG ne voit jamais configuration/ ni la racine
        // CSS/ alimente un index privé, pas celui-ci
        // office/ est filtré par le classifieur Vision/Opinion
    }
}

enum class Zone {
    INTIMATE,      // Cercle 0 — racine
    RESTRICTED,    // Cercle 1 — configuration/
    EDITORIAL,     // Cercle 2 — office/
    CLOSED_SOURCE, // Cercle 3 — foundry/private/
    OPEN_SOURCE    // Cercle 3 — foundry/public/
}

งานนี้*สามารถทดสอบได้* คุณสามารถเขียนการทดสอบที่ตรวจสอบว่า:

@Test
fun `le RAG n'indexe jamais configuration`() {
    val index = ZoneAwareIndexer(rootDir, configServer)
    index.zoneFilter.set(setOf(Zone.OPEN_SOURCE, Zone.EDITORIAL))
    index.index()

    assertThat(index.ragIndex).doesNotContain("configuration/")
}

@Test
fun `le code closed source est exclu du RAG public`() {
    val index = ZoneAwareIndexer(rootDir, configServer)
    index.zoneFilter.set(setOf(Zone.OPEN_SOURCE))  // OSS only

    assertThat(index.ragIndex).doesNotContain("edster")
}

380 การทดสอบ, 380 PASS เช่นเดียวกับ plantuml-gradle — ความปลอดภัยได้รับการทดสอบ, ไม่คาดคิด

ทำไมนี่จึงเป็นแถลงการณ์ ไม่ใช่แค่สเปก

เอกสารนี้เป็นข้อกำหนดสถาปัตยกรรม เนื่องจากกำหนดว่า:

  • บางขนาด(เชิงพื้นที่, เชิงญาณวิทยา)

  • บางกฎเชิงกำหนด(โซน → สิทธิ์การเข้าถึง)

  • Un สัญญาตามภารกิจ(Gradle แบบมีชนิด, ทดสอบได้)

  • หนึ่งการอิมพลีเมนต์อ้างอิง(พื้นที่ทำงานของฉัน)

แต่มันก็ยังเป็นแถลงการณ์เพราะเขาแสดงจุดยืนต่อประเด็นถกเถียง กว้างขึ้น: จะกำกับดูแลการเข้าถึงข้อมูลของ LLM อย่างไร?

คำตอบจากภาคอุตสาหกรรมคือ prompt engineering + guardrails
ตัวจำแนกประเภทแบบ post-hoc คำตอบของฉันคือ: จัดเก็บไฟล์ของคุณไว้ใน โฟลเดอร์ที่ถูกต้อง ส่วนที่เหลือเป็นอัตโนมัติ

แถลงการณ์นี้ไม่ได้กล่าวว่า "LLM ต้องได้รับการจัดแนว" แต่กล่าวว่า: "การจัดแนว ของ LLM ที่มีต่อกฎความปลอดภัยของคุณเป็นผลสืบเนื่องมาจากระบบของคุณ ไฟล์ ไม่ใช่จากพรอมต์ของคุณ

แคสเคดที่สมบูรณ์ — จาก Brain Dump สู่บทความบล็อก

เพื่อแสดงให้เห็นวงจรที่สมบูรณ์ นี่คือวิธีที่แนวคิดเรื่องเมทริกซ์นี้ถือกำเนิดขึ้น และได้ถูกเจือจาง:

Session 4 mai 2026 — Feedback global du workspace
  │
  ├→ Le LLM identifie : "la dualité public/privé est invisible"
  │   → Classifié VISION (constat architectural vérifiable)
  │
  ├→ PICTURE_ME_ROLLIN_MATRICE_4X4.adoc — STIMULUS (Cercle 0)
  │   → Brain dump structuré, classification VISION confirmée
  │
  ├→ DILUTION → WORKSPACE_AS_PRODUCT.adoc (section Matrice 4×4)
  │   → La spec vit dans les documents racine
  │
  ├→ DILUTION → WORKSPACE_ORGANIZATION.adoc (OSS/CSS)
  │   → La granularisation est documentée
  │
  └→ ARTICLE 0117 (ce document) → cheroliv.com
      → La VISION est publiée

สิ่งที่เริ่มต้นจากการสังเกตระหว่างเซสชัน ("เฮ้ RAG ไม่รู้ ที่ edster เป็น closed source") กลายเป็นข้อกำหนดทางสถาปัตยกรรม เผยแพร่ภายในเวลาไม่ถึงหนึ่งเซสชัน นี่คือแพตเทิร์น STIMULUS ที่กำลังทำงานอยู่

ข้อดี/ข้อเสีย

แนวทางนี้ (ภววิทยาเชิงพื้นที่ + เมทริกซ์) แนวทางแบบคลาสสิก (Prompt + Guardrails)

เชิงกล — ระบบไฟล์บล็อกการเข้าถึง ไม่ใช่ LLM

แบบประกาศ — พรอมต์ขอให้ LLM ระมัดระวัง

ทดสอบได้ — สัญญาของทาสก์ Gradle ได้รับการตรวจสอบโดยการทดสอบ 380+ รายการ

ไม่สามารถทดสอบได้ — "LLM ได้ปฏิบัติตามกฎหรือไม่?" เป็นคำถามปลายเปิด

เป็นอิสระจาก LLM — เปลี่ยนโมเดล โฟลเดอร์ยังคงอยู่

ขึ้นอยู่กับ LLM — แต่ละโมเดลตีความพรอมป์แตกต่างกัน

Scalable — ประเภทข้อมูลใหม่ = โฟลเดอร์ใหม่ ไม่มีการเปลี่ยนแปลงโค้ด

ไม่สามารถขยายขนาดได้ — ประเภทข้อมูลใหม่ = ข้อกำหนดพรอมป์ใหม่, ความเสี่ยงใหม่ต่อการถดถอย

ตรวจสอบได้ — ระบบไฟล์คือร่องรอยการตรวจสอบ

ไม่สามารถตรวจสอบได้ — พรอมต์ไม่มีประวัติ ไม่มี diff ไม่มี blame

ข้อจำกัด : ต้องมีวินัยในการจัดองค์กรตั้งแต่เริ่มต้น

ข้อจำกัด : ต้องมีวินัยในการเขียนพรอมต์ในทุกเซสชัน

บทสรุป: จัดระเบียบไฟล์ของคุณ ไม่ใช่พรอมป์ต์ของคุณ

เมทริกซ์การกำกับดูแล LLM ที่ฉันเพิ่งอธิบายไปไม่ใช่ผลิตภัณฑ์ นี่คือข้อกำหนดสถาปัตยกรรม— และนั่นคือเหตุผลว่าทำไมเธอจึงเป็น ที่สามารถเผยแพร่ได้

สิ่งที่ทำให้มันทนทานคือมันไม่ขออะไรจาก LLM เลย มันไม่ได้…​ ไม่ไว้วางใจ มันไม่ได้ขึ้นอยู่กับการจัดแนวของมัน ความเข้าใจของมัน ของภาษาฝรั่งเศส หรือความปรารถนาดีของตน มันขึ้นอยู่กับระบบไฟล์ — ชั้นที่ต่ำที่สุด เสถียรที่สุด และผ่านการทดสอบมากที่สุดของสแตกทั้งหมด

เมื่อฉันบอก LLM ของฉันว่า "คุณสามารถจัดทำดัชนีทุกอย่างใน`OSS/, ไม่มีอะไรใน `configuration/, et `office/`เฉพาะเมื่อจัดประเภทเป็น Vision เท่านั้น นี่ไม่ใช่คำสั่ง แต่เป็น ฟิลเตอร์ — ที่ถูกนำไปใช้ใน Kotlin, ตรวจสอบแล้วด้วยการทดสอบ 380 รายการ ซึ่งดำเนินการก่อนที่ LLM จะเห็นข้อมูล

นี่คือความแตกต่างระหว่างการบอกใครสักคนว่า "อย่ามองในลิ้นชักนั้น และล็อกลิ้นชักด้วยกุญแจ การกำกับดูแลเอเจนต์ที่ฉันสร้างมาตั้งแต่ เดือนต่างๆ คือกุญแจ เมทริกซ์คือแผนผังของเฟอร์นิเจอร์

บทความที่เกี่ยวข้อง