Files
lcbp3/docs/AI Specs/deepseek-answer.md
T
2026-05-19 08:19:40 +07:00

13 KiB

จากการวิเคราะห์ repo lcbp3 อย่างละเอียด เทียบกับ blueprint AI DMS ของคุณแบบข้อต่อข้อ:


🔍 สรุปเทียบ Blueprint AI DMS กับ Repo lcbp3


🏗️ 1. Architecture ภาพรวม

Blueprint Repo lcbp3 สถานะ
Web UI / Chat UI Next.js 16.2.0 + shadcn/ui + RagChatWidget.tsx มีแล้ว
AI Agent Layer AiService + AiRagService + AiQueueService — ใช้ n8n + Ollama pipeline ตาม ADR-023 มีแล้ว (คนละ approach)
RAG Engine AiRagService + AiQdrantService (Qdrant vector DB, project-isolated) มีแล้ว
Workflow Engine ADR-021 Unified Workflow Engine (DSL-based สำหรับ Correspondences, RFAs, Circulations) มีแล้ว
Tool Layer ⚠️ มี AI services (embedding, OCR, Ollama, Qdrant, migration) แต่ไม่มี tool functions ที่ blueprint ระบุ (เช่น get_rfa(id), get_drawings_by_rfa(rfa_id)) ใน AI module บางส่วน
DB + File Storage MariaDB 11.8 + Two-Phase File Storage (Multer + ClamAV) มีแล้ว

💡 ความเห็น: โครงสร้างพื้นฐานตรงตาม blueprint ~85% แต่ AI Agent Layer ใช้ n8n+Ollama แทน LangChain/CrewAI ที่ blueprint แนะนำ ซึ่งเป็น architectural decision ที่ ถูกต้องแล้ว สำหรับบริบทของคุณ (local deployment บน QNAP, เน้น privacy, no external API) — ADR-023 รวม ADR-017, 017B, 018, 020, 022 เข้าด้วยกันเป็น Unified AI Architecture


🔥 2. Core Components (ต้องมี)

2.1 AI Agent (สมอง)

Blueprint แนะนำ Repo จริง หมายเหตุ
LangChain / OpenClaw / CrewAI n8n + Ollama ADR-023 เลือก n8n workflow orchestration + Ollama local LLM inference — pragmatic choice สำหรับ QNAP NAS ที่มี RAM 32GB

💡 ความเห็น: n8n เป็น low-code workflow automation ที่ stable กว่า LangChain สำหรับ production use case นี้ และ Ollama รองรับการรัน local LLM บน CPU ได้ดี จุดที่ยังขาดคือ agentic decision-making — ตอนนี้ AI ยังไม่สามารถ "ตัดสินใจว่าจะ query DB / search document / run workflow" ได้เอง ต้องต่อยอดจาก n8n workflow + AI services ที่มีอยู่

2.2 RAG System (ค้นหาเอกสาร)

Blueprint Repo สถานะ
Vector DB (Qdrant/Chroma) QdrantAiQdrantService ใช้ @qdrant/js-client-rest, collection lcbp3_vectors, 768-dim vectors, Cosine distance, project-isolated payload filter ครบ
Search PDF/Drawing/Spec AiRagService — query ผ่าน Ollama + Qdrant, BullMQ-backed async pipeline, Redis caching, TTL 5 นาที, FR-009 (1 active job per user) ครบ
Embedding embedding.service.ts + Ollama embed model (nomic-embed-text) มีแล้ว
Chunking ⚠️ มี ai-ingest.service.ts สำหรับ document ingestion แต่ไม่เห็น chunking strategy ชัดเจน ต้องตรวจสอบ
Use case: "Drawing A-101 revision ล่าสุด" ยังไม่เห็น integration ระหว่าง RAG search ↔ drawing module โดยตรง ยังไม่มี

2.3 Tool Layer

Blueprint Tool Repo สถานะ
get_rfa(id) ไม่มีใน AI module (มีใน RFA module แต่ AI เรียกตรงไม่ได้) ต้องพัฒนา
get_drawings_by_rfa(rfa_id) ไม่มี cross-module tool ต้องพัฒนา
get_latest_revision(drawing_code) ไม่มีใน AI module ต้องพัฒนา
search_documents(query) มีผ่าน RAG + Elasticsearch มีแล้ว
get_transmittal_history() ไม่มี ต้องพัฒนา

