รายละเอียดคอลัมน์ของ ai_config, knowledge_base, document, chunk
ภาพรวม
Domain นี้มี 4 ตารางใน schema public (จัดการด้วย Prisma) — ai_config เก็บการตั้งค่า LLM provider
ต่อ LINE OA ส่วนอีก 3 ตารางเป็นคลังความรู้แบบ RAG ที่ไล่ระดับกันลงมาคือ knowledge_base (คลัง) →
knowledge_document (เอกสาร/FAQ ที่อัปโหลด) → knowledge_chunk (ชิ้นข้อความที่ตัดแล้ว พร้อมรหัสอ้างอิง embedding)
ตาราง ai_config
| Column | Type | Nullable | Default | คำอธิบาย |
|---|
id | SERIAL | NO | auto increment | Primary key |
line_oa_id | INTEGER | NO | - | LINE OA ที่ config นี้สังกัด |
organization_id | INTEGER | NO | - | องค์กรเจ้าของข้อมูล (ใช้แยก tenant) |
provider | VARCHAR(50) | NO | 'gemini' | ผู้ให้บริการ LLM |
model | VARCHAR(100) | NO | 'gemini-2.0-flash' | ชื่อโมเดลที่เรียกใช้ |
api_key | TEXT | NO | - | API key ของ provider |
settings | JSONB | NO | '{}' | ค่าปรับแต่งเพิ่มเติม เช่น temperature, max tokens |
status | VARCHAR(20) | NO | 'active' | สถานะการใช้งาน |
created_by | INTEGER | YES | - | ผู้สร้างเรกคอร์ด |
updated_by | INTEGER | YES | - | ผู้แก้ไขล่าสุด |
created_date | TIMESTAMP(3) | YES | now() | วันเวลาที่สร้าง |
updated_date | TIMESTAMP(3) | YES | now() | วันเวลาที่แก้ไขล่าสุด |
deleted_date | TIMESTAMP(3) | YES | - | วันเวลาที่ soft delete |
ตาราง knowledge_base
| Column | Type | Nullable | Default | คำอธิบาย |
|---|
id | SERIAL | NO | auto increment | Primary key |
line_oa_id | INTEGER | NO | - | LINE OA ที่คลังความรู้นี้สังกัด |
organization_id | INTEGER | NO | - | องค์กรเจ้าของข้อมูล |
name | VARCHAR(255) | NO | - | ชื่อคลังความรู้ |
description | TEXT | NO | '' | คำอธิบายคลังความรู้ |
system_instruction | TEXT | NO | '' | System prompt ที่ส่งให้โมเดลเวลาตอบจากคลังนี้ |
status | VARCHAR(20) | NO | 'active' | สถานะการใช้งาน |
stats | JSONB | NO | '{}' | สถิติสรุป เช่น จำนวนเอกสาร/ชิ้นข้อความ |
created_by | INTEGER | YES | - | ผู้สร้างเรกคอร์ด |
updated_by | INTEGER | YES | - | ผู้แก้ไขล่าสุด |
created_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่สร้าง |
updated_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่แก้ไขล่าสุด |
deleted_date | TIMESTAMPTZ(3) | YES | - | วันเวลาที่ soft delete |
ตาราง knowledge_document
| Column | Type | Nullable | Default | คำอธิบาย |
|---|
id | SERIAL | NO | auto increment | Primary key |
knowledge_base_id | INTEGER | NO | - | FK ไปยัง knowledge_base.id |
type | VARCHAR(20) | NO | - | ชนิดเอกสาร เช่น ไฟล์ / ข้อความ / คู่ถาม-ตอบ |
title | VARCHAR(500) | NO | '' | หัวเรื่องเอกสาร |
content | TEXT | NO | '' | เนื้อหาแบบข้อความ |
question | TEXT | NO | '' | คำถาม (ใช้กับเอกสารแบบ FAQ) |
answer | TEXT | NO | '' | คำตอบ (ใช้กับเอกสารแบบ FAQ) |
file_url | TEXT | NO | '' | URL ไฟล์ที่อัปโหลด |
file_name | VARCHAR(255) | NO | '' | ชื่อไฟล์เดิม |
file_type | VARCHAR(50) | NO | '' | ชนิดไฟล์ / MIME type |
file_size | INTEGER | NO | 0 | ขนาดไฟล์ (ไบต์) |
index_status | VARCHAR(20) | NO | 'pending' | สถานะการทำ index/embedding |
index_error | TEXT | NO | '' | ข้อความ error จากการ index ครั้งล่าสุด |
status | VARCHAR(20) | NO | 'active' | สถานะการใช้งาน |
created_by | INTEGER | YES | - | ผู้สร้างเรกคอร์ด |
updated_by | INTEGER | YES | - | ผู้แก้ไขล่าสุด |
created_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่สร้าง |
updated_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่แก้ไขล่าสุด |
deleted_date | TIMESTAMPTZ(3) | YES | - | วันเวลาที่ soft delete |
ตาราง knowledge_chunk
| Column | Type | Nullable | Default | คำอธิบาย |
|---|
id | SERIAL | NO | auto increment | Primary key |
knowledge_document_id | INTEGER | NO | - | FK ไปยัง knowledge_document.id |
knowledge_base_id | INTEGER | NO | - | FK ไปยัง knowledge_base.id (denormalize ไว้เพื่อ query ระดับคลัง) |
content | TEXT | NO | - | เนื้อหาของชิ้นข้อความ |
chunk_index | INTEGER | NO | 0 | ลำดับชิ้นข้อความภายในเอกสาร |
embedding_id | VARCHAR(100) | NO | '' | รหัสอ้างอิง vector ใน vector store ภายนอก |
metadata | JSONB | NO | '{}' | ข้อมูลประกอบของชิ้นข้อความ |
created_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่สร้าง |
หมายเหตุ
- Foreign key:
knowledge_document.knowledge_base_id → knowledge_base.id,
knowledge_chunk.knowledge_document_id → knowledge_document.id,
knowledge_chunk.knowledge_base_id → knowledge_base.id
- Unique:
ai_config มี unique constraint uq_ai_config_org_lineoa_provider บน
(organization_id, line_oa_id, provider) — หนึ่ง OA มีได้ 1 config ต่อ 1 provider
- Index:
idx_ai_config_org_lineoa บน (organization_id, line_oa_id);
knowledge_base มี index บน (line_oa_id, organization_id);
knowledge_document มี index บน knowledge_base_id;
knowledge_chunk มี index บน knowledge_base_id และ knowledge_document_id
knowledge_chunk ไม่มีคอลัมน์ soft delete และไม่มี updated_date — เมื่อเอกสารถูกแก้ ระบบจะ
ตัด chunk ใหม่ทั้งชุดแทนการแก้ทีละแถว
- ตัว vector embedding ไม่ได้เก็บใน PostgreSQL แต่อยู่ใน vector store ภายนอก โดยอ้างอิงผ่าน
knowledge_chunk.embedding_id