Column-level detail for ai_config, knowledge_base, document, chunk
Overview
This domain has 4 tables in the public schema (managed by Prisma). ai_config holds the LLM
provider settings per LINE OA; the other three form a RAG knowledge store that nests downward:
knowledge_base (the store) → knowledge_document (uploaded documents / FAQ entries) →
knowledge_chunk (split text pieces with their embedding reference).
Table ai_config
| Column | Type | Nullable | Default | Description |
|---|
id | SERIAL | NO | auto increment | Primary key |
line_oa_id | INTEGER | NO | - | LINE OA this config belongs to |
organization_id | INTEGER | NO | - | Owning organization (tenant separation) |
provider | VARCHAR(50) | NO | 'gemini' | LLM provider |
model | VARCHAR(100) | NO | 'gemini-2.0-flash' | Model name to call |
api_key | TEXT | NO | - | Provider API key |
settings | JSONB | NO | '{}' | Extra tuning options such as temperature, max tokens |
status | VARCHAR(20) | NO | 'active' | Record status |
created_by | INTEGER | YES | - | Creator user id |
updated_by | INTEGER | YES | - | Last updater user id |
created_date | TIMESTAMP(3) | YES | now() | Creation timestamp |
updated_date | TIMESTAMP(3) | YES | now() | Last update timestamp |
deleted_date | TIMESTAMP(3) | YES | - | Soft-delete timestamp |
Table knowledge_base
| Column | Type | Nullable | Default | Description |
|---|
id | SERIAL | NO | auto increment | Primary key |
line_oa_id | INTEGER | NO | - | LINE OA this knowledge base belongs to |
organization_id | INTEGER | NO | - | Owning organization |
name | VARCHAR(255) | NO | - | Knowledge base name |
description | TEXT | NO | '' | Knowledge base description |
system_instruction | TEXT | NO | '' | System prompt sent to the model when answering from this base |
status | VARCHAR(20) | NO | 'active' | Record status |
stats | JSONB | NO | '{}' | Summary statistics such as document / chunk counts |
created_by | INTEGER | YES | - | Creator user id |
updated_by | INTEGER | YES | - | Last updater user id |
created_date | TIMESTAMPTZ(3) | NO | now() | Creation timestamp |
updated_date | TIMESTAMPTZ(3) | NO | now() | Last update timestamp |
deleted_date | TIMESTAMPTZ(3) | YES | - | Soft-delete timestamp |
Table knowledge_document
| Column | Type | Nullable | Default | Description |
|---|
id | SERIAL | NO | auto increment | Primary key |
knowledge_base_id | INTEGER | NO | - | FK to knowledge_base.id |
type | VARCHAR(20) | NO | - | Document kind: file / plain text / question-answer pair |
title | VARCHAR(500) | NO | '' | Document title |
content | TEXT | NO | '' | Plain-text body |
question | TEXT | NO | '' | Question (FAQ-type documents) |
answer | TEXT | NO | '' | Answer (FAQ-type documents) |
file_url | TEXT | NO | '' | Uploaded file URL |
file_name | VARCHAR(255) | NO | '' | Original file name |
file_type | VARCHAR(50) | NO | '' | File type / MIME type |
file_size | INTEGER | NO | 0 | File size in bytes |
index_status | VARCHAR(20) | NO | 'pending' | Indexing / embedding status |
index_error | TEXT | NO | '' | Error message from the last indexing run |
status | VARCHAR(20) | NO | 'active' | Record status |
created_by | INTEGER | YES | - | Creator user id |
updated_by | INTEGER | YES | - | Last updater user id |
created_date | TIMESTAMPTZ(3) | NO | now() | Creation timestamp |
updated_date | TIMESTAMPTZ(3) | NO | now() | Last update timestamp |
deleted_date | TIMESTAMPTZ(3) | YES | - | Soft-delete timestamp |
Table knowledge_chunk
| Column | Type | Nullable | Default | Description |
|---|
id | SERIAL | NO | auto increment | Primary key |
knowledge_document_id | INTEGER | NO | - | FK to knowledge_document.id |
knowledge_base_id | INTEGER | NO | - | FK to knowledge_base.id (denormalized for base-level queries) |
content | TEXT | NO | - | Chunk text |
chunk_index | INTEGER | NO | 0 | Chunk position within its document |
embedding_id | VARCHAR(100) | NO | '' | Reference to the vector in the external vector store |
metadata | JSONB | NO | '{}' | Auxiliary chunk metadata |
created_date | TIMESTAMPTZ(3) | NO | now() | Creation timestamp |
Notes
- Foreign keys:
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 has unique constraint uq_ai_config_org_lineoa_provider on
(organization_id, line_oa_id, provider) — one config per provider per OA
- Indexes:
idx_ai_config_org_lineoa on (organization_id, line_oa_id);
knowledge_base on (line_oa_id, organization_id);
knowledge_document on knowledge_base_id;
knowledge_chunk on knowledge_base_id and on knowledge_document_id
knowledge_chunk has no soft-delete column and no updated_date — when a document changes,
its chunks are regenerated as a set rather than edited row by row
- Vector embeddings are not stored in PostgreSQL; they live in an external vector store and are
referenced through
knowledge_chunk.embedding_id