💡 Insight: ตรงนี้คือ gap สำคัญที่สุด — blueprint บอกว่า tool layer คือ "bridge ระหว่าง AI กับ DB จริง" แต่ repo ตอนนี้ AI module แยกขาดจาก business modules (RFA, Drawing, Transmittal) ตาม ADR-018 AI Boundary Policy (ต่อมาถูกรวมเข้า ADR-023) ที่กำหนดว่า "Ollama Isolation มี No Direct DB/Storage Access" — นี่คือ security boundary ที่ดี แต่ต้องสร้าง tool functions เป็น bridge จริงๆ

2.4 Workflow Engine

Blueprint Repo สถานะ
RFA status flow workflow-engine module + rfas components มีแล้ว
Approval logic ADR-021 Integrated Context Workflow มีแล้ว
Revision control Drawing module มี revision tracking มีแล้ว

2.5 File Storage

Blueprint Repo สถานะ
เก็บไฟล์จริง (PDF, DWG) Two-Phase File Storage, Multer + ClamAV virus scanning มีแล้ว
Version control Schema v1.8.0 รองรับ มีแล้ว
Naming convention Document Numbering (ADR-002, Double-lock mechanism) มีแล้ว

⚙️ 3. Database Design

Blueprint Suggestion Repo สถานะ
ai_embeddings (document_id, chunk_text, vector) Qdrant เก็บ vectors แยกจาก MariaDB, collection lcbp3_vectors พร้อม payload (project_public_id, public_id) มีแล้ว (คนละ implementation)
ai_logs (user_query, agent_decision, tool_used) ai-audit-log.entity.ts + AuditLog entity — บันทึก AI jobs, callbacks, results มีแล้ว
ai_tasks (background job, indexing) BullMQ queues (ai-realtime, ai-batch) + MigrationLog entity มีแล้ว
RFAs, Drawings, Revisions มีครบทุก module มีแล้ว

🤖 4. AI Use Cases (ของจริง)

Use Case สถานะใน Repo
1. Smart Search — "ขอ drawing structural ล่าสุดของ zone B" ⚠️ RAG search มีแล้ว + Elasticsearch แต่ยังไม่รวม intent understanding + cross-module query
2. Document QA — "สรุป spec นี้" ⚠️ AiRagService รองรับ Q&A บน document content ผ่าน Ollama — มีพื้นฐานแล้ว
3. Relationship Mapping — "RFA นี้เกี่ยวกับ drawing อะไร" ยังไม่มี cross-module relationship query
4. Timeline Analysis — "RFA นี้ delay เพราะอะไร" ยังไม่มี
5. Auto Classification — upload file → AI tag ai-ingest.service.ts + metadata extraction + AI Suggestion (POST /ai/suggest)
6. Alert / Assistant — "Drawing นี้ outdated", "RFA ใกล้ deadline" ⚠️ มี reminder module + BullMQ queues แต่ยังไม่ integrated กับ AI

🧩 5. UI Design

Blueprint Repo สถานะ
Hybrid UI (Table + Chat) DataTables-style + RagChatWidget.tsx + rag-search-bar.tsx + rag-result-card.tsx มีแล้ว
Drawing Page (revision history, related RFAs, AI summary) Drawing module + revision tracking + AI components (document-comparison-view.tsx) มีแล้ว
AI Status Banner AiStatusBanner.tsx มีแล้ว

6. Tech Stack

Blueprint แนะนำ Repo จริง หมายเหตุ
PHP (ของเดิมคุณ) NestJS 11 (TypeScript) คุณเปลี่ยน stack ไปแล้ว — repo เป็น TypeScript 87.5%
Python (AI service) TypeScript + n8n + Ollama ไม่มี Python service แยก — AI logic อยู่ใน NestJS module + n8n workflows
LangChain n8n + custom services Architectural decision ที่ pragmatic — n8n เสถียรกว่า LangChain สำหรับ production
Qdrant @qdrant/js-client-rest ตรงตาม blueprint
Ollama Ollama บน QNAP NAS ตรงตาม blueprint
DataTables + Chat UI shadcn/ui + RagChatWidget ตรงตาม blueprint

