#systems#ai#deepseek#copilot
ระบบ AI Copilot ภาพรวม
BC AI Account มี "ผู้ช่วย AI" สองส่วนที่ทำงานต่างกัน อย่าสับสน
| ส่วน | ทำอะไร | อยู่ที่ไหน | อ่านต่อ |
|---|---|---|---|
| ตัวช่วยแบบกฎ (rule-based) | ตรวจ SQL แบบอ่านอย่างเดียว, แปลงคำสั่งภาษาไทยเป็น SQL, วิเคราะห์รายงานตามกฎ | backend/internal/application/process/ai_copilot.go |
ผู้ช่วย AI แบบกฎคำนวณ 6 ตัว (AI Copilot ai-*) |
| แชท AI (DeepSeek) | คุยถามตอบภาษาไทยโดยใช้ข้อมูลจริงของกิจการเป็นบริบท | หน้า /ai + backend/.../http/ai/handler.go |
บันทึกนี้และ 2 บันทึกลูก |
บันทึกนี้อธิบายเฉพาะ "แชท AI" ที่เรียกโมเดล DeepSeek
เส้นทางของคำถามหนึ่งข้อ
ผู้ใช้พิมพ์ในหน้า /ai (AiChatWorkspace.tsx)
-> POST /api/ai/chat (Next.js route handler, ตรวจ session)
-> POST /api/v1/ai/chat (Go backend, ตรวจ access token)
-> ดึงสรุปข้อมูลจริงจากฐานข้อมูลกิจการ (batch SQL อ่านอย่างเดียว)
-> ถามสมอง BC (tool ask_brain) เพื่อแนบความรู้โครงสร้างตาราง/กฎบัญชี
-> POST api.deepseek.com/chat/completions
<- { content, reasoning, model, availableModels, usage }
ถ้า Go ตอบไม่สำเร็จ: Next เรียก DeepSeek เองโดยตรง (fallback ไม่มีข้อมูลสมอง BC)
- หน้า
/aiเป็น server page ที่ตรวจ session แล้วเปิด workspace กลาง (ถ้าไม่ได้ล็อกอินไป/login, ถ้ายังไม่เลือกฐานข้อมูลไป/select-database) - ตัวหน้าจอจริงคือ
AiChatWorkspaceโหลดแบบ dynamic ในPersistentWorkspaceHostเมื่อ path ขึ้นต้นด้วย/ai - เมนู "ระบบ ถามตอบ AI" อยู่ที่
Header.tsxชี้ไป/ai - Go ลงทะเบียน 2 เส้นทางใต้
/api/v1/ai(ทั้งสองต้องมี access token):GET /contextและPOST /chat
ค่าตั้งต้นที่ต้องมี
| ชื่อ | ใช้ทำอะไร |
|---|---|
env DEEPSEEK_API_KEY |
คีย์เรียก DeepSeek (ค่าอยู่ใน env ไม่เขียนลงโค้ดหรือเอกสาร) ถ้าไม่มี Go ตอบ error ว่ายังไม่ได้ตั้งค่า |
env BCBRAIN_MCP_URL |
ที่อยู่ MCP ของสมอง BC สำหรับ tool ask_brain (ไม่ตั้งก็มีค่า default ในโค้ด) |
env AI_TEST_PG_DSN |
ใช้เฉพาะ test ที่ต่อฐานข้อมูลจริง ดู ระบบทดสอบ ภาพรวม: บอท UAT, Stagehand, Playwright และ Go test (Tests Overview) |
รายละเอียดการอ่านคีย์ (ลำดับ env แล้วไฟล์ .env*) อยู่ใน แชท AI ฝั่ง Go: เรียก DeepSeek พร้อมบริบทข้อมูลจริง (AI chat handler)
ข้อควรรู้เรื่องข้อมูล
- สรุปข้อมูลกิจการ (ยอดขาย สต็อก ลูกค้าสูงสุด เอกสารล่าสุด ลูกหนี้เกินกำหนด ฯลฯ) ถูกประกอบเป็นข้อความแล้วส่งไปให้ DeepSeek เป็น system prompt ทุกครั้งที่เปิดโหมดใช้ข้อมูลจริง ผู้ดูแลต้องรู้ว่าข้อมูลกิจการออกไปยังผู้ให้บริการภายนอก
- SQL ที่ใช้ดึงบริบททั้งหมดเป็น SELECT/WITH ผ่าน query gateway ที่ปฏิเสธคำสั่งอื่น ดู Query Gateway: /query/list, limit, batch, exec, execBatch
- ตัวเลขยอดขายรายเดือนและลูกหนี้เกินกำหนดถูกส่งกลับเป็น
NUMERIC::textเพื่อไม่ผ่าน float
ผู้เรียก DeepSeek อื่นในโค้ด (ไม่ใช่แชทหลัก)
- ตัวออกแบบฟอร์มเอกสาร (AI Form Designer) ใน
GlobalDocFormPrintModal.tsxเรียก/api/ai/chatตัวเดียวกัน ดู หน้าแชท AI /ai: ห้องสนทนา โหมดผลลัพธ์ ไฟล์แนบ และตัวออกแบบฟอร์ม (AiChatWorkspace) /api/lineoaและ/api/fraudwarningมีโค้ดเรียก DeepSeek ของตัวเอง (route แยก)- สคริปต์ที่ปรึกษาสำหรับนักพัฒนา
scripts/ask_deepseek.mjsดู สคริปต์ประจำโปรเจกต์ ภาพรวม: ดีพลอยเว็บ ประทับรุ่น สร้างฐานข้อมูล และตัวเฝ้า ticket (Scripts Overview)
ที่มาในโค้ด
backend/internal/adapter/inbound/http/ai/handler.go:1คำอธิบายแพ็กเกจ และ handler ทั้งหมดของแชทbackend/internal/adapter/inbound/http/router.go:270-275ลงทะเบียน/api/v1/ai/contextและ/api/v1/ai/chatหลัง middleware ตรวจ tokenbackend/internal/di/container.go:111สร้าง handler จาก query servicefrontend/src/app/ai/page.tsx:9-14หน้า/aiตรวจ session แล้วเปิด workspacefrontend/src/app/api/ai/chat/route.ts:130Next proxy ไป Go พร้อม fallbackfrontend/src/app/api/ai/context/route.ts:17proxy ขอสรุปบริบทfrontend/shared/layout/PersistentWorkspaceHost.tsx:165map path/aiเป็นโมดูลai- ดูเพิ่ม: แชท AI ฝั่ง Go: เรียก DeepSeek พร้อมบริบทข้อมูลจริง (AI chat handler) · หน้าแชท AI /ai: ห้องสนทนา โหมดผลลัพธ์ ไฟล์แนบ และตัวออกแบบฟอร์ม (AiChatWorkspace) · ผู้ช่วย AI แบบกฎคำนวณ 6 ตัว (AI Copilot ai-*) · เส้นทาง API ฝั่ง Next.js ที่ส่งต่อไป Go backend (API proxy routes) · หน้าต่างพิมพ์รายงานและพิมพ์แบบฟอร์มเอกสาร (GlobalReportPrintModal / GlobalDocFormPrintModal)