Chapter 21 — Week 1 Architecture Review & Integration Milestone
ทำไมต้องชื่อนี้และเรียนไปเพื่ออะไร?
ตลอด 6 วันที่ผ่านมาใน Phase 2 เราได้ประดิษฐ์ชิ้นส่วนระดับ Enterprise ขึ้นมาทีละชิ้น: Dynamic Skill Engine (Day 15–17), Tree-sitter AST Parser (Day 18), Call Hierarchy Graph & Blast Radius (Day 19), และ Hybrid Retrieval Engine RRF (Day 20) แต่วิศวกรระดับ Staff / Principal Architect ทราบดีว่า "ชิ้นส่วนที่สมบูรณ์แบบแยกชิ้นกัน ไม่มีความหมายถ้าประกอบร่างไม่ติด!"
ใน Day 21 เราจึงทำ Integration Milestone ร้อยเรียงทุกโมดูลเข้าด้วยกันเป็น Enterprise SE Agent Kernel ตัวเดียว พร้อมทดสอบ Benchmark ประสิทธิภาพและวัด Memory Footprint บน MacBook M3 16GB ก่อนส่งมอบเข้าสู่ Week 2!
ใน Day 21 เราจะรวบรวมชิ้นส่วนทั้งหมดของ Phase 2 เข้าด้วยกันในรูปแบบ Integration Test Suite และตรวจสอบสถาปัตยกรรมภาพรวม:
รันชุดการทดสอบระบบอัตโนมัติ (Integration Test Suite) ที่จำลองการโหลด Skill, การเรียกใช้ AST Parser, การสร้าง Call Graph, และการค้นหาผ่าน Hybrid Retriever เพื่อตรวจสอบความเสถียรของสถาปัตยกรรม
เพื่อให้มั่นใจว่าระบบโครงสร้างพื้นฐานในสัปดาห์นี้ทำงานสอดประสานกันได้อย่างไร้รอยต่อ ก่อนก้าวเข้าสู่การทำ Sandbox และ Git Worktrees ในสัปดาห์ถัดไป
ใช้ Tree-sitter AST สแกนโครงสร้างคลาส เมธอด และผูกความสัมพันธ์ข้ามไฟล์ลงใน Call Hierarchy Directed Graph
รวมพลัง ChromaDB (Intent) + AST Symbols (Exact Signature) ค้นหาจุดแก้บั๊กผ่าน RRF ($k=60$)
SkillRegistry และ LifecycleManager โหลดคู่มือเฉพาะทางเข้า Memory และ Evict ทิ้งเมื่อจบงาน
Qwen2.5-Coder รันลูป Reason ➔ Act ➔ Observe บน Context ที่กะทัดรัด (ประหยัด Token กว่า 88%)
from pathlib import Path
from typing import Dict, Any, List, Optional
from skills.registry import SkillRegistry
from skills.lifecycle import SkillLifecycleManager
from intelligence.ast_parser import JavaASTParser
from intelligence.call_graph import CallHierarchyGraph
from intelligence.hybrid_retrieval import HybridRetrievalEngine
from memory.vector_store import LocalVectorStore
from core.client import OllamaLLMClient
from core.dispatcher import ToolDispatcher
from core.engine import ReActAgentEngine
class EnterpriseSEAgentKernel:
"""
เคอร์เนลหลักของระบบ (Enterprise SE Agent Kernel)
ร้อยเรียงทุกโมดูลในสัปดาห์ที่ 1 เข้าด้วยกันเป็นระบบเดียวอย่างสมบูรณ์แบบ
"""
def __init__(self, workspace_path: str):
self.workspace_root = Path(workspace_path).resolve()
# 1. ระบบจัดการทักษะ (Dynamic Skill Engine)
self.skill_registry = SkillRegistry(skills_dir="./skills")
self.lifecycle_manager = SkillLifecycleManager(self.skill_registry)
# 2. ระบบสถาปัตยกรรมและ Code Intelligence (AST & Call Graph)
self.ast_parser = JavaASTParser()
self.call_graph = CallHierarchyGraph()
# 3. หน่วยความจำระยะยาว Vector Store (ChromaDB)
self.vector_store = LocalVectorStore(persist_dir=str(self.workspace_root / ".chroma_db"))
# 4. เอนจินสืบค้นแบบผสมผสาน (Hybrid Retrieval Engine RRF)
self.hybrid_engine = HybridRetrievalEngine(
vector_store=self.vector_store,
ast_parser=self.ast_parser,
rrf_k=60
)
# 5. สมองกลและตัวจัดสรรเครื่องมือ (ReAct Engine)
self.client = OllamaLLMClient(model_name="qwen2.5-coder:7b")
self.dispatcher = ToolDispatcher(workspace_root=str(self.workspace_root))
self._initialize_kernel_index()
def _initialize_kernel_index(self) -> int:
"""เตรียมความพร้อม: สแกนโค้ดสร้าง AST Symbol Table และ Call Graph ล่วงหน้า"""
java_files = list(self.workspace_root.rglob("*.java"))
if java_files:
# Index AST Symbols สำหรับ Hybrid Search
self.hybrid_engine.index_ast_symbols(java_files)
# Index Call Edges สำหรับ Call Hierarchy
self.call_graph.index_directory(self.workspace_root)
return len(java_files)
def prepare_execution_context(self, user_prompt: str) -> Dict[str, Any]:
"""
[Milestone Core Integration Flow]:
ตรวจจับเจตนา ➔ เรียกใช้ Skill ➔ ค้นหาไฟล์ด้วย Hybrid RRF ➔ คำนวณ Blast Radius
"""
# 1. ค้นหา Skill ที่ตรงกับเจตนา
skill_id = self.skill_registry.find_skill_by_intent(user_prompt) or "unit_test_synthesizer"
skill_instructions = self.lifecycle_manager.activate_skill(skill_id)
# 2. ค้นหาไฟล์เป้าหมายด้วย Hybrid Retrieval
ranked_hits = self.hybrid_engine.hybrid_search(query_text=user_prompt, top_k=2)
primary_file = ranked_hits[0]["file"] if ranked_hits else ""
# 3. สกัด Code Skeleton ของไฟล์เป้าหมาย (ประหยัด Token)
target_skeleton = ""
if primary_file:
target_path = self.workspace_root / primary_file
if target_path.exists():
code = target_path.read_text(encoding="utf-8", errors="replace")
target_skeleton = self.ast_parser.extract_skeleton(code)
# 4. คำนวณ Blast Radius จาก Call Hierarchy Graph
blast_info = {}
if primary_file:
# สมมติชื่อเมธอดหลักในไฟล์
method_name = "processPayment" if "Payment" in primary_file else "execute"
blast_info = self.call_graph.get_blast_radius(method_name)
return {
"active_skill": skill_id,
"instructions": skill_instructions,
"top_ranked_files": ranked_hits,
"primary_skeleton": target_skeleton,
"blast_radius": blast_info
}
เปิด Terminal บน MacBook M3 แล้วรันสคริปต์รวมร่างเพื่อตรวจสอบว่าทุกโมดูลในสัปดาห์ที่ 1 ทำงานประสานกันได้อย่างไร้รอยต่อ:
cd ~/se_agent
source .venv/bin/activate
python -c "from core.kernel import EnterpriseSEAgentKernel; kernel = EnterpriseSEAgentKernel('./sample_maven_project'); print('✅ Kernel Initialized Successfully!')"
🎉 ผลลัพธ์: เคอร์เนลจะสแกน AST, สร้าง Call Graph, และเชื่อมต่อ ChromaDB พร้อมรายงานสถานะพร้อมใช้งานในเวลาเพียงเสี้ยววินาที!
ข้อที่ 1: วัตถุประสงค์หลักของหมุดหมาย "Week 1 Architecture Review & Integration Milestone" ใน Day 21 คืออะไร?
ข้อที่ 2: สถาปัตยกรรม Microkernel ที่เราออกแบบใน Day 15–16 ช่วยแก้ปัญหา Prompt Dilution ในโมเดลขนาด 7B-14B อย่างไร?
ข้อที่ 3: ไฟล์ 3 ชิ้นที่เป็นโครงสร้างมาตรฐานของ 1 Pluggable Skill Cartridge ใน Day 17 คืออะไรบ้าง?
ข้อที่ 4: การสกัด Code Skeleton ด้วย Tree-sitter ใน Day 18 ช่วยประหยัด Context Window ได้เฉลี่ยประมาณเท่าใด?
ข้อที่ 5: ในการวิเคราะห์โครงสร้างข้ามไฟล์ (Day 19) ข้อมูลคู่ใดที่ช่วยให้เราคำนวณ Blast Radius (รัศมีผลกระทบ) ได้อย่างแม่นยำ?
ข้อที่ 6: อัลกอริทึม Reciprocal Rank Fusion (RRF) ใน Day 20 มีจุดเด่นเหนือกว่าการบวกคะแนนค้นหาดิบๆ อย่างไร?
ข้อที่ 7: เมื่อนำระบบทั้ง Week 1 มารวมเข้าในคลาส `EnterpriseSEAgentKernel` อัตราการใช้หน่วยความจำ RAM บน Mac 16GB อยู่ในระดับใด?
ข้อที่ 8: กระบวนการ "Context Eviction" ใน `SkillLifecycleManager` มีความจำเป็นอย่างไรหลัง Agent สังเคราะห์โค้ดเสร็จ?
ข้อที่ 9: ทำไมการใช้ Tree-sitter เพื่อวิเคราะห์ AST ถึงมีความเหนือชั้นกว่า Regular Expression (Regex) อย่างสิ้นเชิง?
ข้อที่ 10: หากพบว่าคลาส `PaymentService` ถูกเรียกจาก 5 จุด (Callers = 5) การที่ Agent ส่งข้อมูลนี้เข้า Context Window มีประโยชน์อย่างไร?
ข้อที่ 11: การที่เราไม่ใช้ Framework ยักษ์ใหญ่แบบกล่องดำ (Zero Black-Box) แต่สร้าง Kernel ขึ้นมาเอง ส่งผลดีอย่างไรในระดับ Production?
ข้อที่ 12: ค่าคงที่ `k=60` ในสูตร RRF มีบทบาทเชิงวิศวกรรมข้อมูลอย่างไร?
ข้อที่ 13: หากผู้ใช้สั่งงานว่า "ช่วย Refactor โค้ดส่วนเชื่อมต่อ RabbitMQ ให้รองรับ Retry Policy" วงจรการทำงานแบบบูรณาการใน Kernel จะเริ่มอย่างไร?
ข้อที่ 14: หลังจากที่เราประกอบร่าง Week 1 สำเร็จใน Day 21 แล้ว ใน Week 2 (เริ่มจาก Day 22) เราจะยกระดับไปสู่เรื่องใด?
ข้อที่ 15: ในฐานะสถาปนิกผู้ออกแบบและประกอบร่าง Enterprise SE Agent Kernel ใน Day 21 คุณมีความรู้สึกอย่างไรต่อระบบนี้?
🏁 สรุปหมุดเชื่อมโยง & Milestone Victory (Chapter Wrap-up)
ขอแสดงความยินดีด้วยครับ! คุณผ่านหมุดหมายสำคัญ Day 21 — Week 1 Architecture Review & Integration Milestone เรียบร้อยแล้ว ชิ้นส่วนทั้งหมดตั้งแต่ Dynamic Skills, Tree-sitter AST, Call Hierarchy Graph, ไปจนถึง Hybrid RRF Retrieval ได้ถูกหล่อหลอมเป็น Enterprise SE Agent Kernel ที่ทำงานประสานกันอย่างคล่องตัวบน MacBook M3 16GB พร้อมก้าวเข้าสู่ Week 2 (Day 22: Safe Sandbox Execution with Git Worktrees) เพื่อลงมือแก้โค้ดและส่งมอบงานจริงในระดับ Enterprise แล้วครับ!