🔥 7. Flow การทำงานจริง

📥 Upload Drawing Flow:

User upload → Multer + ClamAV scan → Two-Phase File Storage →
ai-ingest.service (extract text, OCR, embed) → Qdrant upsert → AI tag metadata

มีครบตาม blueprint

🔎 Query Flow:

User: "drawing ล่าสุดของ contract นี้" →
RagChatWidget → AiRagService → Qdrant search → Ollama generate answer →
แสดงผลพร้อม citations

⚠️ มี RAG search แต่ยังขาด tool call ไปยัง drawing/contract modules


🧠 8. Insight สำคัญ — สิ่งที่ทำถูกแล้วและที่ต้องระวัง

หลักการ Repo คะแนน
อย่าให้ AI query DB ตรงๆ ADR-023: Ollama Isolation, No Direct DB Access ดีมาก
อย่าให้ AI ตัดสินใจ workflow Workflow Engine (ADR-021) แยกจาก AI ดีมาก
AI → call function (tool) ⚠️ ยังไม่มี tool function layer เชื่อม AI ↔ business modules ต้องพัฒนา
System → validate logic Validation services, RBAC guards, Business Logic Guards (37 edge cases) ดีมาก

🚀 9. Roadmap — สถานะเทียบ Blueprint

Blueprint Phase Repo Status
Phase 1: AI chat + query DB + basic tools v1.9.0 — RagChatWidget + RAG search + AI Suggestion endpoints
Phase 2: RAG + embedding v1.9.2 — Qdrant collection, embedding service, RAG pipeline
Phase 3: Automation, alert, classification 🔄 กำลังพัฒนา — AI Suggest, reminder module, n8n workflows

🎯 10. Ultimate Version — "AI = Document Controller"

ความสามารถ สถานะ
Auto check revision mismatch ยังไม่มี
Missing approval detection ยังไม่มี
Outdated drawing alert ยังไม่มี

💡 สรุปภาพรวม

repo lcbp3 v1.9.2 ของคุณทำไปแล้ว ~70-80% ของ blueprint AI DMS

สิ่งที่มีแล้ว (แข็งแรงมาก):

  • RAG System — Qdrant + Ollama + BullMQ pipeline, project-isolated, production-ready
  • AI Chat UIRagChatWidget + search bar + result cards
  • Workflow Engine — DSL-based, รองรับ RFA, Correspondence, Circulation
  • File Storage — Two-phase + virus scanning + version control
  • AI Boundary — Security isolation ที่ดี (Ollama ไม่แตะ DB โดยตรง)
  • Infrastructure — Docker Compose hardened, Blue-Green Deploy, 0 vulnerabilities
  • Documentation — 10/10 Gaps Closed, 23 ADRs, specs ครอบคลุมทุกมิติ

สิ่งที่ยังขาด (ตาม blueprint):

  1. Tool Layer — ยังไม่มี tool functions เชื่อม AI กับ business modules (get_rfa, get_drawings_by_rfa, get_latest_revision ฯลฯ) — นี่คือ gap ใหญ่สุด
  2. Agentic Decision-Making — AI ยังตอบได้เฉพาะ RAG search ยังตัดสินใจเองไม่ได้ว่าจะเรียก tool ไหน
  3. Cross-Module Relationship Mapping — ยังไม่มี RFA ↔ Drawing ↔ Revision linkage ใน AI context
  4. Auto Document Controller — ยังไม่ถึงขั้น AI ตรวจสอบ revision mismatch, missing approval อัตโนมัติ

🎯 สิ่งที่ควรทำต่อ (Priority):

  1. สร้าง Tool Functions ใน AI module ที่เป็น bridge ไปยัง RFA, Drawing, Transmittal modules — โดยคง security boundary ไว้
  2. เพิ่ม Intent Routing — ให้ AI รู้ว่าคำถามแบบไหนควรเรียก tool ไหน (ต่อยอดจาก n8n workflow ที่มี)
  3. Cross-Module Context — inject RFA-Drawing-Revision relationships เข้า RAG context
  4. Alert Engine — ต่อยอด reminder module + AI classification เพื่อแจ้งเตือนอัจฉริยะ